@lwc/ssr-runtime 8.6.0 → 8.8.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.cjs.js CHANGED
@@ -15,9 +15,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
15
15
  function api(..._) {
16
16
  throw new Error('@api cannot be used in SSR context.');
17
17
  }
18
- function createContextProvider(..._) {
19
- throw new Error('createContextProvider cannot be used in SSR context.');
20
- }
21
18
  function createElement(..._) {
22
19
  throw new Error('createElement cannot be used in SSR context.');
23
20
  }
@@ -69,7 +66,7 @@ function swapTemplate(..._) {
69
66
  function track(..._) {
70
67
  throw new Error('@track cannot be used in SSR context.');
71
68
  }
72
- function unwrap(..._) {
69
+ function unwrap$1(..._) {
73
70
  throw new Error('unwrap cannot be used in SSR context.');
74
71
  }
75
72
  function wire(..._) {
@@ -270,17 +267,17 @@ freeze,
270
267
  /** Detached {@linkcode Object.fromEntries}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries MDN Reference}. */
271
268
  fromEntries,
272
269
  /** Detached {@linkcode Object.getOwnPropertyDescriptor}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor MDN Reference}. */
273
- getOwnPropertyDescriptor,
270
+ getOwnPropertyDescriptor: getOwnPropertyDescriptor$1,
274
271
  /** Detached {@linkcode Object.getOwnPropertyDescriptors}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors MDN Reference}. */
275
272
  getOwnPropertyDescriptors,
276
273
  /** Detached {@linkcode Object.getOwnPropertyNames}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames MDN Reference}. */
277
- getOwnPropertyNames,
274
+ getOwnPropertyNames: getOwnPropertyNames$1,
278
275
  /** Detached {@linkcode Object.getOwnPropertySymbols}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols MDN Reference}. */
279
- getOwnPropertySymbols,
276
+ getOwnPropertySymbols: getOwnPropertySymbols$1,
280
277
  /** Detached {@linkcode Object.getPrototypeOf}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf MDN Reference}. */
281
- getPrototypeOf,
278
+ getPrototypeOf: getPrototypeOf$1,
282
279
  /** Detached {@linkcode Object.hasOwnProperty}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty MDN Reference}. */
283
- hasOwnProperty,
280
+ hasOwnProperty: hasOwnProperty$1,
284
281
  /** Detached {@linkcode Object.isFrozen}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen MDN Reference}. */
285
282
  isFrozen,
286
283
  /** Detached {@linkcode Object.keys}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys MDN Reference}. */
@@ -291,16 +288,26 @@ seal,
291
288
  setPrototypeOf, } = Object;
292
289
  const {
293
290
  /** Detached {@linkcode Array.isArray}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray MDN Reference}. */
294
- isArray,
291
+ isArray: isArray$1,
295
292
  /** Detached {@linkcode Array.from}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from MDN Reference}. */
296
293
  from: ArrayFrom, } = Array;
297
294
  // For some reason, JSDoc don't get picked up for multiple renamed destructured constants (even
298
295
  // though it works fine for one, e.g. isArray), so comments for these are added to the export
299
296
  // statement, rather than this declaration.
300
- 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, // Weird anomaly!
297
+ const { concat: ArrayConcat$1, copyWithin: ArrayCopyWithin, every: ArrayEvery, fill: ArrayFill, filter: ArrayFilter, find: ArrayFind, findIndex: ArrayFindIndex, includes: ArrayIncludes, indexOf: ArrayIndexOf, join: ArrayJoin, map: ArrayMap, pop: ArrayPop, push: ArrayPush$1, reduce: ArrayReduce, reverse: ArrayReverse, shift: ArrayShift, slice: ArraySlice, some: ArraySome, sort: ArraySort, splice: ArraySplice, unshift: ArrayUnshift, forEach, // Weird anomaly!
301
298
  } = Array.prototype;
299
+ /** Detached {@linkcode String.fromCharCode}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode MDN Reference}. */
300
+ const { fromCharCode: StringFromCharCode } = String;
302
301
  // No JSDocs here - see comment for Array.prototype
303
302
  const { charAt: StringCharAt, charCodeAt: StringCharCodeAt, replace: StringReplace, split: StringSplit, slice: StringSlice, toLowerCase: StringToLowerCase, trim: StringTrim, } = String.prototype;
303
+ /**
304
+ * Determines whether the argument is `undefined`.
305
+ * @param obj Value to test
306
+ * @returns `true` if the value is `undefined`.
307
+ */
308
+ function isUndefined$1(obj) {
309
+ return obj === undefined;
310
+ }
304
311
  /**
305
312
  * Determines whether the argument is `null`.
306
313
  * @param obj Value to test
@@ -309,19 +316,27 @@ const { charAt: StringCharAt, charCodeAt: StringCharCodeAt, replace: StringRepla
309
316
  function isNull(obj) {
310
317
  return obj === null;
311
318
  }
312
- const OtS = {}.toString;
319
+ /**
320
+ * Determines whether the argument is a string.
321
+ * @param obj Value to test
322
+ * @returns `true` if the value is a string.
323
+ */
324
+ function isString(obj) {
325
+ return typeof obj === 'string';
326
+ }
327
+ const OtS$1 = {}.toString;
313
328
  /**
314
329
  * Converts the argument to a string, safely accounting for objects with "null" prototype.
315
330
  * Note that `toString(null)` returns `"[object Null]"` rather than `"null"`.
316
331
  * @param obj Value to convert to a string.
317
332
  * @returns String representation of the value.
318
333
  */
319
- function toString(obj) {
334
+ function toString$1(obj) {
320
335
  if (obj?.toString) {
321
336
  // Arrays might hold objects with "null" prototype So using
322
337
  // Array.prototype.toString directly will cause an error Iterate through
323
338
  // all the items and handle individually.
324
- if (isArray(obj)) {
339
+ if (isArray$1(obj)) {
325
340
  // This behavior is slightly different from Array#toString:
326
341
  // 1. Array#toString calls `this.join`, rather than Array#join
327
342
  // Ex: arr = []; arr.join = () => 1; arr.toString() === 1; toString(arr) === ''
@@ -332,13 +347,13 @@ function toString(obj) {
332
347
  // 4. Array#toString converts recursive references to arrays to ''
333
348
  // Ex: arr = [1]; arr.push(arr, 2); arr.toString() === '1,,2'; toString(arr) throws
334
349
  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString
335
- return ArrayJoin.call(ArrayMap.call(obj, toString), ',');
350
+ return ArrayJoin.call(ArrayMap.call(obj, toString$1), ',');
336
351
  }
337
352
  return obj.toString();
338
353
  }
339
354
  else if (typeof obj === 'object') {
340
355
  // This catches null and returns "[object Null]". Weird, but kept for backwards compatibility.
341
- return OtS.call(obj);
356
+ return OtS$1.call(obj);
342
357
  }
343
358
  else {
344
359
  return String(obj);
@@ -423,11 +438,114 @@ const { AriaAttrNameToPropNameMap, AriaPropNameToAttrNameMap } = /*@__PURE__*/ (
423
438
  // Synthetic creation of all AOM property descriptors for Custom Elements
424
439
  forEach.call(AriaPropertyNames, (propName) => {
425
440
  const attrName = StringToLowerCase.call(StringReplace.call(propName, /^aria/, () => 'aria-'));
441
+ // These type assertions are because the map types are a 1:1 mapping of ariaX to aria-x.
442
+ // TypeScript knows we have one of ariaX | ariaY and one of aria-x | aria-y, and tries to
443
+ // prevent us from doing ariaX: aria-y, but we that it's safe.
426
444
  AriaAttrNameToPropNameMap[attrName] = propName;
427
445
  AriaPropNameToAttrNameMap[propName] = attrName;
428
446
  });
429
447
  return { AriaAttrNameToPropNameMap, AriaPropNameToAttrNameMap };
430
448
  })();
449
+ /**
450
+ *
451
+ * @param attrName
452
+ */
453
+ function isAriaAttribute(attrName) {
454
+ return attrName in AriaAttrNameToPropNameMap;
455
+ }
456
+ // This list is based on https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes
457
+ const GLOBAL_ATTRIBUTE = /*@__PURE__*/ new Set([
458
+ 'accesskey',
459
+ 'autocapitalize',
460
+ 'autofocus',
461
+ 'class',
462
+ 'contenteditable',
463
+ 'contextmenu',
464
+ 'dir',
465
+ 'draggable',
466
+ 'enterkeyhint',
467
+ 'exportparts',
468
+ 'hidden',
469
+ 'id',
470
+ 'inputmode',
471
+ 'is',
472
+ 'itemid',
473
+ 'itemprop',
474
+ 'itemref',
475
+ 'itemscope',
476
+ 'itemtype',
477
+ 'lang',
478
+ 'nonce',
479
+ 'part',
480
+ 'slot',
481
+ 'spellcheck',
482
+ 'style',
483
+ 'tabindex',
484
+ 'title',
485
+ 'translate',
486
+ ]);
487
+ /**
488
+ *
489
+ * @param attrName
490
+ */
491
+ function isGlobalHtmlAttribute(attrName) {
492
+ return GLOBAL_ATTRIBUTE.has(attrName);
493
+ }
494
+ // These are HTML standard prop/attribute IDL mappings, but are not predictable based on camel/kebab-case conversion
495
+ const SPECIAL_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map([
496
+ ['accessKey', 'accesskey'],
497
+ ['readOnly', 'readonly'],
498
+ ['tabIndex', 'tabindex'],
499
+ ['bgColor', 'bgcolor'],
500
+ ['colSpan', 'colspan'],
501
+ ['rowSpan', 'rowspan'],
502
+ ['contentEditable', 'contenteditable'],
503
+ ['crossOrigin', 'crossorigin'],
504
+ ['dateTime', 'datetime'],
505
+ ['formAction', 'formaction'],
506
+ ['isMap', 'ismap'],
507
+ ['maxLength', 'maxlength'],
508
+ ['minLength', 'minlength'],
509
+ ['noValidate', 'novalidate'],
510
+ ['useMap', 'usemap'],
511
+ ['htmlFor', 'for'],
512
+ ]);
513
+ /**
514
+ * Map associating previously transformed HTML property into HTML attribute.
515
+ */
516
+ const CACHED_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map();
517
+ /**
518
+ *
519
+ * @param propName
520
+ */
521
+ function htmlPropertyToAttribute(propName) {
522
+ const ariaAttributeName = AriaPropNameToAttrNameMap[propName];
523
+ if (!isUndefined$1(ariaAttributeName)) {
524
+ return ariaAttributeName;
525
+ }
526
+ const specialAttributeName = SPECIAL_PROPERTY_ATTRIBUTE_MAPPING.get(propName);
527
+ if (!isUndefined$1(specialAttributeName)) {
528
+ return specialAttributeName;
529
+ }
530
+ const cachedAttributeName = CACHED_PROPERTY_ATTRIBUTE_MAPPING.get(propName);
531
+ if (!isUndefined$1(cachedAttributeName)) {
532
+ return cachedAttributeName;
533
+ }
534
+ let attributeName = '';
535
+ for (let i = 0, len = propName.length; i < len; i++) {
536
+ const code = StringCharCodeAt.call(propName, i);
537
+ if (code >= 65 && // "A"
538
+ code <= 90 // "Z"
539
+ ) {
540
+ attributeName += '-' + StringFromCharCode(code + 32);
541
+ }
542
+ else {
543
+ attributeName += StringFromCharCode(code);
544
+ }
545
+ }
546
+ CACHED_PROPERTY_ATTRIBUTE_MAPPING.set(propName, attributeName);
547
+ return attributeName;
548
+ }
431
549
 
432
550
  /*
433
551
  * Copyright (c) 2020, salesforce.com, inc.
@@ -477,7 +595,7 @@ function setHooks(hooks) {
477
595
  function flattenStylesheets(stylesheets) {
478
596
  const list = [];
479
597
  for (const stylesheet of stylesheets) {
480
- if (!isArray(stylesheet)) {
598
+ if (!isArray$1(stylesheet)) {
481
599
  list.push(stylesheet);
482
600
  }
483
601
  else {
@@ -486,7 +604,7 @@ function flattenStylesheets(stylesheets) {
486
604
  }
487
605
  return list;
488
606
  }
489
- /** version: 8.6.0 */
607
+ /** version: 8.8.0 */
490
608
 
491
609
  /*
492
610
  * Copyright (c) 2024, Salesforce, Inc.
@@ -647,21 +765,25 @@ const mutationTracker = new MutationTracker();
647
765
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
648
766
  */
649
767
  /**
650
- * Map of global attribute or ARIA attribute to the corresponding property name.
651
- * Not all global attributes are included, just those from `HTMLElementTheGoodParts`.
768
+ * Filters out the following types of properties that should not be set.
769
+ * - Properties that are not public.
770
+ * - Properties that are not global.
771
+ * - Properties that are global but are internally overridden.
652
772
  */
653
- const attrsToProps = assign(create(null), {
654
- accesskey: 'accessKey',
655
- dir: 'dir',
656
- draggable: 'draggable',
657
- hidden: 'hidden',
658
- id: 'id',
659
- lang: 'lang',
660
- spellcheck: 'spellcheck',
661
- tabindex: 'tabIndex',
662
- title: 'title',
663
- ...AriaAttrNameToPropNameMap,
664
- });
773
+ function filterProperties(props, publicFields, privateFields) {
774
+ const propsToAssign = create(null);
775
+ const publicFieldSet = new Set(publicFields);
776
+ const privateFieldSet = new Set(privateFields);
777
+ keys(props).forEach((propName) => {
778
+ const attrName = htmlPropertyToAttribute(propName);
779
+ if (publicFieldSet.has(propName) ||
780
+ ((isGlobalHtmlAttribute(attrName) || isAriaAttribute(attrName)) &&
781
+ !privateFieldSet.has(propName))) {
782
+ propsToAssign[propName] = props[propName];
783
+ }
784
+ });
785
+ return propsToAssign;
786
+ }
665
787
  /**
666
788
  * Descriptor for IDL attribute reflections that merely reflect the string, e.g. `title`.
667
789
  */
@@ -737,21 +859,11 @@ const ariaDescriptor = (attrName) => ({
737
859
  this.removeAttribute(attrName);
738
860
  }
739
861
  else {
740
- this.setAttribute(attrName, toString(newValue));
862
+ this.setAttribute(attrName, toString$1(newValue));
741
863
  }
742
864
  }
743
865
  },
744
866
  });
745
- function reflectAttrToProp(instance, attrName, attrValue) {
746
- const reflectedPropName = attrsToProps[attrName];
747
- // If it is a reflected property and it was not overridden by the instance
748
- if (reflectedPropName && !hasOwnProperty.call(instance, reflectedPropName)) {
749
- const currentValue = instance[reflectedPropName];
750
- if (currentValue !== attrValue) {
751
- instance[reflectedPropName] = attrValue;
752
- }
753
- }
754
- }
755
867
  const descriptors = {
756
868
  accessKey: stringDescriptor('accesskey'),
757
869
  dir: stringDescriptor('dir'),
@@ -771,7 +883,7 @@ const descriptors = {
771
883
  const num = Number(newValue);
772
884
  const normalizedValue = isFinite(num) ? String(Math.trunc(num)) : '0';
773
885
  if (normalizedValue !== currentValue) {
774
- this.setAttribute('tabindex', toString(newValue));
886
+ this.setAttribute('tabindex', toString$1(newValue));
775
887
  }
776
888
  },
777
889
  },
@@ -820,27 +932,25 @@ class LightningElement {
820
932
  return (__classPrivateFieldSet(this, _LightningElement_classList, new ClassList(this), "f"));
821
933
  }
822
934
  setAttribute(attrName, attrValue) {
823
- const normalizedName = StringToLowerCase.call(toString(attrName));
935
+ const normalizedName = StringToLowerCase.call(toString$1(attrName));
824
936
  const normalizedValue = String(attrValue);
825
937
  __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName] = normalizedValue;
826
- reflectAttrToProp(this, normalizedName, normalizedValue);
827
938
  mutationTracker.add(this, normalizedName);
828
939
  }
829
940
  getAttribute(attrName) {
830
- const normalizedName = StringToLowerCase.call(toString(attrName));
831
- if (hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName)) {
941
+ const normalizedName = StringToLowerCase.call(toString$1(attrName));
942
+ if (hasOwnProperty$1.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName)) {
832
943
  return __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
833
944
  }
834
945
  return null;
835
946
  }
836
947
  hasAttribute(attrName) {
837
- const normalizedName = StringToLowerCase.call(toString(attrName));
838
- return hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName);
948
+ const normalizedName = StringToLowerCase.call(toString$1(attrName));
949
+ return hasOwnProperty$1.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName);
839
950
  }
