@lwc/ssr-runtime 8.12.0 → 8.12.2

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.cjs.js CHANGED
@@ -332,14 +332,14 @@ function isObject(obj) {
332
332
  function isString(obj) {
333
333
  return typeof obj === 'string';
334
334
  }
335
- const OtS$1 = {}.toString;
335
+ const OtS = {}.toString;
336
336
  /**
337
337
  * Converts the argument to a string, safely accounting for objects with "null" prototype.
338
338
  * Note that `toString(null)` returns `"[object Null]"` rather than `"null"`.
339
339
  * @param obj Value to convert to a string.
340
340
  * @returns String representation of the value.
341
341
  */
342
- function toString$1(obj) {
342
+ function toString(obj) {
343
343
  if (obj?.toString) {
344
344
  // Arrays might hold objects with "null" prototype So using
345
345
  // Array.prototype.toString directly will cause an error Iterate through
@@ -355,13 +355,13 @@ function toString$1(obj) {
355
355
  // 4. Array#toString converts recursive references to arrays to ''
356
356
  // Ex: arr = [1]; arr.push(arr, 2); arr.toString() === '1,,2'; toString(arr) throws
357
357
  // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString
358
- return ArrayJoin.call(ArrayMap.call(obj, toString$1), ',');
358
+ return ArrayJoin.call(ArrayMap.call(obj, toString), ',');
359
359
  }
360
360
  return obj.toString();
361
361
  }
362
362
  else if (typeof obj === 'object') {
363
363
  // This catches null and returns "[object Null]". Weird, but kept for backwards compatibility.
364
- return OtS$1.call(obj);
364
+ return OtS.call(obj);
365
365
  }
366
366
  else {
367
367
  return String(obj);
@@ -461,43 +461,6 @@ const { AriaAttrNameToPropNameMap, AriaPropNameToAttrNameMap } = /*@__PURE__*/ (
461
461
  function isAriaAttribute(attrName) {
462
462
  return attrName in AriaAttrNameToPropNameMap;
463
463
  }
464
- // This list is based on https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes
465
- const GLOBAL_ATTRIBUTE = /*@__PURE__*/ new Set([
466
- 'accesskey',
467
- 'autocapitalize',
468
- 'autofocus',
469
- 'class',
470
- 'contenteditable',
471
- 'dir',
472
- 'draggable',
473
- 'enterkeyhint',
474
- 'exportparts',
475
- 'hidden',
476
- 'id',
477
- 'inputmode',
478
- 'is',
479
- 'itemid',
480
- 'itemprop',
481
- 'itemref',
482
- 'itemscope',
483
- 'itemtype',
484
- 'lang',
485
- 'nonce',
486
- 'part',
487
- 'slot',
488
- 'spellcheck',
489
- 'style',
490
- 'tabindex',
491
- 'title',
492
- 'translate',
493
- ]);
494
- /**
495
- *
496
- * @param attrName
497
- */
498
- function isGlobalHtmlAttribute(attrName) {
499
- return GLOBAL_ATTRIBUTE.has(attrName);
500
- }
501
464
  // These are HTML standard prop/attribute IDL mappings, but are not predictable based on camel/kebab-case conversion
502
465
  const SPECIAL_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map([
503
466
  ['accessKey', 'accesskey'],
@@ -517,6 +480,21 @@ const SPECIAL_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map([
517
480
  ['useMap', 'usemap'],
518
481
  ['htmlFor', 'for'],
519
482
  ]);
483
+ // Global properties that this framework currently reflects. For CSR, the native
484
+ // descriptors for these properties are added from HTMLElement.prototype to
485
+ // LightningElement.prototype. For SSR, in order to match CSR behavior, this
486
+ // list is used to determine which attributes to reflect.
487
+ const REFLECTIVE_GLOBAL_PROPERTY_SET = /*@__PURE__@*/ new Set([
488
+ 'accessKey',
489
+ 'dir',
490
+ 'draggable',
491
+ 'hidden',
492
+ 'id',
493
+ 'lang',
494
+ 'spellcheck',
495
+ 'tabIndex',
496
+ 'title',
497
+ ]);
520
498
  /**
521
499
  * Map associating previously transformed HTML property into HTML attribute.
522
500
  */
@@ -653,7 +631,7 @@ function setHooks(hooks) {
653
631
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
654
632
  */
655
633
  const DEFAULT_SSR_MODE = 'sync';
656
- /** version: 8.12.0 */
634
+ /** version: 8.12.2 */
657
635
 
658
636
  /*
659
637
  * Copyright (c) 2024, Salesforce, Inc.
@@ -737,18 +715,6 @@ class ClassList {
737
715
  const { isArray } = Array;
738
716
  const { prototype: ObjectDotPrototype, getPrototypeOf, create: ObjectCreate, defineProperty: ObjectDefineProperty, isExtensible, getOwnPropertyDescriptor, getOwnPropertyNames, getOwnPropertySymbols, preventExtensions, hasOwnProperty, } = Object;
739
717
  const { push: ArrayPush, concat: ArrayConcat } = Array.prototype;
740
- const OtS = {}.toString;
741
- function toString(obj) {
742
- if (obj && obj.toString) {
743
- return obj.toString();
744
- }
745
- else if (typeof obj === 'object') {
746
- return OtS.call(obj);
747
- }
748
- else {
749
- return obj + '';
750
- }
751
- }
752
718
  function isUndefined(obj) {
753
719
  return obj === undefined;
754
720
  }
@@ -986,10 +952,6 @@ class ReactiveProxyHandler extends BaseProxyHandler {
986
952
  return true;
987
953
  }
988
954
  setPrototypeOf(shadowTarget, prototype) {
989
- /* istanbul ignore else */
990
- if (process.env.NODE_ENV !== 'production') {
991
- throw new Error(`Invalid setPrototypeOf invocation for reactive proxy ${toString(this.originalTarget)}. Prototype of reactive objects cannot be changed.`);
992
- }
993
955
  }
994
956
  preventExtensions(shadowTarget) {
995
957
  if (isExtensible(shadowTarget)) {
@@ -1053,147 +1015,31 @@ class ReadOnlyHandler extends BaseProxyHandler {
1053
1015
  if (!isUndefined(wrappedSetter)) {
1054
1016
  return wrappedSetter;
1055
1017
  }
1056
- const handler = this;
1057
1018
  const set = function (v) {
1058
- /* istanbul ignore else */
1059
- if (process.env.NODE_ENV !== 'production') {
1060
- const { originalTarget } = handler;
1061
- throw new Error(`Invalid mutation: Cannot invoke a setter on "${originalTarget}". "${originalTarget}" is read-only.`);
1062
- }
1063
1019
  };
1064
1020
  setterMap.set(originalSet, set);
1065
1021
  return set;
1066
1022
  }
1067
1023
  set(shadowTarget, key, value) {
1068
- /* istanbul ignore else */
1069
- if (process.env.NODE_ENV !== 'production') {
1070
- const { originalTarget } = this;
1071
- const msg = isArray(originalTarget)
1072
- ? `Invalid mutation: Cannot mutate array at index ${key.toString()}. Array is read-only.`
1073
- : `Invalid mutation: Cannot set "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`;
1074
- throw new Error(msg);
1075
- }
1076
1024
  /* istanbul ignore next */
1077
1025
  return false;
1078
1026
  }
1079
1027
  deleteProperty(shadowTarget, key) {
1080
- /* istanbul ignore else */
1081
- if (process.env.NODE_ENV !== 'production') {
1082
- const { originalTarget } = this;
1083
- throw new Error(`Invalid mutation: Cannot delete "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`);
1084
- }
1085
1028
  /* istanbul ignore next */
1086
1029
  return false;
1087
1030
  }
1088
1031
  setPrototypeOf(shadowTarget, prototype) {
1089
- /* istanbul ignore else */
1090
- if (process.env.NODE_ENV !== 'production') {
1091
- const { originalTarget } = this;
1092
- throw new Error(`Invalid prototype mutation: Cannot set prototype on "${originalTarget}". "${originalTarget}" prototype is read-only.`);
1093
- }
1094
1032
  }
1095
1033
  preventExtensions(shadowTarget) {
1096
- /* istanbul ignore else */
1097
- if (process.env.NODE_ENV !== 'production') {
1098
- const { originalTarget } = this;
1099
- throw new Error(`Invalid mutation: Cannot preventExtensions on ${originalTarget}". "${originalTarget} is read-only.`);
1100
- }
1101
1034
  /* istanbul ignore next */
1102
1035
  return false;
1103
1036
  }
1104
1037
  defineProperty(shadowTarget, key, descriptor) {
1105
- /* istanbul ignore else */
1106
- if (process.env.NODE_ENV !== 'production') {
1107
- const { originalTarget } = this;
1108
- throw new Error(`Invalid mutation: Cannot defineProperty "${key.toString()}" on "${originalTarget}". "${originalTarget}" is read-only.`);
1109
- }
1110
1038
  /* istanbul ignore next */
1111
1039
  return false;
1112
1040
  }
1113
1041
  }
1114
1042
 
1115
- function extract(objectOrArray) {
1116
- if (isArray(objectOrArray)) {
1117
- return objectOrArray.map((item) => {
1118
- const original = unwrap(item);
1119
- if (original !== item) {
1120
- return extract(original);
1121
- }
1122
- return item;
1123
- });
1124
- }
1125
- const obj = ObjectCreate(getPrototypeOf(objectOrArray));
1126
- const names = getOwnPropertyNames(objectOrArray);
1127
- return ArrayConcat.call(names, getOwnPropertySymbols(objectOrArray)).reduce((seed, key) => {
1128
- const item = objectOrArray[key];
1129
- const original = unwrap(item);
1130
- if (original !== item) {
1131
- seed[key] = extract(original);
1132
- }
1133
- else {
1134
- seed[key] = item;
1135
- }
1136
- return seed;
1137
- }, obj);
1138
- }
1139
- const formatter = {
1140
- header: (plainOrProxy) => {
1141
- const originalTarget = unwrap(plainOrProxy);
1142
- // if originalTarget is falsy or not unwrappable, exit
1143
- if (!originalTarget || originalTarget === plainOrProxy) {
1144
- return null;
1145
- }
1146
- const obj = extract(plainOrProxy);
1147
- return ['object', { object: obj }];
1148
- },
1149
- hasBody: () => {
1150
- return false;
1151
- },
1152
- body: () => {
1153
- return null;
1154
- },
1155
- };
1156
- // Inspired from paulmillr/es6-shim
1157
- // https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js#L176-L185
1158
- /* istanbul ignore next */
1159
- function getGlobal() {
1160
- // the only reliable means to get the global object is `Function('return this')()`
1161
- // However, this causes CSP violations in Chrome apps.
1162
- if (typeof globalThis !== 'undefined') {
1163
- return globalThis;
1164
- }
1165
- if (typeof self !== 'undefined') {
1166
- return self;
1167
- }
1168
- if (typeof window !== 'undefined') {
1169
- return window;
1170
- }
1171
- if (typeof global !== 'undefined') {
1172
- return global;
1173
- }
1174
- // Gracefully degrade if not able to locate the global object
1175
- return {};
1176
- }
1177
- function init() {
1178
- /* istanbul ignore if */
1179
- if (process.env.NODE_ENV === 'production') {
1180
- // this method should never leak to prod
1181
- throw new ReferenceError();
1182
- }
1183
- const global = getGlobal();
1184
- // Custom Formatter for Dev Tools. To enable this, open Chrome Dev Tools
1185
- // - Go to Settings,
1186
- // - Under console, select "Enable custom formatters"
1187
- // For more information, https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview
1188
- const devtoolsFormatters = global.devtoolsFormatters || [];
1189
- ArrayPush.call(devtoolsFormatters, formatter);
1190
- global.devtoolsFormatters = devtoolsFormatters;
1191
- }
1192
-
1193
- /* istanbul ignore else */
1194
- if (process.env.NODE_ENV !== 'production') {
1195
- init();
1196
- }
1197
1043
  function defaultValueIsObservable(value) {
1198
1044
  // intentionally checking for null
1199
1045
  if (value === null) {
@@ -1385,7 +1231,7 @@ function filterProperties(props, publicFields, privateFields) {
1385
1231
  keys(props).forEach((propName) => {
1386
1232
  const attrName = htmlPropertyToAttribute(propName);
1387
1233
  if (publicFieldSet.has(propName) ||
1388
- ((isGlobalHtmlAttribute(attrName) || isAriaAttribute(attrName)) &&
1234
+ ((REFLECTIVE_GLOBAL_PROPERTY_SET.has(propName) || isAriaAttribute(attrName)) &&
1389
1235
  !privateFieldSet.has(propName))) {
1390
1236
  propsToAssign[propName] = props[propName];
1391
1237
  }
@@ -1471,7 +1317,7 @@ const ariaDescriptor = (attrName) => ({
1471
1317
  this.removeAttribute(attrName);
1472
1318
  }
1473
1319
  else {
1474
- this.setAttribute(attrName, toString$1(newValue));
1320
+ this.setAttribute(attrName, toString(newValue));
1475
1321
  }
1476
1322
  }
1477
1323
  },
@@ -1489,7 +1335,7 @@ const tabIndexDescriptor = () => ({
1489
1335
  const num = Number(newValue);
1490
1336
  const normalizedValue = isFinite(num) ? String(Math.trunc(num)) : '0';
1491
1337
  if (normalizedValue !== currentValue) {
1492
- this.setAttribute('tabindex', toString$1(newValue));
1338
+ this.setAttribute('tabindex', toString(newValue));
1493
1339
  }
1494
1340
  },
1495
1341
  });
@@ -1548,24 +1394,24 @@ class LightningElement {
1548
1394
  return (__classPrivateFieldSet(this, _LightningElement_classList, new ClassList(this), "f"));
1549
1395
  }
1550
1396
  setAttribute(attrName, attrValue) {
1551
- const normalizedName = StringToLowerCase.call(toString$1(attrName));
1397
+ const normalizedName = StringToLowerCase.call(toString(attrName));
1552
1398
  const normalizedValue = String(attrValue);
1553
1399
  __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName] = normalizedValue;
1554
1400
  mutationTracker.add(this, normalizedName);
1555
1401
  }
1556
1402
  getAttribute(attrName) {
1557
- const normalizedName = StringToLowerCase.call(toString$1(attrName));
1403
+ const normalizedName = StringToLowerCase.call(toString(attrName));
1558
1404
  if (hasOwnProperty$1.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName)) {
1559
1405
  return __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
1560
1406
  }
1561
1407
  return null;
1562
1408
  }
1563
1409
  hasAttribute(attrName) {
1564
- const normalizedName = StringToLowerCase.call(toString$1(attrName));
1410
+ const normalizedName = StringToLowerCase.call(toString(attrName));
1565
1411
  return hasOwnProperty$1.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName);
1566
1412
  }
1567
1413
  removeAttribute(attrName) {
1568
- const normalizedName = StringToLowerCase.call(toString$1(attrName));
1414
+ const normalizedName = StringToLowerCase.call(toString(attrName));
1569
1415
  delete __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
1570
1416
  // Track mutations for removal of non-existing attributes
1571
1417
  mutationTracker.add(this, normalizedName);
@@ -1664,6 +1510,12 @@ function renderAttrsPrivate(instance, attrs, hostScopeToken, scopeToken) {
1664
1510
  let hasClassAttribute = false;
1665
1511
  for (const attrName of getOwnPropertyNames$1(attrs)) {
1666
1512
  let attrValue = attrs[attrName];
1513
+ // Backwards compatibility with historical patchStyleAttribute() behavior:
1514
+ // https://github.com/salesforce/lwc/blob/59e2c6c/packages/%40lwc/engine-core/src/framework/modules/computed-style-attr.ts#L40
1515
+ if (attrName === 'style' && (!isString(attrValue) || attrValue === '')) {
1516
+ // If the style attribute is invalid, we don't render it.
1517
+ continue;
1518
+ }
1667
1519
  if (isNull(attrValue) || isUndefined$1(attrValue)) {
1668
1520
  attrValue = '';
1669
1521
  }
@@ -1984,5 +1836,5 @@ exports.track = track;
1984
1836
  exports.unwrap = unwrap$1;
1985
1837
  exports.validateStyleTextContents = validateStyleTextContents;
1986
1838
  exports.wire = wire;
1987
- /** version: 8.12.0 */
1839
+ /** version: 8.12.2 */
1988
1840
  //# sourceMappingURL=index.cjs.js.map