lwc 2.37.2 → 2.38.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.
Files changed (85) hide show
  1. package/dist/engine-dom/esm/es2017/engine-dom.js +241 -125
  2. package/dist/engine-dom/esm/es2017/engine-dom.js.map +1 -0
  3. package/dist/engine-dom/iife/es2017/engine-dom.js +241 -125
  4. package/dist/engine-dom/iife/es2017/engine-dom.js.map +1 -0
  5. package/dist/engine-dom/iife/es2017/engine-dom.min.js +2 -1
  6. package/dist/engine-dom/iife/es2017/engine-dom.min.js.map +1 -0
  7. package/dist/engine-dom/iife/es2017/engine-dom_debug.js +178 -112
  8. package/dist/engine-dom/iife/es2017/engine-dom_debug.js.map +1 -0
  9. package/dist/engine-dom/iife/es5/engine-dom.js +274 -153
  10. package/dist/engine-dom/iife/es5/engine-dom.js.map +1 -0
  11. package/dist/engine-dom/iife/es5/engine-dom.min.js +2 -1
  12. package/dist/engine-dom/iife/es5/engine-dom.min.js.map +1 -0
  13. package/dist/engine-dom/iife/es5/engine-dom_debug.js +208 -140
  14. package/dist/engine-dom/iife/es5/engine-dom_debug.js.map +1 -0
  15. package/dist/engine-dom/umd/es2017/engine-dom.js +241 -125
  16. package/dist/engine-dom/umd/es2017/engine-dom.js.map +1 -0
  17. package/dist/engine-dom/umd/es2017/engine-dom.min.js +2 -1
  18. package/dist/engine-dom/umd/es2017/engine-dom.min.js.map +1 -0
  19. package/dist/engine-dom/umd/es2017/engine-dom_debug.js +178 -112
  20. package/dist/engine-dom/umd/es2017/engine-dom_debug.js.map +1 -0
  21. package/dist/engine-dom/umd/es5/engine-dom.js +274 -153
  22. package/dist/engine-dom/umd/es5/engine-dom.js.map +1 -0
  23. package/dist/engine-dom/umd/es5/engine-dom.min.js +2 -1
  24. package/dist/engine-dom/umd/es5/engine-dom.min.js.map +1 -0
  25. package/dist/engine-dom/umd/es5/engine-dom_debug.js +208 -140
  26. package/dist/engine-dom/umd/es5/engine-dom_debug.js.map +1 -0
  27. package/dist/engine-server/commonjs/es2017/engine-server.js +161 -122
  28. package/dist/engine-server/commonjs/es2017/engine-server.js.map +1 -0
  29. package/dist/engine-server/commonjs/es2017/engine-server.min.js +2 -1
  30. package/dist/engine-server/commonjs/es2017/engine-server.min.js.map +1 -0
  31. package/dist/engine-server/esm/es2017/engine-server.js +161 -122
  32. package/dist/engine-server/esm/es2017/engine-server.js.map +1 -0
  33. package/dist/synthetic-shadow/esm/es2017/synthetic-shadow.js +12 -5
  34. package/dist/synthetic-shadow/esm/es2017/synthetic-shadow.js.map +1 -0
  35. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.js +12 -5
  36. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.js.map +1 -0
  37. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.min.js +2 -1
  38. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow.min.js.map +1 -0
  39. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow_debug.js +12 -5
  40. package/dist/synthetic-shadow/iife/es2017/synthetic-shadow_debug.js.map +1 -0
  41. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.js +8 -5
  42. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.js.map +1 -0
  43. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.min.js +2 -1
  44. package/dist/synthetic-shadow/iife/es5/synthetic-shadow.min.js.map +1 -0
  45. package/dist/synthetic-shadow/iife/es5/synthetic-shadow_debug.js +8 -5
  46. package/dist/synthetic-shadow/iife/es5/synthetic-shadow_debug.js.map +1 -0
  47. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.js +12 -5
  48. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.js.map +1 -0
  49. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.min.js +3 -2
  50. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow.min.js.map +1 -0
  51. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow_debug.js +12 -5
  52. package/dist/synthetic-shadow/umd/es2017/synthetic-shadow_debug.js.map +1 -0
  53. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.js +8 -5
  54. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.js.map +1 -0
  55. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.min.js +2 -1
  56. package/dist/synthetic-shadow/umd/es5/synthetic-shadow.min.js.map +1 -0
  57. package/dist/synthetic-shadow/umd/es5/synthetic-shadow_debug.js +8 -5
  58. package/dist/synthetic-shadow/umd/es5/synthetic-shadow_debug.js.map +1 -0
  59. package/dist/wire-service/esm/es2017/wire-service.js +3 -2
  60. package/dist/wire-service/esm/es2017/wire-service.js.map +1 -0
  61. package/dist/wire-service/iife/es2017/wire-service.js +3 -2
  62. package/dist/wire-service/iife/es2017/wire-service.js.map +1 -0
  63. package/dist/wire-service/iife/es2017/wire-service.min.js +1 -0
  64. package/dist/wire-service/iife/es2017/wire-service.min.js.map +1 -0
  65. package/dist/wire-service/iife/es2017/wire-service_debug.js +3 -2
  66. package/dist/wire-service/iife/es2017/wire-service_debug.js.map +1 -0
  67. package/dist/wire-service/iife/es5/wire-service.js +3 -2
  68. package/dist/wire-service/iife/es5/wire-service.js.map +1 -0
  69. package/dist/wire-service/iife/es5/wire-service.min.js +1 -0
  70. package/dist/wire-service/iife/es5/wire-service.min.js.map +1 -0
  71. package/dist/wire-service/iife/es5/wire-service_debug.js +3 -2
  72. package/dist/wire-service/iife/es5/wire-service_debug.js.map +1 -0
  73. package/dist/wire-service/umd/es2017/wire-service.js +3 -2
  74. package/dist/wire-service/umd/es2017/wire-service.js.map +1 -0
  75. package/dist/wire-service/umd/es2017/wire-service.min.js +1 -0
  76. package/dist/wire-service/umd/es2017/wire-service.min.js.map +1 -0
  77. package/dist/wire-service/umd/es2017/wire-service_debug.js +3 -2
  78. package/dist/wire-service/umd/es2017/wire-service_debug.js.map +1 -0
  79. package/dist/wire-service/umd/es5/wire-service.js +3 -2
  80. package/dist/wire-service/umd/es5/wire-service.js.map +1 -0
  81. package/dist/wire-service/umd/es5/wire-service.min.js +1 -0
  82. package/dist/wire-service/umd/es5/wire-service.min.js.map +1 -0
  83. package/dist/wire-service/umd/es5/wire-service_debug.js +3 -2
  84. package/dist/wire-service/umd/es5/wire-service_debug.js.map +1 -0
  85. package/package.json +7 -7