840
951
  removeAttribute(attrName) {
841
- const normalizedName = StringToLowerCase.call(toString(attrName));
952
+ const normalizedName = StringToLowerCase.call(toString$1(attrName));
842
953
  delete __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
843
- reflectAttrToProp(this, normalizedName, null);
844
954
  // Track mutations for removal of non-existing attributes
845
955
  mutationTracker.add(this, normalizedName);
846
956
  }
@@ -926,36 +1036,42 @@ defineProperties(LightningElement.prototype, descriptors);
926
1036
  * SPDX-License-Identifier: MIT
927
1037
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
928
1038
  */
929
- const escapeAttrVal = (attrVal) => attrVal.replaceAll('&', '&amp;').replaceAll('"', '&quot;');
930
- function* renderAttrs(instance, attrs) {
931
- if (!attrs) {
932
- return;
933
- }
934
- for (const attrName of Object.getOwnPropertyNames(attrs)) {
935
- const attrVal = attrs[attrName];
936
- if (typeof attrVal === 'string') {
937
- yield attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`;
1039
+ const escapeAttrVal = (attrValue) => attrValue.replaceAll('&', '&amp;').replaceAll('"', '&quot;');
1040
+ function renderAttrsPrivate(instance, attrs, hostScopeToken, scopeToken) {
1041
+ // The scopeToken is e.g. `lwc-xyz123` which is the token our parent gives us.
1042
+ // The hostScopeToken is e.g. `lwc-abc456-host` which is the token for our own component.
1043
+ // It's possible to have both, one, the other, or neither.
1044
+ const combinedScopeToken = scopeToken && hostScopeToken
1045
+ ? `${scopeToken} ${hostScopeToken}`
1046
+ : scopeToken || hostScopeToken || '';
1047
+ let result = '';
1048
+ let hasClassAttribute = false;
1049
+ for (const attrName of getOwnPropertyNames$1(attrs)) {
1050
+ let attrValue = attrs[attrName];
1051
+ if (isNull(attrValue) || isUndefined$1(attrValue)) {
1052
+ attrValue = '';
938
1053
  }
939
- else if (attrVal === null) {
940
- yield '';
1054
+ else if (!isString(attrValue)) {
1055
+ attrValue = String(attrValue);
941
1056
  }
942
- }
943
- yield mutationTracker.renderMutatedAttrs(instance);
944
- }
945
- function renderAttrsNoYield(emit, instance, attrs) {
946
- if (!attrs) {
947
- return;
948
- }
949
- for (const attrName of Object.getOwnPropertyNames(attrs)) {
950
- const attrVal = attrs[attrName];
951
- if (typeof attrVal === 'string') {
952
- emit(attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`);
953
- }
954
- else if (attrVal === null) {
955
- emit('');
1057
+ if (combinedScopeToken && attrName === 'class') {
1058
+ attrValue += ' ' + combinedScopeToken;
1059
+ hasClassAttribute = true;
956
1060
  }
1061
+ result += attrValue === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrValue)}"`;
1062
+ }
1063
+ // If we didn't render any `class` attribute, render one for the scope token(s)
1064
+ if (!hasClassAttribute && combinedScopeToken) {
1065
+ result += ` class="${combinedScopeToken}"`;
957
1066
  }
