@lwc/synthetic-shadow 3.0.1 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.ts CHANGED
@@ -14,10 +14,8 @@ import './polyfills/click-event-composed/main';
14
14
  import './polyfills/event-composed/main';
15
15
  import './polyfills/custom-event-composed/main';
16
16
  import './polyfills/clipboard-event-composed/main';
17
- import './polyfills/iframe-content-window/main';
18
17
  import './polyfills/mutation-observer/main';
19
18
  import './polyfills/event-target/main';
20
- import './polyfills/window-event-target/main';
21
19
  import './polyfills/event/main';
22
20
  import './polyfills/focus-event/main';
23
21
  import './polyfills/mouse-event/main';
package/dist/index.js CHANGED
@@ -109,20 +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
-
116
- /*
117
- * Copyright (c) 2018, salesforce.com, inc.
118
- * All rights reserved.
119
- * SPDX-License-Identifier: MIT
120
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
121
- */
122
- // We use this to detect symbol support in order to avoid the expensive symbol polyfill. Note that
123
- // we can't use typeof since it will fail when transpiling.
124
- const hasNativeSymbolSupport = /*@__PURE__*/ (() => Symbol('x').toString() === 'Symbol(x)')();
125
- /** version: 3.0.1 */
118
+ /** version: 3.0.3 */
126
119
 