@@ -328,6 +328,24 @@
328
328
  return propertyName;
329
329
  }
330
330
 
331
+ /*
332
+ * Copyright (c) 2020, salesforce.com, inc.
333
+ * All rights reserved.
334
+ * SPDX-License-Identifier: MIT
335
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
336
+ */
337
+ const ESCAPED_CHARS = {
338
+ '"': '"',
339
+ "'": ''',
340
+ '<': '&lt;',
341
+ '>': '&gt;',
342
+ '&': '&amp;',
343
+ };
344
+ function htmlEscape(str, attrMode = false) {
345
+ const searchValue = attrMode ? /["&]/g : /["'<>&]/g;
346
+ return str.replace(searchValue, (char) => ESCAPED_CHARS[char]);
347
+ }
348
+
331
349
  /*
332
350
  * Copyright (c) 2018, salesforce.com, inc.
333
351
  * All rights reserved.
@@ -335,9 +353,9 @@
335
353
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
336
354
  */
337
355
  // Increment whenever the LWC template compiler changes
338
- const LWC_VERSION = "2.37.2";
356
+ const LWC_VERSION = "2.38.0";
339
357
  const LWC_VERSION_COMMENT_REGEX = /\/\*LWC compiler v([\d.]+)\*\/\s*}/;
340
- /** version: 2.37.2 */
358
+ /** version: 2.38.0 */
341
359
 
342
360
  /**
343
361
  * Copyright (C) 2018 salesforce.com, inc.
@@ -416,7 +434,7 @@
416
434
  setFeatureFlag(name, value);
417
435
  }
418
436
  }
419
- /** version: 2.37.2 */
437
+ /** version: 2.38.0 */
420
438
 
421
439
  /**
422
440
  * Copyright (C) 2018 salesforce.com, inc.
@@ -480,7 +498,7 @@
480
498
  }
481
499
  }
482
500
  }
483
- /** version: 2.37.2 */
501
+ /** version: 2.38.0 */
484
502
 
485
503
  /*
486
504
  * Copyright (c) 2018, salesforce.com, inc.
@@ -2278,6 +2296,14 @@
2278
2296
  }
2279
2297
  return renderer.getLastElementChild(vm.elm);
2280
2298
  },
2299
+ get ownerDocument() {
2300
+ const vm = getAssociatedVM(this);
2301
+ const renderer = vm.renderer;
2302
+ if (process.env.NODE_ENV !== 'production') {
2303
+ warnIfInvokedDuringConstruction(vm, 'ownerDocument');
2304
+ }
2305
+ return renderer.ownerDocument(vm.elm);
2306
+ },
2281
2307
  render() {
2282
2308
  const vm = getAssociatedVM(this);
2283
2309
  return vm.def.template;
@@ -2353,31 +2379,84 @@
2353
2379
  }
2354
2380
 
2355
2381
  /*
2356
- * Copyright (c) 2018, salesforce.com, inc.
2382
+ * Copyright (c) 2023, salesforce.com, inc.
2357
2383
  * All rights reserved.
2358
2384
  * SPDX-License-Identifier: MIT
2359
2385
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2360
2386
  */
2361
- const DeprecatedWiredElementHost = '$$DeprecatedWiredElementHostKey$$';
2362
- const DeprecatedWiredParamsMeta = '$$DeprecatedWiredParamsMetaKey$$';
2363
- const WIRE_DEBUG_ENTRY = '@wire';
2364
- const WireMetaMap = new Map();
2365
- class WireContextRegistrationEvent extends CustomEvent {
2366
- constructor(adapterToken, { setNewContext, setDisconnectedCallback }) {
2367
- super(adapterToken, {
2368
- bubbles: true,
2369
- composed: true,
2387
+ const AdapterToTokenMap = new Map();
2388
+ function createContextProviderWithRegister(adapter, registerContextProvider) {
2389
+ let adapterContextToken = AdapterToTokenMap.get(adapter);
2390
+ if (!isUndefined$1(adapterContextToken)) {
2391
+ throw new Error(`Adapter already has a context provider.`);
2392
+ }
2393
+ adapterContextToken = guid();
2394
+ AdapterToTokenMap.set(adapter, adapterContextToken);
2395
+ const providers = new WeakSet();
2396
+ return (elmOrComponent, options) => {
2397
+ if (providers.has(elmOrComponent)) {
2398
+ throw new Error(`Adapter was already installed on ${elmOrComponent}.`);
2399
+ }
2400
+ providers.add(elmOrComponent);
2401
+ const { consumerConnectedCallback, consumerDisconnectedCallback } = options;
2402
+ registerContextProvider(elmOrComponent, adapterContextToken, (subscriptionPayload) => {
2403
+ const { setNewContext, setDisconnectedCallback } = subscriptionPayload;
2404
+ const consumer = {
2405
+ provide(newContext) {
2406
+ setNewContext(newContext);
2407
+ },
2408
+ };
2409
+ const disconnectCallback = () => {
2410
+ if (!isUndefined$1(consumerDisconnectedCallback)) {
2411
+ consumerDisconnectedCallback(consumer);
2412
+ }
2413
+ };
2414
+ setDisconnectedCallback(disconnectCallback);
2415
+ consumerConnectedCallback(consumer);
2370
2416
  });
2371
- defineProperties(this, {
2372
- setNewContext: {
2373
- value: setNewContext,
2417
+ };
2418
+ }
2419
+ function createContextWatcher(vm, wireDef, callbackWhenContextIsReady) {
2420
+ const { adapter } = wireDef;
2421
+ const adapterContextToken = AdapterToTokenMap.get(adapter);
2422
+ if (isUndefined$1(adapterContextToken)) {
2423
+ return; // no provider found, nothing to be done
2424
+ }
2425
+ const { elm, context: { wiredConnecting, wiredDisconnecting }, renderer: { registerContextConsumer }, } = vm;
2426
+ // waiting for the component to be connected to formally request the context via the token
2427
+ ArrayPush$1.call(wiredConnecting, () => {
2428
+ // This will attempt to connect the current element with one of its anscestors
2429
+ // that can provide context for the given wire adapter. This relationship is
2430
+ // keyed on the secret & internal value of `adapterContextToken`, which is unique
2431
+ // to a given wire adapter.
2432
+ //
2433
+ // Depending on the runtime environment, this connection is made using either DOM
2434
+ // events (in the browser) or a custom traversal (on the server).
2435
+ registerContextConsumer(elm, adapterContextToken, {
2436
+ setNewContext(newContext) {
2437
+ // eslint-disable-next-line @lwc/lwc-internal/no-invalid-todo
2438
+ // TODO: dev-mode validation of config based on the adapter.contextSchema
2439
+ callbackWhenContextIsReady(newContext);
2374
2440
  },
2375
- setDisconnectedCallback: {
2376
- value: setDisconnectedCallback,
2441
+ setDisconnectedCallback(disconnectCallback) {
2442
+ // adds this callback into the disconnect bucket so it gets disconnected from parent
2443
+ // the the element hosting the wire is disconnected
2444
+ ArrayPush$1.call(wiredDisconnecting, disconnectCallback);
2377
2445
  },
2378
2446
  });
2379
- }
2447
+ });
2380
2448
  }
2449
+
2450
+ /*
2451
+ * Copyright (c) 2023, salesforce.com, inc.
2452
+ * All rights reserved.
2453
+ * SPDX-License-Identifier: MIT
2454
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
2455
+ */
2456
+ const DeprecatedWiredElementHost = '$$DeprecatedWiredElementHostKey$$';
2457
+ const DeprecatedWiredParamsMeta = '$$DeprecatedWiredParamsMetaKey$$';
2458
+ const WIRE_DEBUG_ENTRY = '@wire';
2459
+ const WireMetaMap = new Map();
2381
2460
  function createFieldDataCallback(vm, name) {
2382
2461
  return (value) => {
2383
2462
  updateComponentValue(vm, name, value);
@@ -2421,35 +2500,6 @@
2421
2500
  ro,
2422
2501
  };
2423
2502
  }
2424
- function createContextWatcher(vm, wireDef, callbackWhenContextIsReady) {
2425
- const { adapter } = wireDef;
2426
- const adapterContextToken = getAdapterToken(adapter);
2427
- if (isUndefined$1(adapterContextToken)) {
2428
- return; // no provider found, nothing to be done
2429
- }
2430
- const { elm, context: { wiredConnecting, wiredDisconnecting }, renderer: { dispatchEvent }, } = vm;
2431
- // waiting for the component to be connected to formally request the context via the token
2432
- ArrayPush$1.call(wiredConnecting, () => {
2433
- // This event is responsible for connecting the host element with another
2434
- // element in the composed path that is providing contextual data. The provider
2435
- // must be listening for a special dom event with the name corresponding to the value of
2436
- // `adapterContextToken`, which will remain secret and internal to this file only to
2437
- // guarantee that the linkage can be forged.
2438
- const contextRegistrationEvent = new WireContextRegistrationEvent(adapterContextToken, {
2439
- setNewContext(newContext) {
2440
- // eslint-disable-next-line @lwc/lwc-internal/no-invalid-todo
2441
- // TODO: dev-mode validation of config based on the adapter.contextSchema
2442
- callbackWhenContextIsReady(newContext);
2443
- },
2444
- setDisconnectedCallback(disconnectCallback) {
2445
- // adds this callback into the disconnect bucket so it gets disconnected from parent
2446
- // the the element hosting the wire is disconnected
2447
- ArrayPush$1.call(wiredDisconnecting, disconnectCallback);
2448
- },
2449
- });
2450
- dispatchEvent(elm, contextRegistrationEvent);
2451
- });
2452
- }
2453
2503
  function createConnector(vm, name, wireDef) {
2454
2504
  const { method, adapter, configCallback, dynamic } = wireDef;
2455
2505
  let debugInfo;
@@ -2524,13 +2574,6 @@
2524
2574
  resetConfigWatcher: () => ro.reset(),
2525
2575
  };
2526
2576
  }
2527
- const AdapterToTokenMap = new Map();
2528
- function getAdapterToken(adapter) {
2529
- return AdapterToTokenMap.get(adapter);
2530
- }
2531
- function setAdapterToken(adapter, token) {
2532
- AdapterToTokenMap.set(adapter, token);
2533
- }
2534
2577
  function storeWiredMethodMeta(descriptor, adapter, configCallback, dynamic) {
2535
2578
  // support for callable adapters
2536
2579
  if (adapter.adapter) {
@@ -6339,6 +6382,10 @@
6339
6382
  // Use the unpatched native getElementById/querySelectorAll rather than the synthetic one
6340
6383
  const getElementById = _globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
6341
6384
  const querySelectorAll = _globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
6385
+ // This is a "handoff" from synthetic-shadow to engine-core – we want to clean up after ourselves
6386
+ // so nobody else can misuse these global APIs.
6387
+ delete _globalThis[KEY__NATIVE_GET_ELEMENT_BY_ID];
6388
+ delete _globalThis[KEY__NATIVE_QUERY_SELECTOR_ALL];
6342
6389
  function isSyntheticShadowRootInstance(rootNode) {
6343
6390
  return rootNode !== document && isTrue(rootNode.synthetic);
6344
6391
  }
@@ -6586,67 +6633,6 @@
6586
6633
  }
6587
6634
  }
6588
6635
 
6589
- /*
6590
- * Copyright (c) 2018, salesforce.com, inc.
6591
- * All rights reserved.
6592
- * SPDX-License-Identifier: MIT
6593
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6594
- */
6595
- // this is lwc internal implementation
6596
- function createContextProvider(adapter) {
6597
- let adapterContextToken = getAdapterToken(adapter);
6598
- if (!isUndefined$1(adapterContextToken)) {
6599
- throw new Error(`Adapter already has a context provider.`);
6600
- }
6601
- adapterContextToken = guid();
6602
- setAdapterToken(adapter, adapterContextToken);
6603
- const providers = new WeakSet();
6604
- return (elm, options) => {
6605
- if (providers.has(elm)) {
6606
- throw new Error(`Adapter was already installed on ${elm}.`);
6607
- }
6608
- providers.add(elm);
6609
- const { consumerConnectedCallback, consumerDisconnectedCallback } = options;
6610
- elm.addEventListener(adapterContextToken, ((evt) => {
6611
- const { setNewContext, setDisconnectedCallback } = evt;
6612
- const consumer = {
6613
- provide(newContext) {
6614
- setNewContext(newContext);
6615
- },
6616
- };
6617
- const disconnectCallback = () => {
6618
- if (!isUndefined$1(consumerDisconnectedCallback)) {
6619
- consumerDisconnectedCallback(consumer);
6620
- }
6621
- };
6622
- setDisconnectedCallback(disconnectCallback);
6623
- consumerConnectedCallback(consumer);
6624
- evt.stopImmediatePropagation();
6625
- }));
6626
- };
6627
- }
6628
-
6629
- /*
6630
- * Copyright (c) 2018, salesforce.com, inc.
6631
- * All rights reserved.
6632
- * SPDX-License-Identifier: MIT
6633
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6634
- */
6635
- /**
6636
- * EXPERIMENTAL: This function allows you to create a reactive readonly
6637
- * membrane around any object value. This API is subject to change or
6638
- * being removed.
6639
- */
6640
- function readonly(obj) {
6641
- if (process.env.NODE_ENV !== 'production') {
6642
- // TODO [#1292]: Remove the readonly decorator
6643
- if (arguments.length !== 1) {
6644
- assert.fail('@readonly cannot be used as a decorator just yet, use it as a function with one argument to produce a readonly version of the provided value.');
6645
- }
6646
- }
6647
- return getReadOnlyProxy(obj);
6648
- }
6649
-
6650
6636
  /*
6651
6637
  * Copyright (c) 2022, salesforce.com, inc.
6652
6638
  * All rights reserved.
@@ -6700,15 +6686,44 @@
6700
6686
  return renderer.nextSibling(hydratedNode);
6701
6687
  }
6702
6688
  const NODE_VALUE_PROP = 'nodeValue';
6689
+ const PARENT_NODE_PROP = 'parentNode';
6690
+ const TAG_NAME_PROP = 'tagName';
6691
+ function textNodeContentsAreEqual(node, vnode, renderer) {
6692
+ const { getProperty } = renderer;
6693
+ const nodeValue = getProperty(node, NODE_VALUE_PROP);
6694
+ if (nodeValue === vnode.text) {
6695
+ return true;
6696
+ }
6697
+ // Special case for empty text nodes – these are serialized differently on the server
6698
+ // See https://github.com/salesforce/lwc/pull/2656
6699
+ if (nodeValue === '\u200D' && vnode.text === '') {
6700
+ return true;
6701
+ }
6702
+ // Special case for text nodes inside `<style>` tags – these are escaped when rendered server-size,
6703
+ // but not when generated by the engine client-side.
6704
+ const parentNode = getProperty(node, PARENT_NODE_PROP);
6705
+ // Should never be null, but just to be safe, we check.
6706
+ /* istanbul ignore else */
6707
+ if (!isNull(parentNode)) {
6708
+ const tagName = getProperty(parentNode, TAG_NAME_PROP);
6709
+ // If the tagName is STYLE, then the following condition should always be true.
6710
+ // The LWC compiler blocks using `<style>`s inside of templates, so it should be impossible
6711
+ // for component authors to render different `<style>` text content on the client and server.
6712
+ // But just to be safe, we check.
6713
+ /* istanbul ignore next */
6714
+ if (tagName === 'STYLE' && htmlEscape(vnode.text) === nodeValue) {
6715
+ return true;
6716
+ }
6717
+ }
6718
+ return false;
6719
+ }
6703
6720
  function hydrateText(node, vnode, renderer) {
6704
6721
  var _a;
6705
6722
  if (!hasCorrectNodeType(vnode, node, 3 /* EnvNodeTypes.TEXT */, renderer)) {
6706
6723
  return handleMismatch(node, vnode, renderer);
6707
6724
  }
6708
6725
  if (process.env.NODE_ENV !== 'production') {
6709
- const { getProperty } = renderer;
6710
- const nodeValue = getProperty(node, NODE_VALUE_PROP);
6711
- if (nodeValue !== vnode.text && !(nodeValue === '\u200D' && vnode.text === '')) {
6726
+ if (!textNodeContentsAreEqual(node, vnode, renderer)) {
6712
6727
  logWarn('Hydration mismatch: text values do not match, will recover from the difference', vnode.owner);
6713
6728
  }
6714
6729
  }
@@ -6888,6 +6903,19 @@
6888
6903
  const hasIncompatibleStyle = validateStyleAttr(vnode, elm, renderer);
6889
6904
  return hasIncompatibleAttrs && hasIncompatibleClass && hasIncompatibleStyle;
6890
6905
  }
6906
+ function attributeValuesAreEqual(vnodeValue, value) {
6907
+ const vnodeValueAsString = String(vnodeValue);
6908
+ if (vnodeValueAsString === value) {
6909
+ return true;
6910
+ }
6911
+ // If the expected value is null, this means that the attribute does not exist. In that case,
6912
+ // we accept any nullish value (undefined or null).
6913
+ if (isNull(value) && (isUndefined$1(vnodeValue) || isNull(vnodeValue))) {
6914
+ return true;
6915
+ }
6916
+ // In all other cases, the two values are not considered equal
6917
+ return false;
6918
+ }
6891
6919
  function validateAttrs(vnode, elm, renderer) {
6892
6920
  const { data: { attrs = {} }, } = vnode;
6893
6921
  let nodesAreCompatible = true;
@@ -6897,10 +6925,10 @@
6897
6925
  const { owner } = vnode;
6898
6926
  const { getAttribute } = renderer;
6899
6927
  const elmAttrValue = getAttribute(elm, attrName);
6900
- if (String(attrValue) !== elmAttrValue) {
6928
+ if (!attributeValuesAreEqual(attrValue, elmAttrValue)) {
6901
6929
  if (process.env.NODE_ENV !== 'production') {
6902
6930
  const { getProperty } = renderer;
6903
- logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "${attrName}" has different values, expected "${attrValue}" but found "${elmAttrValue}"`, owner);
6931
+ logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "${attrName}" has different values, expected "${attrValue}" but found ${isNull(elmAttrValue) ? 'null' : `"${elmAttrValue}"`}`, owner);
6904
6932
  }
6905
6933
  nodesAreCompatible = false;
6906
6934
  }
@@ -7294,7 +7322,28 @@
7294
7322
  }
7295
7323
  return ctor;
7296
7324
  }
7297
- /* version: 2.37.2 */
7325
+
7326
+ /*
7327
+ * Copyright (c) 2018, salesforce.com, inc.
7328
+ * All rights reserved.
7329
+ * SPDX-License-Identifier: MIT
7330
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
7331
+ */
7332
+ /**
7333
+ * EXPERIMENTAL: This function allows you to create a reactive readonly
7334
+ * membrane around any object value. This API is subject to change or
7335
+ * being removed.
7336
+ */
7337
+ function readonly(obj) {
7338
+ if (process.env.NODE_ENV !== 'production') {
7339
+ // TODO [#1292]: Remove the readonly decorator
7340
+ if (arguments.length !== 1) {
7341
+ assert.fail('@readonly cannot be used as a decorator just yet, use it as a function with one argument to produce a readonly version of the provided value.');
7342
+ }
7343
+ }
7344
+ return getReadOnlyProxy(obj);
7345
+ }
7346
+ /* version: 2.38.0 */
7298
7347
 
7299
7348
  /*
7300
7349
  * Copyright (c) 2018, salesforce.com, inc.
@@ -7722,7 +7771,37 @@
7722
7771
  function isNull(obj) {
7723
7772
  return obj === null;
7724
7773
  }
7725
- /** version: 2.37.2 */
7774
+ /** version: 2.38.0 */
7775
+
7776
+ /*
7777
+ * Copyright (c) 2023, salesforce.com, inc.
7778
+ * All rights reserved.
7779
+ * SPDX-License-Identifier: MIT
7780
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
7781
+ */
7782
+ class WireContextSubscriptionEvent extends CustomEvent {
7783
+ constructor(adapterToken, { setNewContext, setDisconnectedCallback }) {
7784
+ super(adapterToken, {
7785
+ bubbles: true,
7786
+ composed: true,
7787
+ });
7788
+ this.setNewContext = setNewContext;
7789
+ this.setDisconnectedCallback = setDisconnectedCallback;
7790
+ }
7791
+ }
7792
+ function registerContextConsumer(elm, adapterContextToken, subscriptionPayload) {
7793
+ dispatchEvent(elm, new WireContextSubscriptionEvent(adapterContextToken, subscriptionPayload));
7794
+ }
7795
+ function registerContextProvider(elm, adapterContextToken, onContextSubscription) {
7796
+ addEventListener(elm, adapterContextToken, ((evt) => {
7797
+ evt.stopImmediatePropagation();
7798
+ const { setNewContext, setDisconnectedCallback } = evt;
7799
+ onContextSubscription({
7800
+ setNewContext,
7801
+ setDisconnectedCallback,
7802
+ });
7803
+ }));
7804
+ }
7726
7805
 
7727
7806
  /*
7728
7807
  * Copyright (c) 2018, salesforce.com, inc.
@@ -7903,6 +7982,9 @@
7903
7982
  function assertInstanceOfHTMLElement(elm, msg) {
7904
7983
  assert.invariant(elm instanceof HTMLElement, msg);
7905
7984
  }
7985
+ function ownerDocument(element) {
7986
+ return element.ownerDocument;
7987
+ }
7906
7988
 
7907
7989
  exports.addEventListener = addEventListener;
7908
7990
  exports.assertInstanceOfHTMLElement = assertInstanceOfHTMLElement;
@@ -7927,8 +8009,11 @@
7927
8009
  exports.insert = insert;
7928
8010
  exports.isConnected = isConnected;
7929
8011
  exports.nextSibling = nextSibling;
8012
+ exports.ownerDocument = ownerDocument;
7930
8013
  exports.querySelector = querySelector;
7931
8014
  exports.querySelectorAll = querySelectorAll;
8015
+ exports.registerContextConsumer = registerContextConsumer;
8016
+ exports.registerContextProvider = registerContextProvider;
7932
8017
  exports.remove = remove;
7933
8018
  exports.removeAttribute = removeAttribute;
7934
8019
  exports.removeEventListener = removeEventListener;
@@ -8275,7 +8360,37 @@
8275
8360
  });
8276
8361
  freeze(LightningElement);
8277
8362
  seal(LightningElement.prototype);
8278
- /* version: 2.37.2 */
8363
+
8364
+ /*
8365
+ * Copyright (c) 2018, salesforce.com, inc.
8366
+ * All rights reserved.
8367
+ * SPDX-License-Identifier: MIT
8368
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8369
+ */
8370
+ function addEventListener(target, type, callback, options) {
8371
+ target.addEventListener(type, callback, options);
8372
+ }
8373
+
8374
+ /*
8375
+ * Copyright (c) 2023, salesforce.com, inc.
8376
+ * All rights reserved.
8377
+ * SPDX-License-Identifier: MIT
8378
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
8379
+ */
8380
+ function createContextProvider(adapter) {
8381
+ return createContextProviderWithRegister(adapter, registerContextProvider);
8382
+ }
8383
+ function registerContextProvider(elm, adapterContextToken, onContextSubscription) {
8384
+ addEventListener(elm, adapterContextToken, ((evt) => {
8385
+ evt.stopImmediatePropagation();
8386
+ const { setNewContext, setDisconnectedCallback } = evt;
8387
+ onContextSubscription({
8388
+ setNewContext,
8389
+ setDisconnectedCallback,
8390
+ });
8391
+ }));
8392
+ }
8393
+ /* version: 2.38.0 */
8279
8394
 
8280
8395
  exports.LightningElement = LightningElement;
8281
8396
  exports.__unstable__ProfilerControl = profilerControl;
@@ -8311,3 +8426,4 @@
8311
8426
  exports.wire = wire;
8312
8427
 
8313
8428
  }));
8429
+ //# sourceMappingURL=engine-dom.js.map