@lwc/synthetic-shadow 3.3.2 → 3.4.0
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/faux-shadow/legacy-shadow-token.d.ts +2 -0
- package/dist/index.cjs.js +64 -17
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +64 -17
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.js
CHANGED
@@ -45,7 +45,7 @@ var assert = /*#__PURE__*/Object.freeze({
|
|
45
45
|
* SPDX-License-Identifier: MIT
|
46
46
|
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
47
47
|
*/
|
48
|
-
const { assign, create, defineProperties, defineProperty, freeze, getOwnPropertyDescriptor, getOwnPropertyNames, getPrototypeOf, hasOwnProperty, isFrozen, keys, seal, setPrototypeOf, } = Object;
|
48
|
+
const { assign, create, defineProperties, defineProperty, freeze, getOwnPropertyDescriptor, getOwnPropertyDescriptors, getOwnPropertyNames, getPrototypeOf, hasOwnProperty, isFrozen, keys, seal, setPrototypeOf, } = Object;
|
49
49
|
const { isArray } = Array;
|
50
50
|
const { concat: ArrayConcat, copyWithin: ArrayCopyWithin, every: ArrayEvery, fill: ArrayFill, filter: ArrayFilter, find: ArrayFind, findIndex: ArrayFindIndex, includes: ArrayIncludes, indexOf: ArrayIndexOf, join: ArrayJoin, map: ArrayMap, pop: ArrayPop, push: ArrayPush, reduce: ArrayReduce, reverse: ArrayReverse, shift: ArrayShift, slice: ArraySlice, some: ArraySome, sort: ArraySort, splice: ArraySplice, unshift: ArrayUnshift, forEach, } = Array.prototype;
|
51
51
|
function isUndefined(obj) {
|
@@ -109,10 +109,13 @@ const KEY__SHADOW_STATIC = '$shadowStaticNode$';
|
|
109
109
|
const KEY__SHADOW_STATIC_PRIVATE = '$shadowStaticNodeKey$';
|
110
110
|
const KEY__SHADOW_TOKEN = '$shadowToken$';
|
111
111
|
const KEY__SHADOW_TOKEN_PRIVATE = '$$ShadowTokenKey$$';
|
112
|
+
// TODO [#3733]: remove support for legacy scope tokens
|
113
|
+
const KEY__LEGACY_SHADOW_TOKEN = '$legacyShadowToken$';
|
114
|
+
const KEY__LEGACY_SHADOW_TOKEN_PRIVATE = '$$LegacyShadowTokenKey$$';
|
112
115
|
const KEY__SYNTHETIC_MODE = '$$lwc-synthetic-mode';
|
113
116
|
const KEY__NATIVE_GET_ELEMENT_BY_ID = '$nativeGetElementById$';
|
114
117
|
const KEY__NATIVE_QUERY_SELECTOR_ALL = '$nativeQuerySelectorAll$';
|
115
|
-
/** version: 3.
|
118
|
+
/** version: 3.4.0 */
|
116
119
|
|
117
120
|
/**
|
118
121
|
* Copyright (C) 2023 salesforce.com, inc.
|
@@ -121,7 +124,7 @@ const KEY__NATIVE_QUERY_SELECTOR_ALL = '$nativeQuerySelectorAll$';
|
|
121
124
|
if (!_globalThis.lwcRuntimeFlags) {
|
122
125
|
Object.defineProperty(_globalThis, 'lwcRuntimeFlags', { value: create(null) });
|
123
126
|
}
|
124
|
-
/** version: 3.
|
127
|
+
/** version: 3.4.0 */
|
125
128
|
|
126
129
|
/*
|
127
130
|
* Copyright (c) 2018, salesforce.com, inc.
|
@@ -2607,13 +2610,15 @@ function isQualifiedObserver(observer, target) {
|
|
2607
2610
|
* @param {MutationObserver} observer
|
2608
2611
|
*/
|
2609
2612
|
function filterMutationRecords(mutations, observer) {
|
2610
|
-
|
2611
|
-
|
2613
|
+
const result = [];
|
2614
|
+
for (const record of mutations) {
|
2615
|
+
const { target, type } = record;
|
2612
2616
|
// If target is an lwc host,
|
2613
2617
|
// Determine if the mutations affected the host or the shadowRoot
|
2614
2618
|
// Mutations affecting host: changes to slot content
|
2615
2619
|
// Mutations affecting shadowRoot: changes to template content
|
2616
2620
|
if (type === 'childList' && !isUndefined(getNodeKey(target))) {
|
2621
|
+
const { addedNodes } = record;
|
2617
2622
|
// In case of added nodes, we can climb up the tree and determine eligibility
|
2618
2623
|
if (addedNodes.length > 0) {
|
2619
2624
|
// Optimization: Peek in and test one node to decide if the MutationRecord qualifies
|
@@ -2626,15 +2631,16 @@ function filterMutationRecords(mutations, observer) {
|
|
2626
2631
|
if (nodeObservers &&
|
2627
2632
|
(nodeObservers[0] === observer ||
|
2628
2633
|
ArrayIndexOf.call(nodeObservers, observer) !== -1)) {
|
2629
|
-
ArrayPush.call(
|
2634
|
+
ArrayPush.call(result, record);
|
2630
2635
|
}
|
2631
2636
|
else {
|
2632
2637
|
// else, must be observing the shadowRoot
|
2633
|
-
ArrayPush.call(
|
2638
|
+
ArrayPush.call(result, retargetMutationRecord(record));
|
2634
2639
|
}
|
2635
2640
|
}
|
2636
2641
|
}
|
2637
2642
|
else {
|
2643
|
+
const { removedNodes } = record;
|
2638
2644
|
// In the case of removed nodes, climbing the tree is not an option as the nodes are disconnected
|
2639
2645
|
// We can only check if either the host or shadow root was observed and qualify the record
|
2640
2646
|
const shadowRoot = target.shadowRoot;
|
@@ -2642,14 +2648,14 @@ function filterMutationRecords(mutations, observer) {
|
|
2642
2648
|
if (getNodeNearestOwnerKey(target) === getNodeNearestOwnerKey(sampleNode) && // trickery: sampleNode is slot content
|
2643
2649
|
isQualifiedObserver(observer, target) // use target as a close enough reference to climb up
|
2644
2650
|
) {
|
2645
|
-
ArrayPush.call(
|
2651
|
+
ArrayPush.call(result, record);
|
2646
2652
|
}
|
2647
2653
|
else if (shadowRoot) {
|
2648
2654
|
const shadowRootObservers = getNodeObservers(shadowRoot);
|
2649
2655
|
if (shadowRootObservers &&
|
2650
2656
|
(shadowRootObservers[0] === observer ||
|
2651
2657
|
ArrayIndexOf.call(shadowRootObservers, observer) !== -1)) {
|
2652
|
-
ArrayPush.call(
|
2658
|
+
ArrayPush.call(result, retargetMutationRecord(record));
|
2653
2659
|
}
|
2654
2660
|
}
|
2655
2661
|
}
|
@@ -2658,11 +2664,11 @@ function filterMutationRecords(mutations, observer) {
|
|
2658
2664
|
// Mutation happened under a root node(shadow root or document) and the decision is straighforward
|
2659
2665
|
// Ascend the tree starting from target and check if observer is qualified
|
2660
2666
|
if (isQualifiedObserver(observer, target)) {
|
2661
|
-
ArrayPush.call(
|
2667
|
+
ArrayPush.call(result, record);
|
2662
2668
|
}
|
2663
2669
|
}
|
2664
|
-
|
2665
|
-
|
2670
|
+
}
|
2671
|
+
return result;
|
2666
2672
|
}
|
2667
2673
|
function getWrappedCallback(callback) {
|
2668
2674
|
let wrappedCallback = callback[wrapperLookupField];
|
@@ -4099,6 +4105,40 @@ defineProperty(Element.prototype, KEY__SHADOW_STATIC, {
|
|
4099
4105
|
configurable: true,
|
4100
4106
|
});
|
4101
4107
|
|
4108
|
+
/*
|
4109
|
+
* Copyright (c) 2023, salesforce.com, inc.
|
4110
|
+
* All rights reserved.
|
4111
|
+
* SPDX-License-Identifier: MIT
|
4112
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
4113
|
+
*/
|
4114
|
+
// TODO [#3733]: remove this entire file when we can remove legacy scope tokens
|
4115
|
+
function getLegacyShadowToken(node) {
|
4116
|
+
return node[KEY__LEGACY_SHADOW_TOKEN];
|
4117
|
+
}
|
4118
|
+
function setLegacyShadowToken(node, shadowToken) {
|
4119
|
+
node[KEY__LEGACY_SHADOW_TOKEN] = shadowToken;
|
4120
|
+
}
|
4121
|
+
/**
|
4122
|
+
* Patching Element.prototype.$legacyShadowToken$ to mark elements a portal:
|
4123
|
+
* Same as $shadowToken$ but for legacy CSS scope tokens.
|
4124
|
+
**/
|
4125
|
+
defineProperty(Element.prototype, KEY__LEGACY_SHADOW_TOKEN, {
|
4126
|
+
set(shadowToken) {
|
4127
|
+
const oldShadowToken = this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE];
|
4128
|
+
if (!isUndefined(oldShadowToken) && oldShadowToken !== shadowToken) {
|
4129
|
+
removeAttribute.call(this, oldShadowToken);
|
4130
|
+
}
|
4131
|
+
if (!isUndefined(shadowToken)) {
|
4132
|
+
setAttribute.call(this, shadowToken, '');
|
4133
|
+
}
|
4134
|
+
this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE] = shadowToken;
|
4135
|
+
},
|
4136
|
+
get() {
|
4137
|
+
return this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE];
|
4138
|
+
},
|
4139
|
+
configurable: true,
|
4140
|
+
});
|
4141
|
+
|
4102
4142
|
/*
|
4103
4143
|
* Copyright (c) 2018, salesforce.com, inc.
|
4104
4144
|
* All rights reserved.
|
@@ -4116,7 +4156,8 @@ let portalObserver;
|
|
4116
4156
|
const portalObserverConfig = {
|
4117
4157
|
childList: true,
|
4118
4158
|
};
|
4119
|
-
|
4159
|
+
// TODO [#3733]: remove support for legacy scope tokens
|
4160
|
+
function adoptChildNode(node, fn, shadowToken, legacyShadowToken) {
|
4120
4161
|
const previousNodeShadowResolver = getShadowRootResolver(node);
|
4121
4162
|
if (previousNodeShadowResolver === fn) {
|
4122
4163
|
return; // nothing to do here, it is already correctly patched
|
@@ -4124,6 +4165,9 @@ function adoptChildNode(node, fn, shadowToken) {
|
|
4124
4165
|
setShadowRootResolver(node, fn);
|
4125
4166
|
if (node instanceof Element) {
|
4126
4167
|
setShadowToken(node, shadowToken);
|
4168
|
+
if (lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS) {
|
4169
|
+
setLegacyShadowToken(node, legacyShadowToken);
|
4170
|
+
}
|
4127
4171
|
if (isSyntheticShadowHost(node)) {
|
4128
4172
|
// Root LWC elements can't get content slotted into them, therefore we don't observe their children.
|
4129
4173
|
return;
|
@@ -4135,7 +4179,7 @@ function adoptChildNode(node, fn, shadowToken) {
|
|
4135
4179
|
// recursively patching all children as well
|
4136
4180
|
const childNodes = childNodesGetter.call(node);
|
4137
4181
|
for (let i = 0, len = childNodes.length; i < len; i += 1) {
|
4138
|
-
adoptChildNode(childNodes[i], fn, shadowToken);
|
4182
|
+
adoptChildNode(childNodes[i], fn, shadowToken, legacyShadowToken);
|
4139
4183
|
}
|
4140
4184
|
}
|
4141
4185
|
}
|
@@ -4156,17 +4200,20 @@ function initPortalObserver() {
|
|
4156
4200
|
// the target of the mutation should always have a ShadowRootResolver attached to it
|
4157
4201
|
const fn = getShadowRootResolver(elm);
|
4158
4202
|
const shadowToken = getShadowToken(elm);
|
4203
|
+
const legacyShadowToken = lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS
|
4204
|
+
? getLegacyShadowToken(elm)
|
4205
|
+
: undefined;
|
4159
4206
|
// Process removals first to handle the case where an element is removed and reinserted
|
4160
4207
|
for (let i = 0, len = removedNodes.length; i < len; i += 1) {
|
4161
4208
|
const node = removedNodes[i];
|
4162
4209
|
if (!(compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY)) {
|
4163
|
-
adoptChildNode(node, DocumentResolverFn, undefined);
|
4210
|
+
adoptChildNode(node, DocumentResolverFn, undefined, undefined);
|
4164
4211
|
}
|
4165
4212
|
}
|
4166
4213
|
for (let i = 0, len = addedNodes.length; i < len; i += 1) {
|
4167
4214
|
const node = addedNodes[i];
|
4168
4215
|
if (compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY) {
|
4169
|
-
adoptChildNode(node, fn, shadowToken);
|
4216
|
+
adoptChildNode(node, fn, shadowToken, legacyShadowToken);
|
4170
4217
|
}
|
4171
4218
|
}
|
4172
4219
|
});
|
@@ -4213,5 +4260,5 @@ defineProperty(Element.prototype, '$domManual$', {
|
|
4213
4260
|
},
|
4214
4261
|
configurable: true,
|
4215
4262
|
});
|
4216
|
-
/** version: 3.
|
4263
|
+
/** version: 3.4.0 */
|
4217
4264
|
//# sourceMappingURL=index.cjs.js.map
|