127
120
  /**
128
121
  * Copyright (C) 2023 salesforce.com, inc.
@@ -131,7 +124,7 @@ const hasNativeSymbolSupport = /*@__PURE__*/ (() => Symbol('x').toString() === '
131
124
  if (!_globalThis.lwcRuntimeFlags) {
132
125
  Object.defineProperty(_globalThis, 'lwcRuntimeFlags', { value: create(null) });
133
126
  }
134
- /** version: 3.0.1 */
127
+ /** version: 3.0.3 */
135
128
 
136
129
  /*
137
130
  * Copyright (c) 2018, salesforce.com, inc.
@@ -151,13 +144,9 @@ const lastChildGetter = getOwnPropertyDescriptor(nodePrototype, 'lastChild').get
151
144
  const textContentGetter = getOwnPropertyDescriptor(nodePrototype, 'textContent').get;
152
145
  const parentNodeGetter = getOwnPropertyDescriptor(nodePrototype, 'parentNode').get;
153
146
  const ownerDocumentGetter = getOwnPropertyDescriptor(nodePrototype, 'ownerDocument').get;
154
- const parentElementGetter = hasOwnProperty.call(nodePrototype, 'parentElement')
155
- ? getOwnPropertyDescriptor(nodePrototype, 'parentElement').get
156
- : getOwnPropertyDescriptor(HTMLElement.prototype, 'parentElement').get; // IE11
147
+ const parentElementGetter = getOwnPropertyDescriptor(nodePrototype, 'parentElement').get;
157
148
  const textContextSetter = getOwnPropertyDescriptor(nodePrototype, 'textContent').set;
158
- const childNodesGetter = hasOwnProperty.call(nodePrototype, 'childNodes')
159
- ? getOwnPropertyDescriptor(nodePrototype, 'childNodes').get
160
- : getOwnPropertyDescriptor(HTMLElement.prototype, 'childNodes').get; // IE11
149
+ const childNodesGetter = getOwnPropertyDescriptor(nodePrototype, 'childNodes').get;
161
150
  const isConnected = hasOwnProperty.call(nodePrototype, 'isConnected')
162
151
  ? getOwnPropertyDescriptor(nodePrototype, 'isConnected').get
163
152
  : function () {
@@ -200,26 +189,18 @@ const outerTextGetter = outerTextDescriptor
200
189
  const outerTextSetter = outerTextDescriptor
201
190
  ? outerTextDescriptor.set
202
191
  : null;
203
- const innerHTMLDescriptor = hasOwnProperty.call(Element.prototype, 'innerHTML')
204
- ? getOwnPropertyDescriptor(Element.prototype, 'innerHTML')
205
- : getOwnPropertyDescriptor(HTMLElement.prototype, 'innerHTML'); // IE11
192
+ const innerHTMLDescriptor = getOwnPropertyDescriptor(Element.prototype, 'innerHTML');
206
193
  const innerHTMLGetter = innerHTMLDescriptor.get;
207
194
  const innerHTMLSetter = innerHTMLDescriptor.set;
208
- const outerHTMLDescriptor = hasOwnProperty.call(Element.prototype, 'outerHTML')
209
- ? getOwnPropertyDescriptor(Element.prototype, 'outerHTML')
210
- : getOwnPropertyDescriptor(HTMLElement.prototype, 'outerHTML'); // IE11
195
+ const outerHTMLDescriptor = getOwnPropertyDescriptor(Element.prototype, 'outerHTML');
211
196
  const outerHTMLGetter = outerHTMLDescriptor.get;
212
197
  const outerHTMLSetter = outerHTMLDescriptor.set;
213
198
  const tagNameGetter = getOwnPropertyDescriptor(Element.prototype, 'tagName').get;
214
199
  const tabIndexDescriptor = getOwnPropertyDescriptor(HTMLElement.prototype, 'tabIndex');
215
200
  const tabIndexGetter = tabIndexDescriptor.get;
216
201
  const tabIndexSetter = tabIndexDescriptor.set;
217
- const matches = hasOwnProperty.call(Element.prototype, 'matches')
218
- ? Element.prototype.matches
219
- : Element.prototype.msMatchesSelector; // IE11
220
- const childrenGetter = hasOwnProperty.call(Element.prototype, 'children')
221
- ? getOwnPropertyDescriptor(Element.prototype, 'children').get
222
- : getOwnPropertyDescriptor(HTMLElement.prototype, 'children').get; // IE11
202
+ const matches = Element.prototype.matches;
203
+ const childrenGetter = getOwnPropertyDescriptor(Element.prototype, 'children').get;
223
204
  // for IE11, access from HTMLElement
224
205
  // for all other browsers access the method from the parent Element interface
225
206
  const { getElementsByClassName: getElementsByClassName$1 } = HTMLElement.prototype;
@@ -273,16 +254,12 @@ const composedPath = hasOwnProperty.call(Event.prototype, 'composedPath')
273
254
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
274
255
  */
275
256
  const DocumentPrototypeActiveElement = getOwnPropertyDescriptor(Document.prototype, 'activeElement').get;
276
- const elementFromPoint = hasOwnProperty.call(Document.prototype, 'elementFromPoint')
277
- ? Document.prototype.elementFromPoint
278
- : Document.prototype.msElementFromPoint; // IE11
279
- const elementsFromPoint = hasOwnProperty.call(Document.prototype, 'elementsFromPoint')
280
- ? Document.prototype.elementsFromPoint
281
- : Document.prototype.msElementsFromPoint; // IE11
257
+ const elementFromPoint = Document.prototype.elementFromPoint;
258
+ const elementsFromPoint = Document.prototype.elementsFromPoint;
282
259
  // defaultView can be null when a document has no browsing context. For example, the owner document
283
260
  // of a node in a template doesn't have a default view: https://jsfiddle.net/hv9z0q5a/
284
261
  const defaultViewGetter = getOwnPropertyDescriptor(Document.prototype, 'defaultView').get;
285
- const { createComment, querySelectorAll, getElementById, getElementsByClassName, getElementsByTagName, getElementsByTagNameNS, } = Document.prototype;
262
+ const { querySelectorAll, getElementById, getElementsByClassName, getElementsByTagName, getElementsByTagNameNS, } = Document.prototype;
286
263
  // In Firefox v57 and lower, getElementsByName is defined on HTMLDocument.prototype
287
264
  // In all other browsers have the method on Document.prototype
288
265
  const { getElementsByName } = HTMLDocument.prototype;
@@ -328,7 +305,7 @@ const isInstanceOfNativeShadowRoot = isNull(NativeShadowRoot)
328
305
  * SPDX-License-Identifier: MIT
329
306
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
330
307
  */
331
- function detect$4 () {
308
+ function detect$2 () {
332
309
  return typeof HTMLSlotElement === 'undefined';
333
310
  }
334
311
 
@@ -343,7 +320,7 @@ const CHAR_S = 115;
343
320
  const CHAR_L = 108;
344
321
  const CHAR_O = 111;
345
322
  const CHAR_T = 116;
346
- function apply$4() {
323
+ function apply$2() {
347
324
  // IE11 does not have this element definition
348
325
  // we don't care much about the construction phase, just the prototype
349
326
  class HTMLSlotElement {
@@ -378,8 +355,8 @@ function apply$4() {
378
355
  * SPDX-License-Identifier: MIT
379
356
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
380
357
  */
381
- if (detect$4()) {
382
- apply$4();
358
+ if (detect$2()) {
359
+ apply$2();
383
360
  }
384
361
 
385
362
  /*
@@ -1280,15 +1257,6 @@ function childNodesGetterPatched() {
1280
1257
  if (isSyntheticShadowHost(this)) {
1281
1258
  const owner = getNodeOwner(this);
1282
1259
  const childNodes = isNull(owner) ? [] : getAllMatches(owner, getFilteredChildNodes(this));
1283
- if (process.env.NODE_ENV !== 'production' &&
1284
- isFalse(hasNativeSymbolSupport) &&
1285
- isExternalChildNodeAccessorFlagOn()) {
1286
- // inserting a comment node as the first childNode to trick the IE11
1287
- // DevTool to show the content of the shadowRoot, this should only happen
1288
- // in dev-mode and in IE11 (which we detect by looking at the symbol).
1289
- // Plus it should only be in place if we know it is an external invoker.
1290
- ArrayUnshift.call(childNodes, getIE11FakeShadowRootPlaceholder(this));
1291
- }
1292
1260
  return createStaticNodeList(childNodes);
1293
1261
  }
1294
1262
  // nothing to do here since this does not have a synthetic shadow attached to it
@@ -1503,40 +1471,9 @@ defineProperties(_Node.prototype, {
1503
1471
  },
1504
1472
  },
1505
1473
  });
1506
- let internalChildNodeAccessorFlag = false;
1507
- /**
1508
- * These 2 methods are providing a machinery to understand who is accessing the
1509
- * .childNodes member property of a node. If it is used from inside the synthetic shadow
1510
- * or from an external invoker. This helps to produce the right output in one very peculiar
1511
- * case, the IE11 debugging comment for shadowRoot representation on the devtool.
1512
- */
1513
- function isExternalChildNodeAccessorFlagOn() {
1514
- return !internalChildNodeAccessorFlag;
1515
- }
1516
- const getInternalChildNodes = process.env.NODE_ENV !== 'production' && isFalse(hasNativeSymbolSupport)
1517
- ? function (node) {
1518
- internalChildNodeAccessorFlag = true;
1519
- let childNodes;
1520
- let error = null;
1521
- try {
1522
- childNodes = node.childNodes;
1523
- }
1524
- catch (e) {
1525
- // childNodes accessor should never throw, but just in case!
1526
- error = e;
1527
- }
1528
- finally {
1529
- internalChildNodeAccessorFlag = false;
1530
- if (!isNull(error)) {
1531
- // re-throwing after restoring the state machinery for setInternalChildNodeAccessorFlag
1532
- throw error; // eslint-disable-line no-unsafe-finally
1533
- }
1534
- }
1535
- return childNodes;
1536
- }
1537
- : function (node) {
1538
- return node.childNodes;
1539
- };
1474
+ const getInternalChildNodes = function (node) {
1475
+ return node.childNodes;
1476
+ };
1540
1477
  // IE11 extra patches for wrong prototypes
1541
1478
  if (hasOwnProperty.call(HTMLElement.prototype, 'contains')) {
1542
1479
  defineProperty(HTMLElement.prototype, 'contains', getOwnPropertyDescriptor(_Node.prototype, 'contains'));
@@ -2344,42 +2281,6 @@ defineProperty(SyntheticShadowRoot, Symbol.hasInstance, {
2344
2281
  getPrototypeOf(object) === SyntheticShadowRoot.prototype));
2345
2282
  },
2346
2283
  });
2347
- /**
2348
- * This method is only intended to be used in non-production mode in IE11
2349
- * and its role is to produce a 1-1 mapping between a shadowRoot instance
2350
- * and a comment node that is intended to use to trick the IE11 DevTools
2351
- * to show the content of the shadowRoot in the DOM Explorer.
2352
- */
2353
- function getIE11FakeShadowRootPlaceholder(host) {
2354
- const shadowRoot = getShadowRoot(host);
2355
- // @ts-ignore this $$placeholder$$ is not a security issue because you must
2356
- // have access to the shadowRoot in order to extract the fake node, which give
2357
- // you access to the same childNodes of the shadowRoot, so, who cares.
2358
- let c = shadowRoot.$$placeholder$$;
2359
- if (!isUndefined(c)) {
2360
- return c;
2361
- }
2362
- const doc = getOwnerDocument(host);
2363
- // @ts-ignore $$placeholder$$ is fine, read the node above.
2364
- c = shadowRoot.$$placeholder$$ = createComment.call(doc, '');
2365
- defineProperties(c, {
2366
- childNodes: {
2367
- get() {
2368
- return shadowRoot.childNodes;
2369
- },
2370
- enumerable: true,
2371
- configurable: true,
2372
- },
2373
- tagName: {
2374
- get() {
2375
- return `#shadow-root (${shadowRoot.mode})`;
2376
- },
2377
- enumerable: true,
2378
- configurable: true,
2379
- },
2380
- });
2381
- return c;
2382
- }
2383
2284
 
2384
2285
  /*
2385
2286
  * Copyright (c) 2018, salesforce.com, inc.
@@ -2658,7 +2559,7 @@ Object.defineProperty(window, 'ShadowRoot', {
2658
2559
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2659
2560
  */
2660
2561
  const composedDescriptor = Object.getOwnPropertyDescriptor(Event.prototype, 'composed');
2661
- function detect$3() {
2562
+ function detect$1() {
2662
2563
  if (!composedDescriptor) {
2663
2564
  // No need to apply this polyfill if this client completely lacks
2664
2565
  // support for the composed property.
@@ -2690,7 +2591,7 @@ function handleClick(event) {
2690
2591
  },
2691
2592
  });
2692
2593
  }
2693
- function apply$3() {
2594
+ function apply$1() {
2694
2595
  HTMLElement.prototype.click = function () {
2695
2596
  addEventListener.call(this, 'click', handleClick);
2696
2597
  try {
@@ -2708,8 +2609,8 @@ function apply$3() {
2708
2609
  * SPDX-License-Identifier: MIT
2709
2610
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2710
2611
  */
2711
- if (detect$3()) {
2712
- apply$3();
2612
+ if (detect$1()) {
2613
+ apply$1();
2713
2614
  }
2714
2615
 
2715
2616
  /*
@@ -2718,7 +2619,7 @@ if (detect$3()) {
2718
2619
  * SPDX-License-Identifier: MIT
2719
2620
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2720
2621
  */
2721
- function detect$2() {
2622
+ function detect() {
2722
2623
  return new Event('test', { composed: true }).composed !== true;
2723
2624
  }
2724
2625
 
@@ -2728,7 +2629,7 @@ function detect$2() {
2728
2629
  * SPDX-License-Identifier: MIT
2729
2630
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2730
2631
  */
2731
- function apply$2() {
2632
+ function apply() {
2732
2633
  // https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937
2733
2634
  const composedEvents = assign(create(null), {
2734
2635
  beforeinput: 1,
@@ -2822,8 +2723,8 @@ function apply$2() {
2822
2723
  * SPDX-License-Identifier: MIT
2823
2724
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2824
2725
  */
2825
- if (detect$2()) {
2826
- apply$2();
2726
+ if (detect()) {
2727
+ apply();
2827
2728
  }
2828
2729
 
2829
2730
  /*
@@ -2875,121 +2776,6 @@ if (typeof ClipboardEvent !== 'undefined') {
2875
2776
  });
2876
2777
  }
2877
2778
 
2878
- /*
2879
- * Copyright (c) 2018, salesforce.com, inc.
2880
- * All rights reserved.
2881
- * SPDX-License-Identifier: MIT
2882
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2883
- */
2884
- function detect$1() {
2885
- // Note: when using this in mobile apps, we might have a DOM that does not support iframes.
2886
- const hasIframe = typeof HTMLIFrameElement !== 'undefined';
2887
- // This polyfill should only apply in compat mode; see https://github.com/salesforce/lwc/issues/1513
2888
- const isCompat = typeof Proxy !== 'undefined' && isTrue(Proxy.isCompat);
2889
- return hasIframe && isCompat;
2890
- }
2891
-
2892
- /*
2893
- * Copyright (c) 2018, salesforce.com, inc.
2894
- * All rights reserved.
2895
- * SPDX-License-Identifier: MIT
2896
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2897
- */
2898
- function apply$1() {
2899
- // the iframe property descriptor for `contentWindow` should always be available, otherwise this method should never be called
2900
- const desc = getOwnPropertyDescriptor(HTMLIFrameElement.prototype, 'contentWindow');
2901
- const { get: originalGetter } = desc;
2902
- desc.get = function () {
2903
- const original = originalGetter.call(this);
2904
- // If the original iframe element is not a keyed node, then do not wrap it
2905
- if (isNull(original) || isUndefined(getNodeOwnerKey(this))) {
2906
- return original;
2907
- }
2908
- // only if the element is an iframe inside a shadowRoot, we care about this problem
2909
- // because in that case, the code that is accessing the iframe, is very likely code
2910
- // compiled with proxy-compat transformation. It is true that other code without those
2911
- // transformations might also access an iframe from within a shadowRoot, but in that,
2912
- // case, which is more rare, we still return the wrapper, and it should work the same,
2913
- // this part is just an optimization.
2914
- return wrapIframeWindow(original);
2915
- };
2916
- defineProperty(HTMLIFrameElement.prototype, 'contentWindow', desc);
2917
- }
2918
- function wrapIframeWindow(win) {
2919
- return {
2920
- addEventListener() {
2921
- // Typescript does not like it when you treat the `arguments` object as an array
2922
- // @ts-ignore type-mismatch
2923
- return win.addEventListener.apply(win, arguments);
2924
- },
2925
- blur() {
2926
- // Typescript does not like it when you treat the `arguments` object as an array
2927
- // @ts-ignore type-mismatch
2928
- return win.blur.apply(win, arguments);
2929
- },
2930
- close() {
2931
- // Typescript does not like it when you treat the `arguments` object as an array
2932
- // @ts-ignore type-mismatch
2933
- return win.close.apply(win, arguments);
2934
- },
2935
- focus() {
2936
- // Typescript does not like it when you treat the `arguments` object as an array
2937
- // @ts-ignore type-mismatch
2938
- return win.focus.apply(win, arguments);
2939
- },
2940
- postMessage() {
2941
- // Typescript does not like it when you treat the `arguments` object as an array
2942
- // @ts-ignore type-mismatch
2943
- return win.postMessage.apply(win, arguments);
2944
- },
2945
- removeEventListener() {
2946
- // Typescript does not like it when you treat the `arguments` object as an array
2947
- // @ts-ignore type-mismatch
2948
- return win.removeEventListener.apply(win, arguments);
2949
- },
2950
- get closed() {
2951
- return win.closed;
2952
- },
2953
- get frames() {
2954
- return win.frames;
2955
- },
2956
- get length() {
2957
- return win.length;
2958
- },
2959
- get location() {
2960
- return win.location;
2961
- },
2962
- set location(value) {
2963
- win.location = value;
2964
- },
2965
- get opener() {
2966
- return win.opener;
2967
- },
2968
- get parent() {
2969
- return win.parent;
2970
- },
2971
- get self() {
2972
- return win.self;
2973
- },
2974
- get top() {
2975
- return win.top;
2976
- },
2977
- get window() {
2978
- return win.window;
2979
- },
2980
- }; // this is limited
2981
- }
2982
-
2983
- /*
2984
- * Copyright (c) 2018, salesforce.com, inc.
2985
- * All rights reserved.
2986
- * SPDX-License-Identifier: MIT
2987
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2988
- */
2989
- if (detect$1()) {
2990
- apply$1();
2991
- }
2992
-
2993
2779
  /*
2994
2780
  * Copyright (c) 2018, salesforce.com, inc.
2995
2781
  * All rights reserved.
@@ -3231,7 +3017,7 @@ defineProperty(window, 'MutationObserver', {
3231
3017
  * SPDX-License-Identifier: MIT
3232
3018
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3233
3019
  */
3234
- function patchedAddEventListener$1(type, listener, optionsOrCapture) {
3020
+ function patchedAddEventListener(type, listener, optionsOrCapture) {
3235
3021
  if (isSyntheticShadowHost(this)) {
3236
3022
  // Typescript does not like it when you treat the `arguments` object as an array
3237
3023
  // @ts-ignore type-mismatch
@@ -3254,7 +3040,7 @@ function patchedAddEventListener$1(type, listener, optionsOrCapture) {
3254
3040
  // The third argument is optional, so passing in `undefined` for `optionsOrCapture` gives capture=false
3255
3041
  return addEventListener.call(this, type, wrappedListener, optionsOrCapture);
3256
3042
  }
3257
- function patchedRemoveEventListener$1(_type, _listener, _optionsOrCapture) {
3043
+ function patchedRemoveEventListener(_type, _listener, _optionsOrCapture) {
3258
3044
  if (isSyntheticShadowHost(this)) {
3259
3045
  // Typescript does not like it when you treat the `arguments` object as an array
3260
3046
  // @ts-ignore type-mismatch
@@ -3274,87 +3060,19 @@ function patchedRemoveEventListener$1(_type, _listener, _optionsOrCapture) {
3274
3060
  }
3275
3061
  defineProperties(eventTargetPrototype, {
3276
3062
  addEventListener: {
3277
- value: patchedAddEventListener$1,
3063
+ value: patchedAddEventListener,
3278
3064
  enumerable: true,
3279
3065
  writable: true,
3280
3066
  configurable: true,
3281
3067
  },
3282
3068
  removeEventListener: {
3283
- value: patchedRemoveEventListener$1,
3069
+ value: patchedRemoveEventListener,
3284
3070
  enumerable: true,
3285
3071
  writable: true,
3286
3072
  configurable: true,
3287
3073
  },
3288
3074
  });
3289
3075
 
3290
- /*
3291
- * Copyright (c) 2018, salesforce.com, inc.
3292
- * All rights reserved.
3293
- * SPDX-License-Identifier: MIT
3294
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3295
- */
3296
- function detect() {
3297
- return typeof EventTarget === 'undefined';
3298
- }
3299
-
3300
- /*
3301
- * Copyright (c) 2018, salesforce.com, inc.
3302
- * All rights reserved.
3303
- * SPDX-License-Identifier: MIT
3304
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3305
- */
3306
- function patchedAddEventListener(_type, _listener, _options) {
3307
- if (arguments.length > 1) {
3308
- const args = ArraySlice.call(arguments);
3309
- args[1] = getEventListenerWrapper(args[1]);
3310
- // Ignore types because we're passing through to native method
3311
- // @ts-ignore type-mismatch
3312
- return windowAddEventListener.apply(this, args);
3313
- }
3314
- // Typescript does not like it when you treat the `arguments` object as an array
3315
- // @ts-ignore type-mismatch
3316
- return windowAddEventListener.apply(this, arguments);
3317
- }
3318
- function patchedRemoveEventListener(_type, _listener, _options) {
3319
- if (arguments.length > 1) {
3320
- const args = ArraySlice.call(arguments);
3321
- args[1] = getEventListenerWrapper(args[1]);
3322
- // Ignore types because we're passing through to native method
3323
- // @ts-ignore type-mismatch
3324
- windowRemoveEventListener.apply(this, args);
3325
- }
3326
- // Account for listeners that were added before this polyfill was applied
3327
- // Typescript does not like it when you treat the `arguments` object as an array
3328
- // @ts-ignore type-mismatch
3329
- windowRemoveEventListener.apply(this, arguments);
3330
- }
3331
- function apply() {
3332
- defineProperties(Window.prototype, {
3333
- addEventListener: {
3334
- value: patchedAddEventListener,
3335
- enumerable: true,
3336
- writable: true,
3337
- configurable: true,
3338
- },
3339
- removeEventListener: {
3340
- value: patchedRemoveEventListener,
3341
- enumerable: true,
3342
- writable: true,
3343
- configurable: true,
3344
- },
3345
- });
3346
- }
3347
-
3348
- /*
3349
- * Copyright (c) 2018, salesforce.com, inc.
3350
- * All rights reserved.
3351
- * SPDX-License-Identifier: MIT
3352
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
3353
- */
3354
- if (detect()) {
3355
- apply();
3356
- }
3357
-
3358
3076
  /*
3359
3077
  * Copyright (c) 2018, salesforce.com, inc.
3360
3078
  * All rights reserved.
@@ -4636,6 +4354,40 @@ defineProperty(Element.prototype, KEY__SHADOW_STATIC, {
4636
4354
  configurable: true,
4637
4355
  });
4638
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
+
4639
4391
  /*
4640
4392
  * Copyright (c) 2018, salesforce.com, inc.
4641
4393
  * All rights reserved.
@@ -4653,7 +4405,8 @@ let portalObserver;
4653
4405
  const portalObserverConfig = {
4654
4406
  childList: true,
4655
4407
  };
4656
- function adoptChildNode(node, fn, shadowToken) {
4408
+ // TODO [#3733]: remove support for legacy scope tokens
4409
+ function adoptChildNode(node, fn, shadowToken, legacyShadowToken) {
4657
4410
  const previousNodeShadowResolver = getShadowRootResolver(node);
4658
4411
  if (previousNodeShadowResolver === fn) {
4659
4412
  return; // nothing to do here, it is already correctly patched
@@ -4661,6 +4414,9 @@ function adoptChildNode(node, fn, shadowToken) {
4661
4414
  setShadowRootResolver(node, fn);
4662
4415
  if (node instanceof Element) {
4663
4416
  setShadowToken(node, shadowToken);
4417
+ if (lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS) {
4418
+ setLegacyShadowToken(node, legacyShadowToken);
4419
+ }
4664
4420
  if (isSyntheticShadowHost(node)) {
4665
4421
  // Root LWC elements can't get content slotted into them, therefore we don't observe their children.
4666
4422
  return;
@@ -4672,7 +4428,7 @@ function adoptChildNode(node, fn, shadowToken) {
4672
4428
  // recursively patching all children as well
4673
4429
  const childNodes = childNodesGetter.call(node);
4674
4430
  for (let i = 0, len = childNodes.length; i < len; i += 1) {
4675
- adoptChildNode(childNodes[i], fn, shadowToken);
4431
+ adoptChildNode(childNodes[i], fn, shadowToken, legacyShadowToken);
4676
4432
  }
4677
4433
  }
4678
4434
  }
@@ -4693,17 +4449,20 @@ function initPortalObserver() {
4693
4449
  // the target of the mutation should always have a ShadowRootResolver attached to it
4694
4450
  const fn = getShadowRootResolver(elm);
4695
4451
  const shadowToken = getShadowToken(elm);
4452
+ const legacyShadowToken = lwcRuntimeFlags.ENABLE_LEGACY_SCOPE_TOKENS
4453
+ ? getLegacyShadowToken(elm)
4454
+ : undefined;
4696
4455
  // Process removals first to handle the case where an element is removed and reinserted
4697
4456
  for (let i = 0, len = removedNodes.length; i < len; i += 1) {
4698
4457
  const node = removedNodes[i];
4699
4458
  if (!(compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY)) {
4700
- adoptChildNode(node, DocumentResolverFn, undefined);
4459
+ adoptChildNode(node, DocumentResolverFn, undefined, undefined);
4701
4460
  }
4702
4461
  }
4703
4462
  for (let i = 0, len = addedNodes.length; i < len; i += 1) {
4704
4463
  const node = addedNodes[i];
4705
4464
  if (compareDocumentPosition.call(elm, node) & _Node.DOCUMENT_POSITION_CONTAINED_BY) {
4706
- adoptChildNode(node, fn, shadowToken);
4465
+ adoptChildNode(node, fn, shadowToken, legacyShadowToken);
4707
4466
  }
4708
4467
  }
4709
4468
  });
@@ -4750,5 +4509,5 @@ defineProperty(Element.prototype, '$domManual$', {
4750
4509
  },
4751
4510
  configurable: true,
4752
4511
  });
4753
- /** version: 3.0.1 */
4512
+ /** version: 3.0.3 */
4754
4513
  //# sourceMappingURL=index.js.map