@lwc/synthetic-shadow 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -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.0.2 */
118
+ /** version: 3.0.3 */
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.0.2 */
127
+ /** version: 3.0.3 */
125
128
 
126
129
  /*
127
130
  * Copyright (c) 2018, salesforce.com, inc.
@@ -4351,6 +4354,40 @@ defineProperty(Element.prototype, KEY__SHADOW_STATIC, {
4351
4354
  configurable: true,
4352
4355
  });
4353
4356
 
4357
+ /*
4358
+ * Copyright (c) 2023, salesforce.com, inc.
4359
+ * All rights reserved.
4360
+ * SPDX-License-Identifier: MIT
4361
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
4362
+ */
4363
+ // TODO [#3733]: remove this entire file when we can remove legacy scope tokens
4364
+ function getLegacyShadowToken(node) {
4365
+ return node[KEY__LEGACY_SHADOW_TOKEN];
4366
+ }
4367
+ function setLegacyShadowToken(node, shadowToken) {
4368
+ node[KEY__LEGACY_SHADOW_TOKEN] = shadowToken;
4369
+ }
4370
+ /**
4371
+ * Patching Element.prototype.$legacyShadowToken$ to mark elements a portal:
4372
+ * Same as $shadowToken$ but for legacy CSS scope tokens.
4373
+ **/
4374
+ defineProperty(Element.prototype, KEY__LEGACY_SHADOW_TOKEN, {
4375
+ set(shadowToken) {
4376
+ const oldShadowToken = this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE];
4377
+ if (!isUndefined(oldShadowToken) && oldShadowToken !== shadowToken) {
4378
+ removeAttribute.call(this, oldShadowToken);
4379
+ }
4380
+ if (!isUndefined(shadowToken)) {
4381
+ setAttribute.call(this, shadowToken, '');
4382
+ }
4383
+ this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE] = shadowToken;
4384
+ },
4385
+ get() {
4386
+ return this[KEY__LEGACY_SHADOW_TOKEN_PRIVATE];
4387
+ },
4388
+ configurable: true,
4389
+ });
4390
+
4354
4391
  /*
4355
4392
  * Copyright (c) 2018, salesforce.com, inc.
4356
4393
  * All rights reserved.
@@ -4368,7 +4405,8 @@ let portalObserver;
4368
4405
  const portalObserverConfig = {
4369
4406
  childList: true,
4370
4407
  };
4371
- function adoptChildNode(node, fn, shadowToken) {
4408
+ // TODO [#3733]: remove support for legacy scope tokens
4409
+ function adoptChildNode(node, fn, shadowToken, legacyShadowToken) {
4372
4410
  const previousNodeShadowResolver = getShadowRootResolver(node);
4373
4411
  if (previousNodeShadowResolver === fn) {
4374
4412
  return; // nothing to do here, it is already correctly patched
@@ -4376,6 +4414,9 @@ function adoptChildNode(node, fn, shadowToken) {
4376
4414
  setShadowRootResolver(node, fn);
4377
4415
  if (node instanceof Element) {
4378
4416
  setShadowToken(node, shadowToken);
4417
+ if (lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS) {
4418
+ setLegacyShadowToken(node, legacyShadowToken);
4419
+ }
4379
4420
  if (isSyntheticShadowHost(node)) {
4380
4421
  // Root LWC elements can't get content slotted into them, therefore we don't observe their children.
4381
4422
  return;
@@ -4387,7 +4428,7 @@ function adoptChildNode(node, fn, shadowToken) {
4387
4428
  // recursively patching all children as well
4388
4429
  const childNodes = childNodesGetter.call(node);
4389
4430
  for (let i = 0, len = childNodes.length; i < len; i += 1) {
4390
- adoptChildNode(childNodes[i], fn, shadowToken);
4431
+ adoptChildNode(childNodes[i], fn, shadowToken, legacyShadowToken);
4391
4432
  }
4392
4433
  }
4393
4434
  }
@@ -4408,17 +4449,20 @@ function initPortalObserver() {
4408
4449
  // the target of the mutation should always have a ShadowRootResolver attached to it
4409
4450
  const fn = getShadowRootResolver(elm);
4410
4451
  const shadowToken = getShadowToken(elm);
4452
+ const legacyShadowToken = lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS
4453
+ ? getLegacyShadowToken(elm)
4454
+ : undefined;
4411
4455
  // Process removals first to handle the case where an element is removed and reinserted
4412
4456
  for (let i = 0, len = removedNodes.length; i < len; i += 1) {
4413
4457
  const node = removedNodes[i];
4414
4458
  if (!(compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY)) {
4415
- adoptChildNode(node, DocumentResolverFn, undefined);
4459
+ adoptChildNode(node, DocumentResolverFn, undefined, undefined);
4416
4460
  }
4417
4461
  }
4418
4462
  for (let i = 0, len = addedNodes.length; i < len; i += 1) {
4419
4463
  const node = addedNodes[i];
4420
4464
  if (compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY) {
4421
- adoptChildNode(node, fn, shadowToken);
4465
+ adoptChildNode(node, fn, shadowToken, legacyShadowToken);
4422
4466
  }
4423
4467
  }
4424
4468
  });
@@ -4465,5 +4509,5 @@ defineProperty(Element.prototype, '$domManual$', {
4465
4509
  },
4466
4510
  configurable: true,
4467
4511
  });
4468
- /** version: 3.0.2 */
4512
+ /** version: 3.0.3 */
4469
4513
  //# sourceMappingURL=index.js.map