958
- emit(mutationTracker.renderMutatedAttrs(instance));
1067
+ result += mutationTracker.renderMutatedAttrs(instance);
1068
+ return result;
1069
+ }
1070
+ function* renderAttrs(instance, attrs, hostScopeToken, scopeToken) {
1071
+ yield renderAttrsPrivate(instance, attrs, hostScopeToken, scopeToken);
1072
+ }
1073
+ function renderAttrsNoYield(emit, instance, attrs, hostScopeToken, scopeToken) {
1074
+ emit(renderAttrsPrivate(instance, attrs, hostScopeToken, scopeToken));
959
1075
  }
960
1076
  function* fallbackTmpl(_props, _attrs, _slotted, Cmp, _instance) {
961
1077
  if (Cmp.renderMode !== 'light') {
@@ -1109,17 +1225,637 @@ function* toIteratorDirective(iterable) {
1109
1225
  }
1110
1226
  }
1111
1227
 
1228
+ /**
1229
+ * Copyright (C) 2017 salesforce.com, inc.
1230
+ */
1231
+ const { isArray } = Array;
1232
+ const { prototype: ObjectDotPrototype, getPrototypeOf, create: ObjectCreate, defineProperty: ObjectDefineProperty, isExtensible, getOwnPropertyDescriptor, getOwnPropertyNames, getOwnPropertySymbols, preventExtensions, hasOwnProperty, } = Object;
1233
+ const { push: ArrayPush, concat: ArrayConcat } = Array.prototype;
1234
+ const OtS = {}.toString;
1235
+ function toString(obj) {
1236
+ if (obj && obj.toString) {
1237
+ return obj.toString();
1238
+ }
1239
+ else if (typeof obj === 'object') {
1240
+ return OtS.call(obj);
1241
+ }
1242
+ else {
1243
+ return obj + '';
1244
+ }
1245
+ }
1246
+ function isUndefined(obj) {
1247
+ return obj === undefined;
1248
+ }
1249
+ function isFunction(obj) {
1250
+ return typeof obj === 'function';
1251
+ }
1252
+ const proxyToValueMap = new WeakMap();
1253
+ function registerProxy(proxy, value) {
1254
+ proxyToValueMap.set(proxy, value);
1255
+ }
1256
+ const unwrap = (replicaOrAny) => proxyToValueMap.get(replicaOrAny) || replicaOrAny;
1257
+
1258
+ class BaseProxyHandler {
1259
+ constructor(membrane, value) {
1260
+ this.originalTarget = value;
1261
+ this.membrane = membrane;
1262
+ }
1263
+ // Shared utility methods
1264
+ wrapDescriptor(descriptor) {
1265
+ if (hasOwnProperty.call(descriptor, 'value')) {
1266
+ descriptor.value = this.wrapValue(descriptor.value);
1267
+ }
1268
+ else {
1269
+ const { set: originalSet, get: originalGet } = descriptor;
1270
+ if (!isUndefined(originalGet)) {
1271
+ descriptor.get = this.wrapGetter(originalGet);
1272
+ }
1273
+ if (!isUndefined(originalSet)) {
1274
+ descriptor.set = this.wrapSetter(originalSet);
1275
+ }
1276
+ }
1277
+ return descriptor;
1278
+ }
1279
+ copyDescriptorIntoShadowTarget(shadowTarget, key) {
1280
+ const { originalTarget } = this;
1281
+ // Note: a property might get defined multiple times in the shadowTarget
1282
+ // but it will always be compatible with the previous descriptor
1283
+ // to preserve the object invariants, which makes these lines safe.
1284
+ const originalDescriptor = getOwnPropertyDescriptor(originalTarget, key);
1285
+ // TODO: it should be impossible for the originalDescriptor to ever be undefined, this `if` can be removed
1286
+ /* istanbul ignore else */
1287
+ if (!isUndefined(originalDescriptor)) {
1288
+ const wrappedDesc = this.wrapDescriptor(originalDescriptor);
1289
+ ObjectDefineProperty(shadowTarget, key, wrappedDesc);
1290
+ }
1291
+ }
1292
+ lockShadowTarget(shadowTarget) {
1293
+ const { originalTarget } = this;
1294
+ const targetKeys = ArrayConcat.call(getOwnPropertyNames(originalTarget), getOwnPropertySymbols(originalTarget));
1295
+ targetKeys.forEach((key) => {
1296
+ this.copyDescriptorIntoShadowTarget(shadowTarget, key);
1297
+ });
1298
+ const { membrane: { tagPropertyKey }, } = this;
1299
+ if (!isUndefined(tagPropertyKey) && !hasOwnProperty.call(shadowTarget, tagPropertyKey)) {
1300
+ ObjectDefineProperty(shadowTarget, tagPropertyKey, ObjectCreate(null));
1301
+ }
1302
+ preventExtensions(shadowTarget);
1303
+ }
1304
+ // Shared Traps
1305
+ // TODO: apply() is never called
1306
+ /* istanbul ignore next */
1307
+ apply(shadowTarget, thisArg, argArray) {
1308
+ /* No op */
1309
+ }
1310
+ // TODO: construct() is never called
1311
+ /* istanbul ignore next */
1312
+ construct(shadowTarget, argArray, newTarget) {
1313
+ /* No op */
1314
+ }
1315
+ get(shadowTarget, key) {
1316
+ const { originalTarget, membrane: { valueObserved }, } = this;
1317
+ const value = originalTarget[key];
1318
+ valueObserved(originalTarget, key);
1319
+ return this.wrapValue(value);
1320
+ }
1321
+ has(shadowTarget, key) {
1322
+ const { originalTarget, membrane: { tagPropertyKey, valueObserved }, } = this;
1323
+ valueObserved(originalTarget, key);
1324
+ // since key is never going to be undefined, and tagPropertyKey might be undefined
1325
+ // we can simply compare them as the second part of the condition.
1326
+ return key in originalTarget || key === tagPropertyKey;
1327
+ }
1328
+ ownKeys(shadowTarget) {
1329
+ const { originalTarget, membrane: { tagPropertyKey }, } = this;
1330
+ // if the membrane tag key exists and it is not in the original target, we add it to the keys.
1331
+ const keys = isUndefined(tagPropertyKey) || hasOwnProperty.call(originalTarget, tagPropertyKey)
1332
+ ? []
1333
+ : [tagPropertyKey];
1334
+ // small perf optimization using push instead of concat to avoid creating an extra array
1335
+ ArrayPush.apply(keys, getOwnPropertyNames(originalTarget));
1336
+ ArrayPush.apply(keys, getOwnPropertySymbols(originalTarget));
1337
+ return keys;
1338
+ }
1339
+ isExtensible(shadowTarget) {
1340
+ const { originalTarget } = this;
1341
+ // optimization to avoid attempting to lock down the shadowTarget multiple times
1342
+ if (!isExtensible(shadowTarget)) {
1343
+ return false; // was already locked down
1344
+ }
1345
+ if (!isExtensible(originalTarget)) {
1346
+ this.lockShadowTarget(shadowTarget);
1347
+ return false;
1348
+ }
1349
+ return true;
1350
+ }
1351
+ getPrototypeOf(shadowTarget) {
1352
+ const { originalTarget } = this;
1353
+ return getPrototypeOf(originalTarget);
1354
+ }
1355
+ getOwnPropertyDescriptor(shadowTarget, key) {
1356
+ const { originalTarget, membrane: { valueObserved, tagPropertyKey }, } = this;
1357
+ // keys looked up via getOwnPropertyDescriptor need to be reactive
1358
+ valueObserved(originalTarget, key);
1359
+ let desc = getOwnPropertyDescriptor(originalTarget, key);
1360
+ if (isUndefined(desc)) {
1361
+ if (key !== tagPropertyKey) {
1362
+ return undefined;
1363
+ }
1364
+ // if the key is the membrane tag key, and is not in the original target,
1365
+ // we produce a synthetic descriptor and install it on the shadow target
1366
+ desc = { value: undefined, writable: false, configurable: false, enumerable: false };
1367
+ ObjectDefineProperty(shadowTarget, tagPropertyKey, desc);
1368
+ return desc;
1369
+ }
1370
+ if (desc.configurable === false) {
1371
+ // updating the descriptor to non-configurable on the shadow
1372
+ this.copyDescriptorIntoShadowTarget(shadowTarget, key);
1373
+ }
1374
+ // Note: by accessing the descriptor, the key is marked as observed
1375
+ // but access to the value, setter or getter (if available) cannot observe
1376
+ // mutations, just like regular methods, in which case we just do nothing.
1377
+ return this.wrapDescriptor(desc);
1378
+ }
1379
+ }
1380
+
1381
+ const getterMap$1 = new WeakMap();
1382
+ const setterMap$1 = new WeakMap();
1383
+ const reverseGetterMap = new WeakMap();
1384
+ const reverseSetterMap = new WeakMap();
1385
+ class ReactiveProxyHandler extends BaseProxyHandler {
1386
+ wrapValue(value) {
1387
+ return this.membrane.getProxy(value);
1388
+ }
1389
+ wrapGetter(originalGet) {
1390
+ const wrappedGetter = getterMap$1.get(originalGet);
1391
+ if (!isUndefined(wrappedGetter)) {
1392
+ return wrappedGetter;
1393
+ }
1394
+ const handler = this;
1395
+ const get = function () {
1396
+ // invoking the original getter with the original target
1397
+ return handler.wrapValue(originalGet.call(unwrap(this)));
1398
+ };
1399
+ getterMap$1.set(originalGet, get);
1400
+ reverseGetterMap.set(get, originalGet);
1401
+ return get;
1402
+ }
1403
+ wrapSetter(originalSet) {
1404
+ const wrappedSetter = setterMap$1.get(originalSet);
1405
+ if (!isUndefined(wrappedSetter)) {
1406
+ return wrappedSetter;
1407
+ }
1408
+ const set = function (v) {
1409
+ // invoking the original setter with the original target
1410
+ originalSet.call(unwrap(this), unwrap(v));
1411
+ };
1412
+ setterMap$1.set(originalSet, set);
1413
+ reverseSetterMap.set(set, originalSet);
1414
+ return set;
1415
+ }
1416
+ unwrapDescriptor(descriptor) {
1417
+ if (hasOwnProperty.call(descriptor, 'value')) {
1418
+ // dealing with a data descriptor
1419
+ descriptor.value = unwrap(descriptor.value);
1420
+ }
1421
+ else {
1422
+ const { set, get } = descriptor;
1423
+ if (!isUndefined(get)) {
1424
+ descriptor.get = this.unwrapGetter(get);
1425
+ }
1426
+ if (!isUndefined(set)) {
1427
+ descriptor.set = this.unwrapSetter(set);
1428
+ }
1429
+ }
1430
+ return descriptor;
1431
+ }
1432
+ unwrapGetter(redGet) {
1433
+ const reverseGetter = reverseGetterMap.get(redGet);
1434
+ if (!isUndefined(reverseGetter)) {
1435
+ return reverseGetter;
1436
+ }
1437
+ const handler = this;
1438
+ const get = function () {
1439
+ // invoking the red getter with the proxy of this
1440
+ return unwrap(redGet.call(handler.wrapValue(this)));
1441
+ };
1442
+ getterMap$1.set(get, redGet);
1443
+ reverseGetterMap.set(redGet, get);
1444
+ return get;
1445
+ }
1446
+ unwrapSetter(redSet) {
1447
+ const reverseSetter = reverseSetterMap.get(redSet);
1448
+ if (!isUndefined(reverseSetter)) {
1449
+ return reverseSetter;
1450
+ }
1451
+ const handler = this;
1452
+ const set = function (v) {
1453
+ // invoking the red setter with the proxy of this
1454
+ redSet.call(handler.wrapValue(this), handler.wrapValue(v));
1455
+ };
1456
+ setterMap$1.set(set, redSet);
1457
+ reverseSetterMap.set(redSet, set);
1458
+ return set;
1459
+ }
1460
+ set(shadowTarget, key, value) {
1461
+ const { originalTarget, membrane: { valueMutated }, } = this;
1462
+ const oldValue = originalTarget[key];
1463
+ if (oldValue !== value) {
1464
+ originalTarget[key] = value;
1465
+ valueMutated(originalTarget, key);
1466
+ }
1467
+ else if (key === 'length' && isArray(originalTarget)) {
1468
+ // fix for issue #236: push will add the new index, and by the time length
1469
+ // is updated, the internal length is already equal to the new length value
1470
+ // therefore, the oldValue is equal to the value. This is the forking logic
1471
+ // to support this use case.
1472
+ valueMutated(originalTarget, key);
1473
+ }
1474
+ return true;
1475
+ }
1476
+ deleteProperty(shadowTarget, key) {
1477
+ const { originalTarget, membrane: { valueMutated }, } = this;
1478
+ delete originalTarget[key];
1479
+ valueMutated(originalTarget, key);
1480
+ return true;
1481
+ }
1482
+ setPrototypeOf(shadowTarget, prototype) {
1483
+ /* istanbul ignore else */
1484
+ if (process.env.NODE_ENV !== 'production') {
1485
+ throw new Error(`Invalid setPrototypeOf invocation for reactive proxy ${toString(this.originalTarget)}. Prototype of reactive objects cannot be changed.`);
1486
+ }
1487
+ }
1488
+ preventExtensions(shadowTarget) {
1489
+ if (isExtensible(shadowTarget)) {
1490
+ const { originalTarget } = this;
1491
+ preventExtensions(originalTarget);
1492
+ // if the originalTarget is a proxy itself, it might reject
1493
+ // the preventExtension call, in which case we should not attempt to lock down
1494
+ // the shadow target.
1495
+ // TODO: It should not actually be possible to reach this `if` statement.
1496
+ // If a proxy rejects extensions, then calling preventExtensions will throw an error:
1497
+ // https://codepen.io/nolanlawson-the-selector/pen/QWMOjbY
1498
+ /* istanbul ignore if */
1499
+ if (isExtensible(originalTarget)) {
1500
+ return false;
1501
+ }
1502
+ this.lockShadowTarget(shadowTarget);
1503
+ }
1504
+ return true;
1505
+ }
1506
+ defineProperty(shadowTarget, key, descriptor) {
1507
+ const { originalTarget, membrane: { valueMutated, tagPropertyKey }, } = this;
1508
+ if (key === tagPropertyKey && !hasOwnProperty.call(originalTarget, key)) {
1509
+ // To avoid leaking the membrane tag property into the original target, we must
1510
+ // be sure that the original target doesn't have yet.
1511
+ // NOTE: we do not return false here because Object.freeze and equivalent operations
1512
+ // will attempt to set the descriptor to the same value, and expect no to throw. This
1513
+ // is an small compromise for the sake of not having to diff the descriptors.
1514
+ return true;
1515
+ }
1516
+ ObjectDefineProperty(originalTarget, key, this.unwrapDescriptor(descriptor));
1517
+ // intentionally testing if false since it could be undefined as well
1518
+ if (descriptor.configurable === false) {
1519
+ this.copyDescriptorIntoShadowTarget(shadowTarget, key);
1520
+ }
1521
+ valueMutated(originalTarget, key);
1522
+ return true;
1523
+ }
1524
+ }
1525
+
1526
+ const getterMap = new WeakMap();
1527
+ const setterMap = new WeakMap();
1528
+ class ReadOnlyHandler extends BaseProxyHandler {
1529
+ wrapValue(value) {
1530
+ return this.membrane.getReadOnlyProxy(value);
1531
+ }
1532
+ wrapGetter(originalGet) {
1533
+ const wrappedGetter = getterMap.get(originalGet);
1534
+ if (!isUndefined(wrappedGetter)) {
1535
+ return wrappedGetter;
1536
+ }
1537
+ const handler = this;
1538
+ const get = function () {
1539
+ // invoking the original getter with the original target
1540
+ return handler.wrapValue(originalGet.call(unwrap(this)));
1541
+ };
1542
+ getterMap.set(originalGet, get);
1543
+ return get;
1544
+ }
1545
+ wrapSetter(originalSet) {
1546
+ const wrappedSetter = setterMap.get(originalSet);
1547
+ if (!isUndefined(wrappedSetter)) {
1548
+ return wrappedSetter;
1549
+ }
1550
+ const handler = this;
1551
+ const set = function (v) {
1552
+ /* istanbul ignore else */
1553
+ if (process.env.NODE_ENV !== 'production') {
1554
+ const { originalTarget } = handler;
1555
+ throw new Error(`Invalid mutation: Cannot invoke a setter on "${originalTarget}". "${originalTarget}" is read-only.`);
1556
+ }
1557
+ };
1558
+ setterMap.set(originalSet, set);
1559
+ return set;
1560
+ }
1561
+ set(shadowTarget, key, value) {
1562
+ /* istanbul ignore else */
1563
+ if (process.env.NODE_ENV !== 'production') {
1564
+ const { originalTarget } = this;
1565
+ const msg = isArray(originalTarget)
1566
+ ? `Invalid mutation: Cannot mutate array at index ${key.toString()}. Array is read-only.`
1567
+ : `Invalid mutation: Cannot set "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`;
1568
+ throw new Error(msg);
1569
+ }
1570
+ /* istanbul ignore next */
1571
+ return false;
1572
+ }
1573
+ deleteProperty(shadowTarget, key) {
1574
+ /* istanbul ignore else */
1575
+ if (process.env.NODE_ENV !== 'production') {
1576
+ const { originalTarget } = this;
1577
+ throw new Error(`Invalid mutation: Cannot delete "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`);
1578
+ }
1579
+ /* istanbul ignore next */
1580
+ return false;
1581
+ }
1582
+ setPrototypeOf(shadowTarget, prototype) {
1583
+ /* istanbul ignore else */
1584
+ if (process.env.NODE_ENV !== 'production') {
1585
+ const { originalTarget } = this;
1586
+ throw new Error(`Invalid prototype mutation: Cannot set prototype on "${originalTarget}". "${originalTarget}" prototype is read-only.`);
1587
+ }
1588
+ }
1589
+ preventExtensions(shadowTarget) {
1590
+ /* istanbul ignore else */
1591
+ if (process.env.NODE_ENV !== 'production') {
1592
+ const { originalTarget } = this;
1593
+ throw new Error(`Invalid mutation: Cannot preventExtensions on ${originalTarget}". "${originalTarget} is read-only.`);
1594
+ }
1595
+ /* istanbul ignore next */
1596
+ return false;
1597
+ }
1598
+ defineProperty(shadowTarget, key, descriptor) {
1599
+ /* istanbul ignore else */
1600
+ if (process.env.NODE_ENV !== 'production') {
1601
+ const { originalTarget } = this;
1602
+ throw new Error(`Invalid mutation: Cannot defineProperty "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`);
1603
+ }
1604
+ /* istanbul ignore next */
1605
+ return false;
1606
+ }
1607
+ }
1608
+
1609
+ function extract(objectOrArray) {
1610
+ if (isArray(objectOrArray)) {
1611
+ return objectOrArray.map((item) => {
1612
+ const original = unwrap(item);
1613
+ if (original !== item) {
1614
+ return extract(original);
1615
+ }
1616
+ return item;
1617
+ });
1618
+ }
1619
+ const obj = ObjectCreate(getPrototypeOf(objectOrArray));
1620
+ const names = getOwnPropertyNames(objectOrArray);
1621
+ return ArrayConcat.call(names, getOwnPropertySymbols(objectOrArray)).reduce((seed, key) => {
1622
+ const item = objectOrArray[key];
1623
+ const original = unwrap(item);
1624
+ if (original !== item) {
1625
+ seed[key] = extract(original);
1626
+ }
1627
+ else {
1628
+ seed[key] = item;
1629
+ }
1630
+ return seed;
1631
+ }, obj);
1632
+ }
1633
+ const formatter = {
1634
+ header: (plainOrProxy) => {
1635
+ const originalTarget = unwrap(plainOrProxy);
1636
+ // if originalTarget is falsy or not unwrappable, exit
1637
+ if (!originalTarget || originalTarget === plainOrProxy) {
1638
+ return null;
1639
+ }
1640
+ const obj = extract(plainOrProxy);
1641
+ return ['object', { object: obj }];
1642
+ },
1643
+ hasBody: () => {
1644
+ return false;
1645
+ },
1646
+ body: () => {
1647
+ return null;
1648
+ },
1649
+ };
1650
+ // Inspired from paulmillr/es6-shim
1651
+ // https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js#L176-L185
1652
+ /* istanbul ignore next */
1653
+ function getGlobal() {
1654
+ // the only reliable means to get the global object is `Function('return this')()`
1655
+ // However, this causes CSP violations in Chrome apps.
1656
+ if (typeof globalThis !== 'undefined') {
1657
+ return globalThis;
1658
+ }
1659
+ if (typeof self !== 'undefined') {
1660
+ return self;
1661
+ }
1662
+ if (typeof window !== 'undefined') {
1663
+ return window;
1664
+ }
1665
+ if (typeof global !== 'undefined') {
1666
+ return global;
1667
+ }
1668
+ // Gracefully degrade if not able to locate the global object
1669
+ return {};
1670
+ }
1671
+ function init() {
1672
+ /* istanbul ignore if */
1673
+ if (process.env.NODE_ENV === 'production') {
1674
+ // this method should never leak to prod
1675
+ throw new ReferenceError();
1676
+ }
1677
+ const global = getGlobal();
1678
+ // Custom Formatter for Dev Tools. To enable this, open Chrome Dev Tools
1679
+ // - Go to Settings,
1680
+ // - Under console, select "Enable custom formatters"
1681
+ // For more information, https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview
1682
+ const devtoolsFormatters = global.devtoolsFormatters || [];
1683
+ ArrayPush.call(devtoolsFormatters, formatter);
1684
+ global.devtoolsFormatters = devtoolsFormatters;
1685
+ }
1686
+
1687
+ /* istanbul ignore else */
1688
+ if (process.env.NODE_ENV !== 'production') {
1689
+ init();
1690
+ }
1691
+ function defaultValueIsObservable(value) {
1692
+ // intentionally checking for null
1693
+ if (value === null) {
1694
+ return false;
1695
+ }
1696
+ // treat all non-object types, including undefined, as non-observable values
1697
+ if (typeof value !== 'object') {
1698
+ return false;
1699
+ }
1700
+ if (isArray(value)) {
1701
+ return true;
1702
+ }
1703
+ const proto = getPrototypeOf(value);
1704
+ return proto === ObjectDotPrototype || proto === null || getPrototypeOf(proto) === null;
1705
+ }
1706
+ const defaultValueObserved = (obj, key) => {
1707
+ /* do nothing */
1708
+ };
1709
+ const defaultValueMutated = (obj, key) => {
1710
+ /* do nothing */
1711
+ };
1712
+ function createShadowTarget(value) {
1713
+ return isArray(value) ? [] : {};
1714
+ }
1715
+ class ObservableMembrane {
1716
+ constructor(options = {}) {
1717
+ this.readOnlyObjectGraph = new WeakMap();
1718
+ this.reactiveObjectGraph = new WeakMap();
1719
+ const { valueMutated, valueObserved, valueIsObservable, tagPropertyKey } = options;
1720
+ this.valueMutated = isFunction(valueMutated) ? valueMutated : defaultValueMutated;
1721
+ this.valueObserved = isFunction(valueObserved) ? valueObserved : defaultValueObserved;
1722
+ this.valueIsObservable = isFunction(valueIsObservable)
1723
+ ? valueIsObservable
1724
+ : defaultValueIsObservable;
1725
+ this.tagPropertyKey = tagPropertyKey;
1726
+ }
1727
+ getProxy(value) {
1728
+ const unwrappedValue = unwrap(value);
1729
+ if (this.valueIsObservable(unwrappedValue)) {
1730
+ // When trying to extract the writable version of a readonly we return the readonly.
1731
+ if (this.readOnlyObjectGraph.get(unwrappedValue) === value) {
1732
+ return value;
1733
+ }
1734
+ return this.getReactiveHandler(unwrappedValue);
1735
+ }
1736
+ return unwrappedValue;
1737
+ }
1738
+ getReadOnlyProxy(value) {
1739
+ value = unwrap(value);
1740
+ if (this.valueIsObservable(value)) {
1741
+ return this.getReadOnlyHandler(value);
1742
+ }
1743
+ return value;
1744
+ }
1745
+ unwrapProxy(p) {
1746
+ return unwrap(p);
1747
+ }
1748
+ getReactiveHandler(value) {
1749
+ let proxy = this.reactiveObjectGraph.get(value);
1750
+ if (isUndefined(proxy)) {
1751
+ // caching the proxy after the first time it is accessed
1752
+ const handler = new ReactiveProxyHandler(this, value);
1753
+ proxy = new Proxy(createShadowTarget(value), handler);
1754
+ registerProxy(proxy, value);
1755
+ this.reactiveObjectGraph.set(value, proxy);
1756
+ }
1757
+ return proxy;
1758
+ }
1759
+ getReadOnlyHandler(value) {
1760
+ let proxy = this.readOnlyObjectGraph.get(value);
1761
+ if (isUndefined(proxy)) {
1762
+ // caching the proxy after the first time it is accessed
1763
+ const handler = new ReadOnlyHandler(this, value);
1764
+ proxy = new Proxy(createShadowTarget(value), handler);
1765
+ registerProxy(proxy, value);
1766
+ this.readOnlyObjectGraph.set(value, proxy);
1767
+ }
1768
+ return proxy;
1769
+ }
1770
+ }
1771
+ /** version: 2.0.0 */
1772
+
1773
+ /*
1774
+ * Copyright (c) 2024, Salesforce, Inc.
1775
+ * All rights reserved.
1776
+ * SPDX-License-Identifier: MIT
1777
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
1778
+ */
1779
+ const reactiveMembrane = new ObservableMembrane();
1780
+ // Modeled after `getReadOnlyProxy` in `membrane.ts` in `engine-core`
1781
+ // Return a proxy over the given object so that access is immutable
1782
+ // https://github.com/salesforce/lwc/blob/e9db491/packages/%40lwc/engine-core/src/framework/membrane.ts#L29-L33
1783
+ function getReadOnlyProxy(value) {
1784
+ return reactiveMembrane.getReadOnlyProxy(value);
1785
+ }
1786
+
1787
+ /*
1788
+ * Copyright (c) 2024, salesforce.com, inc.
1789
+ * All rights reserved.
1790
+ * SPDX-License-Identifier: MIT
1791
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
1792
+ */
1793
+ const contextfulRelationships = new WeakMap();
1794
+ function establishContextfulRelationship(parentLe, childLe) {
1795
+ contextfulRelationships.set(childLe, parentLe);
1796
+ }
1797
+ function getContextfulStack(le) {
1798
+ const contextfulParent = contextfulRelationships.get(le);
1799
+ if (!contextfulParent) {
1800
+ return [];
1801
+ }
1802
+ return [contextfulParent, ...getContextfulStack(contextfulParent)];
1803
+ }
1804
+ const contextProviders = new WeakMap();
1805
+ function registerContextProvider(adapter, attachedLe, consumerCallback) {
1806
+ let elementMap = contextProviders.get(adapter);
1807
+ if (!elementMap) {
1808
+ elementMap = new WeakMap();
1809
+ contextProviders.set(adapter, elementMap);
1810
+ }
1811
+ elementMap.set(attachedLe, consumerCallback);
1812
+ }
1813
+ function connectContext(adapter, contextConsumer, onNewValue) {
1814
+ const elementMap = contextProviders.get(adapter);
1815
+ if (!elementMap) {
1816
+ return;
1817
+ }
1818
+ const contextfulStack = getContextfulStack(contextConsumer);
1819
+ for (const ancestor of contextfulStack) {
1820
+ const onConsumerConnected = elementMap.get(ancestor);
1821
+ if (onConsumerConnected) {
1822
+ onConsumerConnected({
1823
+ provide(newContextValue) {
1824
+ onNewValue(newContextValue);
1825
+ },
1826
+ });
1827
+ return;
1828
+ }
1829
+ }
1830
+ }
1831
+ function createContextProvider(adapter) {
1832
+ return (le, options) => {
1833
+ if (!(le instanceof LightningElement)) {
1834
+ throw new Error('Unable to register context provider on provided `elm`.');
1835
+ }
1836
+ if (!le.isConnected || !options?.consumerConnectedCallback) {
1837
+ return;
1838
+ }
1839
+ const { consumerConnectedCallback } = options;
1840
+ registerContextProvider(adapter, le, (consumer) => consumerConnectedCallback(consumer));
1841
+ };
1842
+ }
1843
+
1112
1844
  exports.ClassList = ClassList;
1113
1845
  exports.LightningElement = LightningElement;
1114
1846
  exports.SYMBOL__GENERATE_MARKUP = SYMBOL__GENERATE_MARKUP;
1115
1847
  exports.SYMBOL__SET_INTERNALS = SYMBOL__SET_INTERNALS;
1116
1848
  exports.api = api;
1849
+ exports.connectContext = connectContext;
1117
1850
  exports.createContextProvider = createContextProvider;
1118
1851
  exports.createElement = createElement;
1852
+ exports.establishContextfulRelationship = establishContextfulRelationship;
1119
1853
  exports.fallbackTmpl = fallbackTmpl;
1120
1854
  exports.fallbackTmplNoYield = fallbackTmplNoYield;
1855
+ exports.filterProperties = filterProperties;
1121
1856
  exports.freezeTemplate = freezeTemplate;
1122
1857
  exports.getComponentDef = getComponentDef;
1858
+ exports.getReadOnlyProxy = getReadOnlyProxy;
1123
1859
  exports.hasScopedStaticStylesheets = hasScopedStaticStylesheets;
1124
1860
  exports.hot = hot;
1125
1861
  exports.htmlEscape = htmlEscape;
@@ -1146,8 +1882,8 @@ exports.swapStyle = swapStyle;
1146
1882
  exports.swapTemplate = swapTemplate;
1147
1883
  exports.toIteratorDirective = toIteratorDirective;
1148
1884
  exports.track = track;
1149
- exports.unwrap = unwrap;
1885
+ exports.unwrap = unwrap$1;
1150
1886
  exports.validateStyleTextContents = validateStyleTextContents;
1151
1887
  exports.wire = wire;
1152
- /** version: 8.6.0 */
1888
+ /** version: 8.8.0 */
1153
1889
  //# sourceMappingURL=index.cjs.js.map