@lwc/ssr-runtime 8.5.0 → 8.7.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -7,110 +7,217 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
9
9
  */
10
- const MULTI_SPACE = /\s+/g;
11
- class ClassList {
12
- constructor(el) {
13
- this.el = el;
14
- }
15
- add(...newClassNames) {
16
- const className = this.el.className;
17
- const set = new Set(className.split(MULTI_SPACE).filter(Boolean));
18
- for (const newClassName of newClassNames) {
19
- set.add(newClassName);
20
- }
21
- this.el.className = Array.from(set).join(' ');
22
- }
23
- contains(className) {
24
- const currentClassNameStr = this.el.className;
25
- return currentClassNameStr.split(MULTI_SPACE).includes(className);
26
- }
27
- remove(...classNamesToRemove) {
28
- const className = this.el.className;
29
- const set = new Set(className.split(MULTI_SPACE).filter(Boolean));
30
- for (const newClassName of classNamesToRemove) {
31
- set.delete(newClassName);
32
- }
33
- this.el.className = Array.from(set).join(' ');
34
- }
35
- replace(oldClassName, newClassName) {
36
- let classWasReplaced = false;
37
- const className = this.el.className;
38
- const listOfClasses = className.split(MULTI_SPACE).filter(Boolean);
39
- listOfClasses.forEach((value, idx) => {
40
- if (value === oldClassName) {
41
- classWasReplaced = true;
42
- listOfClasses[idx] = newClassName;
43
- }
44
- });
45
- this.el.className = listOfClasses.join(' ');
46
- return classWasReplaced;
47
- }
48
- toggle(classNameToToggle, force) {
49
- const classNameStr = this.el.className;
50
- const set = new Set(classNameStr.split(MULTI_SPACE).filter(Boolean));
51
- if (!set.has(classNameToToggle) && force !== false) {
52
- set.add(classNameToToggle);
53
- }
54
- else if (set.has(classNameToToggle) && force !== true) {
55
- set.delete(classNameToToggle);
56
- }
57
- this.el.className = Array.from(set).join(' ');
58
- return set.has(classNameToToggle);
59
- }
60
- get value() {
61
- return this.el.className;
62
- }
63
- toString() {
64
- return this.el.className;
65
- }
66
- item(_index) {
67
- throw new Error('Method "item" not implemented.');
68
- }
69
- supports(_token) {
70
- throw new Error('Method "supports" not implemented.');
71
- }
72
- forEach(_callbackfn, _thisArg) {
73
- throw new Error('Method "forEach" not implemented.');
74
- }
75
- get length() {
76
- throw new Error('Property "length" not implemented.');
77
- }
10
+ // Stubs for all the un-implemented exports from @lwc/engine-server
11
+ function api(..._) {
12
+ throw new Error('@api cannot be used in SSR context.');
78
13
  }
79
-
80
- /******************************************************************************
81
- Copyright (c) Microsoft Corporation.
82
-
83
- Permission to use, copy, modify, and/or distribute this software for any
84
- purpose with or without fee is hereby granted.
85
-
86
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
87
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
88
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
89
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
90
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
91
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
92
- PERFORMANCE OF THIS SOFTWARE.
93
- ***************************************************************************** */
94
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
95
-
96
-
97
- function __classPrivateFieldGet(receiver, state, kind, f) {
98
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
99
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
100
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
101
- }
102
-
103
- function __classPrivateFieldSet(receiver, state, value, kind, f) {
104
- if (kind === "m") throw new TypeError("Private method is not writable");
105
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
106
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
107
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
108
- }
109
-
110
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
111
- var e = new Error(message);
112
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
14
+ function createContextProvider(..._) {
15
+ throw new Error('createContextProvider cannot be used in SSR context.');
16
+ }
17
+ function createElement(..._) {
18
+ throw new Error('createElement cannot be used in SSR context.');
19
+ }
20
+ function freezeTemplate(..._) {
21
+ throw new Error('freezeTemplate cannot be used in SSR context.');
22
+ }
23
+ function getComponentDef(..._) {
24
+ throw new Error('getComponentDef cannot be used in SSR context.');
25
+ }
26
+ function isComponentConstructor(..._) {
27
+ throw new Error('isComponentConstructor cannot be used in SSR context.');
28
+ }
29
+ function parseFragment(..._) {
30
+ throw new Error('parseFragment cannot be used in SSR context.');
31
+ }
32
+ function parseSVGFragment(..._) {
33
+ throw new Error('parseSVGFragment cannot be used in SSR context.');
34
+ }
35
+ function readonly(..._) {
36
+ throw new Error('readonly cannot be used in SSR context.');
37
+ }
38
+ function registerComponent(..._) {
39
+ throw new Error('registerComponent cannot be used in SSR context.');
40
+ }
41
+ function registerDecorators(..._) {
42
+ throw new Error('registerDecorators cannot be used in SSR context.');
43
+ }
44
+ function registerTemplate(..._) {
45
+ throw new Error('registerTemplate cannot be used in SSR context.');
46
+ }
47
+ function sanitizeAttribute(..._) {
48
+ throw new Error('sanitizeAttribute cannot be used in SSR context.');
49
+ }
50
+ function setFeatureFlag(..._) {
51
+ throw new Error('setFeatureFlag cannot be used in SSR context.');
52
+ }
53
+ function setFeatureFlagForTest(..._) {
54
+ throw new Error('setFeatureFlagForTest cannot be used in SSR context.');
55
+ }
56
+ function swapComponent(..._) {
57
+ throw new Error('swapComponent cannot be used in SSR context.');
58
+ }
59
+ function swapStyle(..._) {
60
+ throw new Error('swapStyle cannot be used in SSR context.');
61
+ }
62
+ function swapTemplate(..._) {
63
+ throw new Error('swapTemplate cannot be used in SSR context.');
64
+ }
65
+ function track(..._) {
66
+ throw new Error('@track cannot be used in SSR context.');
67
+ }
68
+ function unwrap(..._) {
69
+ throw new Error('unwrap cannot be used in SSR context.');
70
+ }
71
+ function wire(..._) {
72
+ throw new Error('@wire cannot be used in SSR context.');
73
+ }
74
+ const renderer = {
75
+ isSyntheticShadowDefined: false,
76
+ insert(..._) {
77
+ throw new Error('renderer.insert cannot be used in SSR context.');
78
+ },
79
+ remove(..._) {
80
+ throw new Error('renderer.remove cannot be used in SSR context.');
81
+ },
82
+ cloneNode(..._) {
83
+ throw new Error('renderer.cloneNode cannot be used in SSR context.');
84
+ },
85
+ createFragment(..._) {
86
+ throw new Error('renderer.createFragment cannot be used in SSR context.');
87
+ },
88
+ createElement(..._) {
89
+ throw new Error('renderer.createElement cannot be used in SSR context.');
90
+ },
91
+ createText(..._) {
92
+ throw new Error('renderer.createText cannot be used in SSR context.');
93
+ },
94
+ createComment(..._) {
95
+ throw new Error('renderer.createComment cannot be used in SSR context.');
96
+ },
97
+ createCustomElement(..._) {
98
+ throw new Error('renderer.createCustomElement cannot be used in SSR context.');
99
+ },
100
+ nextSibling(..._) {
101
+ throw new Error('renderer.nextSibling cannot be used in SSR context.');
102
+ },
103
+ previousSibling(..._) {
104
+ throw new Error('renderer.previousSibling cannot be used in SSR context.');
105
+ },
106
+ attachShadow(..._) {
107
+ throw new Error('renderer.attachShadow cannot be used in SSR context.');
108
+ },
109
+ getProperty(..._) {
110
+ throw new Error('renderer.getProperty cannot be used in SSR context.');
111
+ },
112
+ setProperty(..._) {
113
+ throw new Error('renderer.setProperty cannot be used in SSR context.');
114
+ },
115
+ setText(..._) {
116
+ throw new Error('renderer.setText cannot be used in SSR context.');
117
+ },
118
+ getAttribute(..._) {
119
+ throw new Error('renderer.getAttribute cannot be used in SSR context.');
120
+ },
121
+ setAttribute(..._) {
122
+ throw new Error('renderer.setAttribute cannot be used in SSR context.');
123
+ },
124
+ removeAttribute(..._) {
125
+ throw new Error('renderer.removeAttribute cannot be used in SSR context.');
126
+ },
127
+ addEventListener(..._) {
128
+ throw new Error('renderer.addEventListener cannot be used in SSR context.');
129
+ },
130
+ removeEventListener(..._) {
131
+ throw new Error('renderer.removeEventListener cannot be used in SSR context.');
132
+ },
133
+ dispatchEvent(..._) {
134
+ throw new Error('renderer.dispatchEvent cannot be used in SSR context.');
135
+ },
136
+ getClassList(..._) {
137
+ throw new Error('renderer.getClassList cannot be used in SSR context.');
138
+ },
139
+ setCSSStyleProperty(..._) {
140
+ throw new Error('renderer.setCSSStyleProperty cannot be used in SSR context.');
141
+ },
142
+ getBoundingClientRect(..._) {
143
+ throw new Error('renderer.getBoundingClientRect cannot be used in SSR context.');
144
+ },
145
+ querySelector(..._) {
146
+ throw new Error('renderer.querySelector cannot be used in SSR context.');
147
+ },
148
+ querySelectorAll(..._) {
149
+ throw new Error('renderer.querySelectorAll cannot be used in SSR context.');
150
+ },
151
+ getElementsByTagName(..._) {
152
+ throw new Error('renderer.getElementsByTagName cannot be used in SSR context.');
153
+ },
154
+ getElementsByClassName(..._) {
155
+ throw new Error('renderer.getElementsByClassName cannot be used in SSR context.');
156
+ },
157
+ getChildren(..._) {
158
+ throw new Error('renderer.getChildren cannot be used in SSR context.');
159
+ },
160
+ getChildNodes(..._) {
161
+ throw new Error('renderer.getChildNodes cannot be used in SSR context.');
162
+ },
163
+ getFirstChild(..._) {
164
+ throw new Error('renderer.getFirstChild cannot be used in SSR context.');
165
+ },
166
+ getFirstElementChild(..._) {
167
+ throw new Error('renderer.getFirstElementChild cannot be used in SSR context.');
168
+ },
169
+ getLastChild(..._) {
170
+ throw new Error('renderer.getLastChild cannot be used in SSR context.');
171
+ },
172
+ getLastElementChild(..._) {
173
+ throw new Error('renderer.getLastElementChild cannot be used in SSR context.');
174
+ },
175
+ getTagName(..._) {
176
+ throw new Error('renderer.getTagName cannot be used in SSR context.');
177
+ },
178
+ getStyle(..._) {
179
+ throw new Error('renderer.getStyle cannot be used in SSR context.');
180
+ },
181
+ isConnected(..._) {
182
+ throw new Error('renderer.isConnected cannot be used in SSR context.');
183
+ },
184
+ insertStylesheet(..._) {
185
+ throw new Error('renderer.insertStylesheet cannot be used in SSR context.');
186
+ },
187
+ assertInstanceOfHTMLElement(..._) {
188
+ throw new Error('renderer.assertInstanceOfHTMLElement cannot be used in SSR context.');
189
+ },
190
+ ownerDocument(..._) {
191
+ throw new Error('renderer.ownerDocument cannot be used in SSR context.');
192
+ },
193
+ registerContextConsumer(..._) {
194
+ throw new Error('renderer.registerContextConsumer cannot be used in SSR context.');
195
+ },
196
+ attachInternals(..._) {
197
+ throw new Error('renderer.attachInternals cannot be used in SSR context.');
198
+ },
199
+ defineCustomElement(..._) {
200
+ throw new Error('renderer.defineCustomElement cannot be used in SSR context.');
201
+ },
202
+ getParentNode(..._) {
203
+ throw new Error('renderer.getParentNode cannot be used in SSR context.');
204
+ },
205
+ startTrackingMutations(..._) {
206
+ throw new Error('renderer.startTrackingMutations cannot be used in SSR context.');
207
+ },
208
+ stopTrackingMutations(..._) {
209
+ throw new Error('renderer.stopTrackingMutations cannot be used in SSR context.');
210
+ },
113
211
  };
212
+ /**
213
+ * The hot API is used to orchestrate hot swapping in client rendered components.
214
+ * It doesn't do anything on the server side, however, you may import it.
215
+ *
216
+ * The whole point of defining this and exporting it is so that you can import it in isomorphic code without
217
+ * an error being thrown by the import itself.
218
+ */
219
+ // A real stub, not a "not implemented" one! 😯
220
+ const hot = undefined;
114
221
 
115
222
  /**
116
223
  * Copyright (c) 2024 Salesforce, Inc.
@@ -126,6 +233,16 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
126
233
  * @param value
127
234
  * @param msg
128
235
  */
236
+ /**
237
+ *
238
+ * @param value
239
+ * @param msg
240
+ */
241
+ function isFalse$1(value, msg) {
242
+ if (value) {
243
+ throw new Error(`Assert Violation: ${msg}`);
244
+ }
245
+ }
129
246
 
130
247
  /*
131
248
  * Copyright (c) 2024, Salesforce, Inc.
@@ -178,8 +295,18 @@ from: ArrayFrom, } = Array;
178
295
  // statement, rather than this declaration.
179
296
  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!
180
297
  } = Array.prototype;
298
+ /** Detached {@linkcode String.fromCharCode}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode MDN Reference}. */
299
+ const { fromCharCode: StringFromCharCode } = String;
181
300
  // No JSDocs here - see comment for Array.prototype
182
301
  const { charAt: StringCharAt, charCodeAt: StringCharCodeAt, replace: StringReplace, split: StringSplit, slice: StringSlice, toLowerCase: StringToLowerCase, trim: StringTrim, } = String.prototype;
302
+ /**
303
+ * Determines whether the argument is `undefined`.
304
+ * @param obj Value to test
305
+ * @returns `true` if the value is `undefined`.
306
+ */
307
+ function isUndefined(obj) {
308
+ return obj === undefined;
309
+ }
183
310
  /**
184
311
  * Determines whether the argument is `null`.
185
312
  * @param obj Value to test
@@ -188,6 +315,14 @@ const { charAt: StringCharAt, charCodeAt: StringCharCodeAt, replace: StringRepla
188
315
  function isNull(obj) {
189
316
  return obj === null;
190
317
  }
318
+ /**
319
+ * Determines whether the argument is an object or null.
320
+ * @param obj Value to test
321
+ * @returns `true` if the value is an object or null.
322
+ */
323
+ function isObject(obj) {
324
+ return typeof obj === 'object';
325
+ }
191
326
  const OtS = {}.toString;
192
327
  /**
193
328
  * Converts the argument to a string, safely accounting for objects with "null" prototype.
@@ -302,442 +437,325 @@ const { AriaAttrNameToPropNameMap, AriaPropNameToAttrNameMap } = /*@__PURE__*/ (
302
437
  // Synthetic creation of all AOM property descriptors for Custom Elements
303
438
  forEach.call(AriaPropertyNames, (propName) => {
304
439
  const attrName = StringToLowerCase.call(StringReplace.call(propName, /^aria/, () => 'aria-'));
440
+ // These type assertions are because the map types are a 1:1 mapping of ariaX to aria-x.
441
+ // TypeScript knows we have one of ariaX | ariaY and one of aria-x | aria-y, and tries to
442
+ // prevent us from doing ariaX: aria-y, but we that it's safe.
305
443
  AriaAttrNameToPropNameMap[attrName] = propName;
306
444
  AriaPropNameToAttrNameMap[propName] = attrName;
307
445
  });
308
446
  return { AriaAttrNameToPropNameMap, AriaPropNameToAttrNameMap };
309
447
  })();
310
-
311
- /*
312
- * Copyright (c) 2020, salesforce.com, inc.
313
- * All rights reserved.
314
- * SPDX-License-Identifier: MIT
315
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
316
- */
317
- const ESCAPED_CHARS = {
318
- '"': '"',
319
- "'": ''',
320
- '<': '&lt;',
321
- '>': '&gt;',
322
- '&': '&amp;',
323
- };
324
448
  /**
325
449
  *
326
- * @param str
327
- * @param attrMode
328
- */
329
- function htmlEscape(str, attrMode = false) {
330
- const searchValue = attrMode ? /["&]/g : /["'<>&]/g;
331
- return str.replace(searchValue, (char) => ESCAPED_CHARS[char]);
332
- }
333
- function flattenStylesheets(stylesheets) {
334
- const list = [];
335
- for (const stylesheet of stylesheets) {
336
- if (!isArray(stylesheet)) {
337
- list.push(stylesheet);
338
- }
339
- else {
340
- list.push(...flattenStylesheets(stylesheet));
341
- }
342
- }
343
- return list;
344
- }
345
- /** version: 8.5.0 */
346
-
347
- /*
348
- * Copyright (c) 2024, Salesforce, Inc.
349
- * All rights reserved.
350
- * SPDX-License-Identifier: MIT
351
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
450
+ * @param attrName
352
451
  */
353
- var _MutationTracker_enabledSet, _MutationTracker_mutationMap;
354
- class MutationTracker {
355
- constructor() {
356
- _MutationTracker_enabledSet.set(this, new WeakSet());
357
- _MutationTracker_mutationMap.set(this, new WeakMap());
358
- }
359
- add(instance, attrName) {
360
- if (__classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").has(instance)) {
361
- let mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
362
- if (!mutatedAttrs) {
363
- mutatedAttrs = new Set();
364
- __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").set(instance, mutatedAttrs);
365
- }
366
- mutatedAttrs.add(attrName.toLowerCase());
367
- }
368
- }
369
- enable(instance) {
370
- __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").add(instance);
371
- }
372
- disable(instance) {
373
- __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").delete(instance);
374
- }
375
- renderMutatedAttrs(instance) {
376
- const mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
377
- if (mutatedAttrs) {
378
- return ` data-lwc-host-mutated="${[...mutatedAttrs].sort().join(' ')}"`;
379
- }
380
- else {
381
- return '';
382
- }
383
- }
452
+ function isAriaAttribute(attrName) {
453
+ return attrName in AriaAttrNameToPropNameMap;
384
454
  }
385
- _MutationTracker_enabledSet = new WeakMap(), _MutationTracker_mutationMap = new WeakMap();
386
- const mutationTracker = new MutationTracker();
387
-
388
- /*
389
- * Copyright (c) 2024, Salesforce, Inc.
390
- * All rights reserved.
391
- * SPDX-License-Identifier: MIT
392
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
393
- */
394
- /**
395
- * Map of global attribute or ARIA attribute to the corresponding property name.
396
- * Not all global attributes are included, just those from `HTMLElementTheGoodParts`.
397
- */
398
- const attrsToProps = assign(create(null), {
399
- accesskey: 'accessKey',
400
- dir: 'dir',
401
- draggable: 'draggable',
402
- hidden: 'hidden',
403
- id: 'id',
404
- lang: 'lang',
405
- spellcheck: 'spellcheck',
406
- tabindex: 'tabIndex',
407
- title: 'title',
408
- ...AriaAttrNameToPropNameMap,
409
- });
455
+ // This list is based on https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes
456
+ const GLOBAL_ATTRIBUTE = /*@__PURE__*/ new Set([
457
+ 'accesskey',
458
+ 'autocapitalize',
459
+ 'autofocus',
460
+ 'class',
461
+ 'contenteditable',
462
+ 'contextmenu',
463
+ 'dir',
464
+ 'draggable',
465
+ 'enterkeyhint',
466
+ 'exportparts',
467
+ 'hidden',
468
+ 'id',
469
+ 'inputmode',
470
+ 'is',
471
+ 'itemid',
472
+ 'itemprop',
473
+ 'itemref',
474
+ 'itemscope',
475
+ 'itemtype',
476
+ 'lang',
477
+ 'nonce',
478
+ 'part',
479
+ 'slot',
480
+ 'spellcheck',
481
+ 'style',
482
+ 'tabindex',
483
+ 'title',
484
+ 'translate',
485
+ ]);
410
486
  /**
411
- * Descriptor for IDL attribute reflections that merely reflect the string, e.g. `title`.
487
+ *
488
+ * @param attrName
412
489
  */
413
- const stringDescriptor = (attrName) => ({
414
- configurable: true,
415
- enumerable: true,
416
- get() {
417
- return this.getAttribute(attrName);
418
- },
419
- set(newValue) {
420
- const currentValue = this.getAttribute(attrName);
421
- const normalizedValue = String(newValue);
422
- if (normalizedValue !== currentValue) {
423
- this.setAttribute(attrName, normalizedValue);
424
- }
425
- },
426
- });
427
- /** Descriptor for a boolean that checks for `attr="true"` or `attr="false"`, e.g. `spellcheck` and `draggable`. */
428
- const explicitBooleanDescriptor = (attrName, defaultValue) => ({
429
- configurable: true,
430
- enumerable: true,
431
- get() {
432
- const value = this.getAttribute(attrName);
433
- return value === null ? defaultValue : value === String(defaultValue);
434
- },
435
- set(newValue) {
436
- const currentValue = this.getAttribute(attrName);
437
- const normalizedValue = String(Boolean(newValue));
438
- if (normalizedValue !== currentValue) {
439
- this.setAttribute(attrName, normalizedValue);
440
- }
441
- },
442
- });
490
+ function isGlobalHtmlAttribute(attrName) {
491
+ return GLOBAL_ATTRIBUTE.has(attrName);
492
+ }
493
+ // These are HTML standard prop/attribute IDL mappings, but are not predictable based on camel/kebab-case conversion
494
+ const SPECIAL_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map([
495
+ ['accessKey', 'accesskey'],
496
+ ['readOnly', 'readonly'],
497
+ ['tabIndex', 'tabindex'],
498
+ ['bgColor', 'bgcolor'],
499
+ ['colSpan', 'colspan'],
500
+ ['rowSpan', 'rowspan'],
501
+ ['contentEditable', 'contenteditable'],
502
+ ['crossOrigin', 'crossorigin'],
503
+ ['dateTime', 'datetime'],
504
+ ['formAction', 'formaction'],
505
+ ['isMap', 'ismap'],
506
+ ['maxLength', 'maxlength'],
507
+ ['minLength', 'minlength'],
508
+ ['noValidate', 'novalidate'],
509
+ ['useMap', 'usemap'],
510
+ ['htmlFor', 'for'],
511
+ ]);
443
512
  /**
444
- * Descriptor for a "true" boolean attribute that checks solely for presence, e.g. `hidden`.
513
+ * Map associating previously transformed HTML property into HTML attribute.
445
514
  */
446
- const booleanAttributeDescriptor = (attrName) => ({
447
- configurable: true,
448
- enumerable: true,
449
- get() {
450
- return this.hasAttribute(attrName);
451
- },
452
- set(newValue) {
453
- const hasAttribute = this.hasAttribute(attrName);
454
- if (newValue) {
455
- if (!hasAttribute) {
456
- this.setAttribute(attrName, '');
457
- }
458
- }
459
- else {
460
- if (hasAttribute) {
461
- this.removeAttribute(attrName);
462
- }
463
- }
464
- },
465
- });
515
+ const CACHED_PROPERTY_ATTRIBUTE_MAPPING = /*@__PURE__@*/ new Map();
466
516
  /**
467
- * Descriptor for ARIA reflections, e.g. `ariaLabel` and `role`.
517
+ *
518
+ * @param propName
468
519
  */
469
- const ariaDescriptor = (attrName) => ({
470
- configurable: true,
471
- enumerable: true,
472
- get() {
473
- return this.getAttribute(attrName);
474
- },
475
- set(newValue) {
476
- const currentValue = this.getAttribute(attrName);
477
- if (newValue !== currentValue) {
478
- // TODO [#3284]: According to the spec, IDL nullable type values
479
- // (null and undefined) should remove the attribute; however, we
480
- // only do so in the case of null for historical reasons.
481
- if (isNull(newValue)) {
482
- this.removeAttribute(attrName);
483
- }
484
- else {
485
- this.setAttribute(attrName, toString(newValue));
486
- }
520
+ function htmlPropertyToAttribute(propName) {
521
+ const ariaAttributeName = AriaPropNameToAttrNameMap[propName];
522
+ if (!isUndefined(ariaAttributeName)) {
523
+ return ariaAttributeName;
524
+ }
525
+ const specialAttributeName = SPECIAL_PROPERTY_ATTRIBUTE_MAPPING.get(propName);
526
+ if (!isUndefined(specialAttributeName)) {
527
+ return specialAttributeName;
528
+ }
529
+ const cachedAttributeName = CACHED_PROPERTY_ATTRIBUTE_MAPPING.get(propName);
530
+ if (!isUndefined(cachedAttributeName)) {
531
+ return cachedAttributeName;
532
+ }
533
+ let attributeName = '';
534
+ for (let i = 0, len = propName.length; i < len; i++) {
535
+ const code = StringCharCodeAt.call(propName, i);
536
+ if (code >= 65 && // "A"
537
+ code <= 90 // "Z"
538
+ ) {
539
+ attributeName += '-' + StringFromCharCode(code + 32);
487
540
  }
488
- },
489
- });
490
- function reflectAttrToProp(instance, attrName, attrValue) {
491
- const reflectedPropName = attrsToProps[attrName];
492
- // If it is a reflected property and it was not overridden by the instance
493
- if (reflectedPropName && !hasOwnProperty.call(instance, reflectedPropName)) {
494
- const currentValue = instance[reflectedPropName];
495
- if (currentValue !== attrValue) {
496
- instance[reflectedPropName] = attrValue;
541
+ else {
542
+ attributeName += StringFromCharCode(code);
497
543
  }
498
544
  }
545
+ CACHED_PROPERTY_ATTRIBUTE_MAPPING.set(propName, attributeName);
546
+ return attributeName;
499
547
  }
500
- const descriptors = {
501
- accessKey: stringDescriptor('accesskey'),
502
- dir: stringDescriptor('dir'),
503
- draggable: explicitBooleanDescriptor('draggable', true),
504
- hidden: booleanAttributeDescriptor('hidden'),
505
- id: stringDescriptor('id'),
506
- lang: stringDescriptor('lang'),
507
- spellcheck: explicitBooleanDescriptor('spellcheck', false),
508
- tabIndex: {
509
- get() {
510
- const str = this.getAttribute('tabindex');
511
- const num = Number(str);
512
- return isFinite(num) ? Math.trunc(num) : -1;
513
- },
514
- set(newValue) {
515
- const currentValue = this.getAttribute('tabindex');
516
- const num = Number(newValue);
517
- const normalizedValue = isFinite(num) ? String(Math.trunc(num)) : '0';
518
- if (normalizedValue !== currentValue) {
519
- this.setAttribute('tabindex', toString(newValue));
520
- }
521
- },
522
- },
523
- title: stringDescriptor('title'),
548
+
549
+ /*
550
+ * Copyright (c) 2020, salesforce.com, inc.
551
+ * All rights reserved.
552
+ * SPDX-License-Identifier: MIT
553
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
554
+ */
555
+ const ESCAPED_CHARS = {
556
+ '"': '&quot;',
557
+ "'": '&#x27;',
558
+ '<': '&lt;',
559
+ '>': '&gt;',
560
+ '&': '&amp;',
524
561
  };
525
- // Add descriptors for ARIA attributes
526
- for (const [attrName, propName] of entries(AriaAttrNameToPropNameMap)) {
527
- descriptors[propName] = ariaDescriptor(attrName);
562
+ /**
563
+ *
564
+ * @param str
565
+ * @param attrMode
566
+ */
567
+ function htmlEscape(str, attrMode = false) {
568
+ const searchValue = attrMode ? /["&]/g : /["'<>&]/g;
569
+ return str.replace(searchValue, (char) => ESCAPED_CHARS[char]);
528
570
  }
529
571
 
530
572
  /*
531
- * Copyright (c) 2024, salesforce.com, inc.
573
+ * Copyright (c) 2024, Salesforce, Inc.
532
574
  * All rights reserved.
533
575
  * SPDX-License-Identifier: MIT
534
576
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
535
577
  */
536
- var _LightningElement_attrs, _LightningElement_classList;
537
- const SYMBOL__SET_INTERNALS = Symbol('set-internals');
538
- const SYMBOL__GENERATE_MARKUP = Symbol('generate-markup');
539
- class LightningElement {
540
- constructor(propsAvailableAtConstruction) {
541
- this.isConnected = false;
542
- this.className = '';
543
- _LightningElement_attrs.set(this, void 0);
544
- _LightningElement_classList.set(this, null);
545
- assign(this, propsAvailableAtConstruction);
546
- }
547
- [(_LightningElement_attrs = new WeakMap(), _LightningElement_classList = new WeakMap(), SYMBOL__SET_INTERNALS)](props, attrs) {
548
- __classPrivateFieldSet(this, _LightningElement_attrs, attrs, "f");
549
- assign(this, props);
550
- defineProperty(this, 'className', {
551
- get() {
552
- return props.class ?? '';
553
- },
554
- set(newVal) {
555
- props.class = newVal;
556
- attrs.class = newVal;
557
- mutationTracker.add(this, 'class');
558
- },
559
- });
560
- }
561
- get classList() {
562
- if (__classPrivateFieldGet(this, _LightningElement_classList, "f")) {
563
- return __classPrivateFieldGet(this, _LightningElement_classList, "f");
564
- }
565
- return (__classPrivateFieldSet(this, _LightningElement_classList, new ClassList(this), "f"));
566
- }
567
- setAttribute(attrName, attrValue) {
568
- const normalizedName = StringToLowerCase.call(toString(attrName));
569
- const normalizedValue = String(attrValue);
570
- __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName] = normalizedValue;
571
- reflectAttrToProp(this, normalizedName, normalizedValue);
572
- mutationTracker.add(this, normalizedName);
573
- }
574
- getAttribute(attrName) {
575
- const normalizedName = StringToLowerCase.call(toString(attrName));
576
- if (hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName)) {
577
- return __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
578
- }
579
- return null;
580
- }
581
- hasAttribute(attrName) {
582
- const normalizedName = StringToLowerCase.call(toString(attrName));
583
- return hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName);
584
- }
585
- removeAttribute(attrName) {
586
- const normalizedName = StringToLowerCase.call(toString(attrName));
587
- delete __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
588
- reflectAttrToProp(this, normalizedName, null);
589
- // Track mutations for removal of non-existing attributes
590
- mutationTracker.add(this, normalizedName);
591
- }
592
- addEventListener(_type, _listener, _options) {
593
- // noop
594
- }
595
- removeEventListener(_type, _listener, _options) {
596
- // noop
597
- }
598
- // ----------------------------------------------------------- //
599
- // Props/methods explicitly not available in this environment //
600
- // Getters are named "get*" for parity with @lwc/engine-server //
601
- // ----------------------------------------------------------- //
602
- get children() {
603
- throw new TypeError('"getChildren" is not supported in this environment');
604
- }
605
- get childNodes() {
606
- throw new TypeError('"getChildNodes" is not supported in this environment');
607
- }
608
- get firstChild() {
609
- throw new TypeError('"getFirstChild" is not supported in this environment');
610
- }
611
- get firstElementChild() {
612
- throw new TypeError('"getFirstElementChild" is not supported in this environment');
613
- }
614
- get hostElement() {
615
- // Intentionally different to match @lwc/engine-*core*
616
- throw new TypeError('this.hostElement is not supported in this environment');
617
- }
618
- get lastChild() {
619
- throw new TypeError('"getLastChild" is not supported in this environment');
620
- }
621
- get lastElementChild() {
622
- throw new TypeError('"getLastElementChild" is not supported in this environment');
623
- }
624
- get ownerDocument() {
625
- // Intentionally not "get*" to match @lwc/engine-server
626
- throw new TypeError('"ownerDocument" is not supported in this environment');
627
- }
628
- get style() {
629
- // Intentionally not "get*" to match @lwc/engine-server
630
- throw new TypeError('"style" is not supported in this environment');
631
- }
632
- attachInternals() {
633
- throw new TypeError('"attachInternals" is not supported in this environment');
634
- }
635
- dispatchEvent(_event) {
636
- throw new TypeError('"dispatchEvent" is not supported in this environment');
637
- }
638
- getBoundingClientRect() {
639
- throw new TypeError('"getBoundingClientRect" is not supported in this environment');
640
- }
641
- getElementsByClassName(_classNames) {
642
- throw new TypeError('"getElementsByClassName" is not supported in this environment');
643
- }
644
- getElementsByTagName(_qualifiedName) {
645
- throw new TypeError('"getElementsByTagName" is not supported in this environment');
646
- }
647
- querySelector(_selectors) {
648
- throw new TypeError('"querySelector" is not supported in this environment');
649
- }
650
- querySelectorAll(_selectors) {
651
- throw new TypeError('"querySelectorAll" is not supported in this environment');
652
- }
653
- getAttributeNS(_namespace, _localName) {
654
- throw new Error('Method "getAttributeNS" not implemented.');
655
- }
656
- hasAttributeNS(_namespace, _localName) {
657
- throw new Error('Method "hasAttributeNS" not implemented.');
658
- }
659
- removeAttributeNS(_namespace, _localName) {
660
- throw new Error('Method "removeAttributeNS" not implemented.');
661
- }
662
- setAttributeNS(_namespace, _qualifiedName, _value) {
663
- throw new Error('Method "setAttributeNS" not implemented.');
578
+ let hooksAreSet = false;
579
+ /**
580
+ * EXPERIMENTAL: This function acts like a hook for Lightning Locker Service and other similar
581
+ * libraries to sanitize HTML content. This hook process the content passed via the template to
582
+ * lwc:inner-html directive.
583
+ * It is meant to be overridden via `setHooks`; it throws an error by default.
584
+ */
585
+ let sanitizeHtmlContent = () => {
586
+ // locker-service patches this function during runtime to sanitize HTML content.
587
+ throw new Error('sanitizeHtmlContent hook must be implemented.');
588
+ };
589
+ function setHooks(hooks) {
590
+ isFalse$1(hooksAreSet, 'Hooks are already overridden, only one definition is allowed.');
591
+ hooksAreSet = true;
592
+ sanitizeHtmlContent = hooks.sanitizeHtmlContent;
593
+ }
594
+ function flattenStylesheets(stylesheets) {
595
+ const list = [];
596
+ for (const stylesheet of stylesheets) {
597
+ if (!isArray(stylesheet)) {
598
+ list.push(stylesheet);
599
+ }
600
+ else {
601
+ list.push(...flattenStylesheets(stylesheet));
602
+ }
664
603
  }
604
+ return list;
665
605
  }
666
- defineProperties(LightningElement.prototype, descriptors);
606
+ /** version: 8.7.0 */
667
607
 
668
608
  /*
669
- * Copyright (c) 2024, salesforce.com, inc.
609
+ * Copyright (c) 2024, Salesforce, Inc.
670
610
  * All rights reserved.
671
611
  * SPDX-License-Identifier: MIT
672
612
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
673
613
  */
674
- const escapeAttrVal = (attrVal) => attrVal.replaceAll('&', '&amp;').replaceAll('"', '&quot;');
675
- function* renderAttrs(instance, attrs) {
676
- if (!attrs) {
677
- return;
614
+ const MULTI_SPACE = /\s+/g;
615
+ class ClassList {
616
+ constructor(el) {
617
+ this.el = el;
678
618
  }
679
- for (const attrName of Object.getOwnPropertyNames(attrs)) {
680
- const attrVal = attrs[attrName];
681
- if (typeof attrVal === 'string') {
682
- yield attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`;
619
+ add(...newClassNames) {
620
+ const className = this.el.className;
621
+ const set = new Set(className.split(MULTI_SPACE).filter(Boolean));
622
+ for (const newClassName of newClassNames) {
623
+ set.add(newClassName);
683
624
  }
684
- else if (attrVal === null) {
685
- yield '';
625
+ this.el.className = Array.from(set).join(' ');
626
+ }
627
+ contains(className) {
628
+ const currentClassNameStr = this.el.className;
629
+ return currentClassNameStr.split(MULTI_SPACE).includes(className);
630
+ }
631
+ remove(...classNamesToRemove) {
632
+ const className = this.el.className;
633
+ const set = new Set(className.split(MULTI_SPACE).filter(Boolean));
634
+ for (const newClassName of classNamesToRemove) {
635
+ set.delete(newClassName);
686
636
  }
637
+ this.el.className = Array.from(set).join(' ');
687
638
  }
688
- yield mutationTracker.renderMutatedAttrs(instance);
689
- }
690
- function renderAttrsNoYield(emit, instance, attrs) {
691
- if (!attrs) {
692
- return;
639
+ replace(oldClassName, newClassName) {
640
+ let classWasReplaced = false;
641
+ const className = this.el.className;
642
+ const listOfClasses = className.split(MULTI_SPACE).filter(Boolean);
643
+ listOfClasses.forEach((value, idx) => {
644
+ if (value === oldClassName) {
645
+ classWasReplaced = true;
646
+ listOfClasses[idx] = newClassName;
647
+ }
648
+ });
649
+ this.el.className = listOfClasses.join(' ');
650
+ return classWasReplaced;
693
651
  }
694
- for (const attrName of Object.getOwnPropertyNames(attrs)) {
695
- const attrVal = attrs[attrName];
696
- if (typeof attrVal === 'string') {
697
- emit(attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`);
652
+ toggle(classNameToToggle, force) {
653
+ const classNameStr = this.el.className;
654
+ const set = new Set(classNameStr.split(MULTI_SPACE).filter(Boolean));
655
+ if (!set.has(classNameToToggle) && force !== false) {
656
+ set.add(classNameToToggle);
698
657
  }
699
- else if (attrVal === null) {
700
- emit('');
658
+ else if (set.has(classNameToToggle) && force !== true) {
659
+ set.delete(classNameToToggle);
701
660
  }
661
+ this.el.className = Array.from(set).join(' ');
662
+ return set.has(classNameToToggle);
702
663
  }
703
- emit(mutationTracker.renderMutatedAttrs(instance));
704
- }
705
- function* fallbackTmpl(_props, _attrs, _slotted, Cmp, _instance) {
706
- if (Cmp.renderMode !== 'light') {
707
- yield '<template shadowrootmode="open"></template>';
664
+ get value() {
665
+ return this.el.className;
708
666
  }
709
- }
710
- function fallbackTmplNoYield(emit, _props, _attrs, _slotted, Cmp, _instance) {
711
- if (Cmp.renderMode !== 'light') {
712
- emit('<template shadowrootmode="open"></template>');
667
+ toString() {
668
+ return this.el.className;
669
+ }
670
+ item(_index) {
671
+ throw new Error('Method "item" not implemented.');
672
+ }
673
+ supports(_token) {
674
+ throw new Error('Method "supports" not implemented.');
675
+ }
676
+ forEach(_callbackfn, _thisArg) {
677
+ throw new Error('Method "forEach" not implemented.');
678
+ }
679
+ get length() {
680
+ throw new Error('Property "length" not implemented.');
713
681
  }
714
682
  }
715
- async function serverSideRenderComponent(tagName, Component, props = {}, mode = 'asyncYield') {
716
- if (typeof tagName !== 'string') {
717
- throw new Error(`tagName must be a string, found: ${tagName}`);
683
+
684
+ /******************************************************************************
685
+ Copyright (c) Microsoft Corporation.
686
+
687
+ Permission to use, copy, modify, and/or distribute this software for any
688
+ purpose with or without fee is hereby granted.
689
+
690
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
691
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
692
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
693
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
694
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
695
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
696
+ PERFORMANCE OF THIS SOFTWARE.
697
+ ***************************************************************************** */
698
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
699
+
700
+
701
+ function __classPrivateFieldGet(receiver, state, kind, f) {
702
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
703
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
704
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
705
+ }
706
+
707
+ function __classPrivateFieldSet(receiver, state, value, kind, f) {
708
+ if (kind === "m") throw new TypeError("Private method is not writable");
709
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
710
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
711
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
712
+ }
713
+
714
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
715
+ var e = new Error(message);
716
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
717
+ };
718
+
719
+ /*
720
+ * Copyright (c) 2024, Salesforce, Inc.
721
+ * All rights reserved.
722
+ * SPDX-License-Identifier: MIT
723
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
724
+ */
725
+ var _MutationTracker_enabledSet, _MutationTracker_mutationMap;
726
+ class MutationTracker {
727
+ constructor() {
728
+ _MutationTracker_enabledSet.set(this, new WeakSet());
729
+ _MutationTracker_mutationMap.set(this, new WeakMap());
718
730
  }
719
- // TODO [#4726]: remove `generateMarkup` export
720
- const generateMarkup = SYMBOL__GENERATE_MARKUP in Component ? Component[SYMBOL__GENERATE_MARKUP] : Component;
721
- let markup = '';
722
- const emit = (segment) => {
723
- markup += segment;
724
- };
725
- if (mode === 'asyncYield') {
726
- for await (const segment of generateMarkup(tagName, props, null, null)) {
727
- markup += segment;
731
+ add(instance, attrName) {
732
+ if (__classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").has(instance)) {
733
+ let mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
734
+ if (!mutatedAttrs) {
735
+ mutatedAttrs = new Set();
736
+ __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").set(instance, mutatedAttrs);
737
+ }
738
+ mutatedAttrs.add(attrName.toLowerCase());
728
739
  }
729
740
  }
730
- else if (mode === 'async') {
731
- await generateMarkup(emit, tagName, props, null, null);
741
+ enable(instance) {
742
+ __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").add(instance);
732
743
  }
733
- else if (mode === 'sync') {
734
- generateMarkup(emit, tagName, props, null, null);
744
+ disable(instance) {
745
+ __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").delete(instance);
735
746
  }
736
- else {
737
- throw new Error(`Invalid mode: ${mode}`);
747
+ renderMutatedAttrs(instance) {
748
+ const mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
749
+ if (mutatedAttrs) {
750
+ return ` data-lwc-host-mutated="${[...mutatedAttrs].sort().join(' ')}"`;
751
+ }
752
+ else {
753
+ return '';
754
+ }
738
755
  }
739
- return markup;
740
756
  }
757
+ _MutationTracker_enabledSet = new WeakMap(), _MutationTracker_mutationMap = new WeakMap();
758
+ const mutationTracker = new MutationTracker();
741
759
 
742
760
  /*
743
761
  * Copyright (c) 2024, Salesforce, Inc.
@@ -745,220 +763,271 @@ async function serverSideRenderComponent(tagName, Component, props = {}, mode =
745
763
  * SPDX-License-Identifier: MIT
746
764
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
747
765
  */
748
- // Stubs for all the un-implemented exports from @lwc/engine-server
749
- function api(..._) {
750
- throw new Error('@api cannot be used in SSR context.');
751
- }
752
- function createContextProvider(..._) {
753
- throw new Error('createContextProvider cannot be used in SSR context.');
754
- }
755
- function createElement(..._) {
756
- throw new Error('createElement cannot be used in SSR context.');
757
- }
758
- function freezeTemplate(..._) {
759
- throw new Error('freezeTemplate cannot be used in SSR context.');
760
- }
761
- function getComponentDef(..._) {
762
- throw new Error('getComponentDef cannot be used in SSR context.');
763
- }
764
- function isComponentConstructor(..._) {
765
- throw new Error('isComponentConstructor cannot be used in SSR context.');
766
- }
767
- function parseFragment(..._) {
768
- throw new Error('parseFragment cannot be used in SSR context.');
769
- }
770
- function parseSVGFragment(..._) {
771
- throw new Error('parseSVGFragment cannot be used in SSR context.');
772
- }
773
- function readonly(..._) {
774
- throw new Error('readonly cannot be used in SSR context.');
775
- }
776
- function registerComponent(..._) {
777
- throw new Error('registerComponent cannot be used in SSR context.');
778
- }
779
- function registerDecorators(..._) {
780
- throw new Error('registerDecorators cannot be used in SSR context.');
781
- }
782
- function registerTemplate(..._) {
783
- throw new Error('registerTemplate cannot be used in SSR context.');
784
- }
785
- function sanitizeAttribute(..._) {
786
- throw new Error('sanitizeAttribute cannot be used in SSR context.');
787
- }
788
- function setFeatureFlag(..._) {
789
- throw new Error('setFeatureFlag cannot be used in SSR context.');
790
- }
791
- function setFeatureFlagForTest(..._) {
792
- throw new Error('setFeatureFlagForTest cannot be used in SSR context.');
793
- }
794
- function setHooks(..._) {
795
- throw new Error('setHooks cannot be used in SSR context.');
796
- }
797
- function swapComponent(..._) {
798
- throw new Error('swapComponent cannot be used in SSR context.');
799
- }
800
- function swapStyle(..._) {
801
- throw new Error('swapStyle cannot be used in SSR context.');
802
- }
803
- function swapTemplate(..._) {
804
- throw new Error('swapTemplate cannot be used in SSR context.');
805
- }
806
- function track(..._) {
807
- throw new Error('@track cannot be used in SSR context.');
808
- }
809
- function unwrap(..._) {
810
- throw new Error('unwrap cannot be used in SSR context.');
811
- }
812
- function wire(..._) {
813
- throw new Error('@wire cannot be used in SSR context.');
766
+ /**
767
+ * Filters out the following types of properties that should not be set.
768
+ * - Properties that are not public.
769
+ * - Properties that are not global.
770
+ * - Properties that are global but are internally overridden.
771
+ */
772
+ function filterProperties(props, publicFields, privateFields) {
773
+ const propsToAssign = create(null);
774
+ const publicFieldSet = new Set(publicFields);
775
+ const privateFieldSet = new Set(privateFields);
776
+ keys(props).forEach((propName) => {
777
+ const attrName = htmlPropertyToAttribute(propName);
778
+ if (publicFieldSet.has(propName) ||
779
+ ((isGlobalHtmlAttribute(attrName) || isAriaAttribute(attrName)) &&
780
+ !privateFieldSet.has(propName))) {
781
+ propsToAssign[propName] = props[propName];
782
+ }
783
+ });
784
+ return propsToAssign;
814
785
  }
815
- const renderer = {
816
- isSyntheticShadowDefined: false,
817
- insert(..._) {
818
- throw new Error('renderer.insert cannot be used in SSR context.');
819
- },
820
- remove(..._) {
821
- throw new Error('renderer.remove cannot be used in SSR context.');
822
- },
823
- cloneNode(..._) {
824
- throw new Error('renderer.cloneNode cannot be used in SSR context.');
825
- },
826
- createFragment(..._) {
827
- throw new Error('renderer.createFragment cannot be used in SSR context.');
828
- },
829
- createElement(..._) {
830
- throw new Error('renderer.createElement cannot be used in SSR context.');
831
- },
832
- createText(..._) {
833
- throw new Error('renderer.createText cannot be used in SSR context.');
834
- },
835
- createComment(..._) {
836
- throw new Error('renderer.createComment cannot be used in SSR context.');
837
- },
838
- createCustomElement(..._) {
839
- throw new Error('renderer.createCustomElement cannot be used in SSR context.');
840
- },
841
- nextSibling(..._) {
842
- throw new Error('renderer.nextSibling cannot be used in SSR context.');
843
- },
844
- previousSibling(..._) {
845
- throw new Error('renderer.previousSibling cannot be used in SSR context.');
846
- },
847
- attachShadow(..._) {
848
- throw new Error('renderer.attachShadow cannot be used in SSR context.');
849
- },
850
- getProperty(..._) {
851
- throw new Error('renderer.getProperty cannot be used in SSR context.');
852
- },
853
- setProperty(..._) {
854
- throw new Error('renderer.setProperty cannot be used in SSR context.');
855
- },
856
- setText(..._) {
857
- throw new Error('renderer.setText cannot be used in SSR context.');
858
- },
859
- getAttribute(..._) {
860
- throw new Error('renderer.getAttribute cannot be used in SSR context.');
861
- },
862
- setAttribute(..._) {
863
- throw new Error('renderer.setAttribute cannot be used in SSR context.');
864
- },
865
- removeAttribute(..._) {
866
- throw new Error('renderer.removeAttribute cannot be used in SSR context.');
867
- },
868
- addEventListener(..._) {
869
- throw new Error('renderer.addEventListener cannot be used in SSR context.');
870
- },
871
- removeEventListener(..._) {
872
- throw new Error('renderer.removeEventListener cannot be used in SSR context.');
873
- },
874
- dispatchEvent(..._) {
875
- throw new Error('renderer.dispatchEvent cannot be used in SSR context.');
876
- },
877
- getClassList(..._) {
878
- throw new Error('renderer.getClassList cannot be used in SSR context.');
879
- },
880
- setCSSStyleProperty(..._) {
881
- throw new Error('renderer.setCSSStyleProperty cannot be used in SSR context.');
882
- },
883
- getBoundingClientRect(..._) {
884
- throw new Error('renderer.getBoundingClientRect cannot be used in SSR context.');
885
- },
886
- querySelector(..._) {
887
- throw new Error('renderer.querySelector cannot be used in SSR context.');
888
- },
889
- querySelectorAll(..._) {
890
- throw new Error('renderer.querySelectorAll cannot be used in SSR context.');
891
- },
892
- getElementsByTagName(..._) {
893
- throw new Error('renderer.getElementsByTagName cannot be used in SSR context.');
894
- },
895
- getElementsByClassName(..._) {
896
- throw new Error('renderer.getElementsByClassName cannot be used in SSR context.');
897
- },
898
- getChildren(..._) {
899
- throw new Error('renderer.getChildren cannot be used in SSR context.');
900
- },
901
- getChildNodes(..._) {
902
- throw new Error('renderer.getChildNodes cannot be used in SSR context.');
903
- },
904
- getFirstChild(..._) {
905
- throw new Error('renderer.getFirstChild cannot be used in SSR context.');
906
- },
907
- getFirstElementChild(..._) {
908
- throw new Error('renderer.getFirstElementChild cannot be used in SSR context.');
909
- },
910
- getLastChild(..._) {
911
- throw new Error('renderer.getLastChild cannot be used in SSR context.');
912
- },
913
- getLastElementChild(..._) {
914
- throw new Error('renderer.getLastElementChild cannot be used in SSR context.');
915
- },
916
- getTagName(..._) {
917
- throw new Error('renderer.getTagName cannot be used in SSR context.');
918
- },
919
- getStyle(..._) {
920
- throw new Error('renderer.getStyle cannot be used in SSR context.');
921
- },
922
- isConnected(..._) {
923
- throw new Error('renderer.isConnected cannot be used in SSR context.');
924
- },
925
- insertStylesheet(..._) {
926
- throw new Error('renderer.insertStylesheet cannot be used in SSR context.');
786
+ /**
787
+ * Descriptor for IDL attribute reflections that merely reflect the string, e.g. `title`.
788
+ */
789
+ const stringDescriptor = (attrName) => ({
790
+ configurable: true,
791
+ enumerable: true,
792
+ get() {
793
+ return this.getAttribute(attrName);
927
794
  },
928
- assertInstanceOfHTMLElement(..._) {
929
- throw new Error('renderer.assertInstanceOfHTMLElement cannot be used in SSR context.');
795
+ set(newValue) {
796
+ const currentValue = this.getAttribute(attrName);
797
+ const normalizedValue = String(newValue);
798
+ if (normalizedValue !== currentValue) {
799
+ this.setAttribute(attrName, normalizedValue);
800
+ }
930
801
  },
931
- ownerDocument(..._) {
932
- throw new Error('renderer.ownerDocument cannot be used in SSR context.');
802
+ });
803
+ /** Descriptor for a boolean that checks for `attr="true"` or `attr="false"`, e.g. `spellcheck` and `draggable`. */
804
+ const explicitBooleanDescriptor = (attrName, defaultValue) => ({
805
+ configurable: true,
806
+ enumerable: true,
807
+ get() {
808
+ const value = this.getAttribute(attrName);
809
+ return value === null ? defaultValue : value === String(defaultValue);
933
810
  },
934
- registerContextConsumer(..._) {
935
- throw new Error('renderer.registerContextConsumer cannot be used in SSR context.');
811
+ set(newValue) {
812
+ const currentValue = this.getAttribute(attrName);
813
+ const normalizedValue = String(Boolean(newValue));
814
+ if (normalizedValue !== currentValue) {
815
+ this.setAttribute(attrName, normalizedValue);
816
+ }
936
817
  },
937
- attachInternals(..._) {
938
- throw new Error('renderer.attachInternals cannot be used in SSR context.');
818
+ });
819
+ /**
820
+ * Descriptor for a "true" boolean attribute that checks solely for presence, e.g. `hidden`.
821
+ */
822
+ const booleanAttributeDescriptor = (attrName) => ({
823
+ configurable: true,
824
+ enumerable: true,
825
+ get() {
826
+ return this.hasAttribute(attrName);
939
827
  },
940
- defineCustomElement(..._) {
941
- throw new Error('renderer.defineCustomElement cannot be used in SSR context.');
828
+ set(newValue) {
829
+ const hasAttribute = this.hasAttribute(attrName);
830
+ if (newValue) {
831
+ if (!hasAttribute) {
832
+ this.setAttribute(attrName, '');
833
+ }
834
+ }
835
+ else {
836
+ if (hasAttribute) {
837
+ this.removeAttribute(attrName);
838
+ }
839
+ }
942
840
  },
943
- getParentNode(..._) {
944
- throw new Error('renderer.getParentNode cannot be used in SSR context.');
841
+ });
842
+ /**
843
+ * Descriptor for ARIA reflections, e.g. `ariaLabel` and `role`.
844
+ */
845
+ const ariaDescriptor = (attrName) => ({
846
+ configurable: true,
847
+ enumerable: true,
848
+ get() {
849
+ return this.getAttribute(attrName);
945
850
  },
946
- startTrackingMutations(..._) {
947
- throw new Error('renderer.startTrackingMutations cannot be used in SSR context.');
851
+ set(newValue) {
852
+ const currentValue = this.getAttribute(attrName);
853
+ if (newValue !== currentValue) {
854
+ // TODO [#3284]: According to the spec, IDL nullable type values
855
+ // (null and undefined) should remove the attribute; however, we
856
+ // only do so in the case of null for historical reasons.
857
+ if (isNull(newValue)) {
858
+ this.removeAttribute(attrName);
859
+ }
860
+ else {
861
+ this.setAttribute(attrName, toString(newValue));
862
+ }
863
+ }
948
864
  },
949
- stopTrackingMutations(..._) {
950
- throw new Error('renderer.stopTrackingMutations cannot be used in SSR context.');
865
+ });
866
+ const descriptors = {
867
+ accessKey: stringDescriptor('accesskey'),
868
+ dir: stringDescriptor('dir'),
869
+ draggable: explicitBooleanDescriptor('draggable', true),
870
+ hidden: booleanAttributeDescriptor('hidden'),
871
+ id: stringDescriptor('id'),
872
+ lang: stringDescriptor('lang'),
873
+ spellcheck: explicitBooleanDescriptor('spellcheck', false),
874
+ tabIndex: {
875
+ get() {
876
+ const str = this.getAttribute('tabindex');
877
+ const num = Number(str);
878
+ return isFinite(num) ? Math.trunc(num) : -1;
879
+ },
880
+ set(newValue) {
881
+ const currentValue = this.getAttribute('tabindex');
882
+ const num = Number(newValue);
883
+ const normalizedValue = isFinite(num) ? String(Math.trunc(num)) : '0';
884
+ if (normalizedValue !== currentValue) {
885
+ this.setAttribute('tabindex', toString(newValue));
886
+ }
887
+ },
951
888
  },
889
+ title: stringDescriptor('title'),
952
890
  };
953
- /**
954
- * The hot API is used to orchestrate hot swapping in client rendered components.
955
- * It doesn't do anything on the server side, however, you may import it.
956
- *
957
- * The whole point of defining this and exporting it is so that you can import it in isomorphic code without
958
- * an error being thrown by the import itself.
891
+ // Add descriptors for ARIA attributes
892
+ for (const [attrName, propName] of entries(AriaAttrNameToPropNameMap)) {
893
+ descriptors[propName] = ariaDescriptor(attrName);
894
+ }
895
+
896
+ /*
897
+ * Copyright (c) 2024, salesforce.com, inc.
898
+ * All rights reserved.
899
+ * SPDX-License-Identifier: MIT
900
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
959
901
  */
960
- // A real stub, not a "not implemented" one! 😯
961
- const hot = undefined;
902
+ var _LightningElement_attrs, _LightningElement_classList;
903
+ const SYMBOL__SET_INTERNALS = Symbol('set-internals');
904
+ const SYMBOL__GENERATE_MARKUP = Symbol('generate-markup');
905
+ class LightningElement {
906
+ constructor(propsAvailableAtConstruction) {
907
+ this.isConnected = false;
908
+ this.className = '';
909
+ _LightningElement_attrs.set(this, void 0);
910
+ _LightningElement_classList.set(this, null);
911
+ assign(this, propsAvailableAtConstruction);
912
+ }
913
+ [(_LightningElement_attrs = new WeakMap(), _LightningElement_classList = new WeakMap(), SYMBOL__SET_INTERNALS)](props, attrs) {
914
+ __classPrivateFieldSet(this, _LightningElement_attrs, attrs, "f");
915
+ assign(this, props);
916
+ defineProperty(this, 'className', {
917
+ get() {
918
+ return props.class ?? '';
919
+ },
920
+ set(newVal) {
921
+ props.class = newVal;
922
+ attrs.class = newVal;
923
+ mutationTracker.add(this, 'class');
924
+ },
925
+ });
926
+ }
927
+ get classList() {
928
+ if (__classPrivateFieldGet(this, _LightningElement_classList, "f")) {
929
+ return __classPrivateFieldGet(this, _LightningElement_classList, "f");
930
+ }
931
+ return (__classPrivateFieldSet(this, _LightningElement_classList, new ClassList(this), "f"));
932
+ }
933
+ setAttribute(attrName, attrValue) {
934
+ const normalizedName = StringToLowerCase.call(toString(attrName));
935
+ const normalizedValue = String(attrValue);
936
+ __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName] = normalizedValue;
937
+ mutationTracker.add(this, normalizedName);
938
+ }
939
+ getAttribute(attrName) {
940
+ const normalizedName = StringToLowerCase.call(toString(attrName));
941
+ if (hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName)) {
942
+ return __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
943
+ }
944
+ return null;
945
+ }
946
+ hasAttribute(attrName) {
947
+ const normalizedName = StringToLowerCase.call(toString(attrName));
948
+ return hasOwnProperty.call(__classPrivateFieldGet(this, _LightningElement_attrs, "f"), normalizedName);
949
+ }
950
+ removeAttribute(attrName) {
951
+ const normalizedName = StringToLowerCase.call(toString(attrName));
952
+ delete __classPrivateFieldGet(this, _LightningElement_attrs, "f")[normalizedName];
953
+ // Track mutations for removal of non-existing attributes
954
+ mutationTracker.add(this, normalizedName);
955
+ }
956
+ addEventListener(_type, _listener, _options) {
957
+ // noop
958
+ }
959
+ removeEventListener(_type, _listener, _options) {
960
+ // noop
961
+ }
962
+ // ----------------------------------------------------------- //
963
+ // Props/methods explicitly not available in this environment //
964
+ // Getters are named "get*" for parity with @lwc/engine-server //
965
+ // ----------------------------------------------------------- //
966
+ get children() {
967
+ throw new TypeError('"getChildren" is not supported in this environment');
968
+ }
969
+ get childNodes() {
970
+ throw new TypeError('"getChildNodes" is not supported in this environment');
971
+ }
972
+ get firstChild() {
973
+ throw new TypeError('"getFirstChild" is not supported in this environment');
974
+ }
975
+ get firstElementChild() {
976
+ throw new TypeError('"getFirstElementChild" is not supported in this environment');
977
+ }
978
+ get hostElement() {
979
+ // Intentionally different to match @lwc/engine-*core*
980
+ throw new TypeError('this.hostElement is not supported in this environment');
981
+ }
982
+ get lastChild() {
983
+ throw new TypeError('"getLastChild" is not supported in this environment');
984
+ }
985
+ get lastElementChild() {
986
+ throw new TypeError('"getLastElementChild" is not supported in this environment');
987
+ }
988
+ get ownerDocument() {
989
+ // Intentionally not "get*" to match @lwc/engine-server
990
+ throw new TypeError('"ownerDocument" is not supported in this environment');
991
+ }
992
+ get style() {
993
+ // Intentionally not "get*" to match @lwc/engine-server
994
+ throw new TypeError('"style" is not supported in this environment');
995
+ }
996
+ attachInternals() {
997
+ throw new TypeError('"attachInternals" is not supported in this environment');
998
+ }
999
+ dispatchEvent(_event) {
1000
+ throw new TypeError('"dispatchEvent" is not supported in this environment');
1001
+ }
1002
+ getBoundingClientRect() {
1003
+ throw new TypeError('"getBoundingClientRect" is not supported in this environment');
1004
+ }
1005
+ getElementsByClassName(_classNames) {
1006
+ throw new TypeError('"getElementsByClassName" is not supported in this environment');
1007
+ }
1008
+ getElementsByTagName(_qualifiedName) {
1009
+ throw new TypeError('"getElementsByTagName" is not supported in this environment');
1010
+ }
1011
+ querySelector(_selectors) {
1012
+ throw new TypeError('"querySelector" is not supported in this environment');
1013
+ }
1014
+ querySelectorAll(_selectors) {
1015
+ throw new TypeError('"querySelectorAll" is not supported in this environment');
1016
+ }
1017
+ getAttributeNS(_namespace, _localName) {
1018
+ throw new Error('Method "getAttributeNS" not implemented.');
1019
+ }
1020
+ hasAttributeNS(_namespace, _localName) {
1021
+ throw new Error('Method "hasAttributeNS" not implemented.');
1022
+ }
1023
+ removeAttributeNS(_namespace, _localName) {
1024
+ throw new Error('Method "removeAttributeNS" not implemented.');
1025
+ }
1026
+ setAttributeNS(_namespace, _qualifiedName, _value) {
1027
+ throw new Error('Method "setAttributeNS" not implemented.');
1028
+ }
1029
+ }
1030
+ defineProperties(LightningElement.prototype, descriptors);
962
1031
 
963
1032
  /*
964
1033
  * Copyright (c) 2024, salesforce.com, inc.
@@ -966,35 +1035,72 @@ const hot = undefined;
966
1035
  * SPDX-License-Identifier: MIT
967
1036
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
968
1037
  */
969
- /**
970
- * Converts an iterable into one that emits the object used by the [`iterator` directive](
971
- * https://lwc.dev/guide/html_templates#iterator).
972
- */
973
- function* toIteratorDirective(iterable) {
974
- if (iterable === undefined || iterable === null)
1038
+ const escapeAttrVal = (attrVal) => attrVal.replaceAll('&', '&amp;').replaceAll('"', '&quot;');
1039
+ function* renderAttrs(instance, attrs) {
1040
+ if (!attrs) {
975
1041
  return;
976
- if (!iterable[Symbol.iterator]) {
977
- throw new Error(
978
- // Mimic error message from "[i]terable node" in engine-core's api.ts
979
- `Invalid template iteration for value \`${iterable}\`. It must be an array-like object.`);
980
1042
  }
981
- const iterator = iterable[Symbol.iterator]();
982
- let next = iterator.next();
983
- let index = 0;
984
- let { value, done: last = false } = next;
985
- while (last === false) {
986
- // using a look-back approach because we need to know if the element is the last
987
- next = iterator.next();
988
- last = next.done ?? false;
989
- yield {
990
- value,
991
- index,
992
- first: index === 0,
993
- last,
994
- };
995
- index += 1;
996
- value = next.value;
1043
+ for (const attrName of Object.getOwnPropertyNames(attrs)) {
1044
+ const attrVal = attrs[attrName];
1045
+ if (typeof attrVal === 'string') {
1046
+ yield attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`;
1047
+ }
1048
+ else if (attrVal === null) {
1049
+ yield '';
1050
+ }
1051
+ }
1052
+ yield mutationTracker.renderMutatedAttrs(instance);
1053
+ }
1054
+ function renderAttrsNoYield(emit, instance, attrs) {
1055
+ if (!attrs) {
1056
+ return;
1057
+ }
1058
+ for (const attrName of Object.getOwnPropertyNames(attrs)) {
1059
+ const attrVal = attrs[attrName];
1060
+ if (typeof attrVal === 'string') {
1061
+ emit(attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`);
1062
+ }
1063
+ else if (attrVal === null) {
1064
+ emit('');
1065
+ }
1066
+ }
1067
+ emit(mutationTracker.renderMutatedAttrs(instance));
1068
+ }
1069
+ function* fallbackTmpl(_props, _attrs, _slotted, Cmp, _instance) {
1070
+ if (Cmp.renderMode !== 'light') {
1071
+ yield '<template shadowrootmode="open"></template>';
1072
+ }
1073
+ }
1074
+ function fallbackTmplNoYield(emit, _props, _attrs, _slotted, Cmp, _instance) {
1075
+ if (Cmp.renderMode !== 'light') {
1076
+ emit('<template shadowrootmode="open"></template>');
1077
+ }
1078
+ }
1079
+ async function serverSideRenderComponent(tagName, Component, props = {}, mode = 'asyncYield') {
1080
+ if (typeof tagName !== 'string') {
1081
+ throw new Error(`tagName must be a string, found: ${tagName}`);
1082
+ }
1083
+ // TODO [#4726]: remove `generateMarkup` export
1084
+ const generateMarkup = SYMBOL__GENERATE_MARKUP in Component ? Component[SYMBOL__GENERATE_MARKUP] : Component;
1085
+ let markup = '';
1086
+ const emit = (segment) => {
1087
+ markup += segment;
1088
+ };
1089
+ if (mode === 'asyncYield') {
1090
+ for await (const segment of generateMarkup(tagName, props, null, null)) {
1091
+ markup += segment;
1092
+ }
1093
+ }
1094
+ else if (mode === 'async') {
1095
+ await generateMarkup(emit, tagName, props, null, null);
1096
+ }
1097
+ else if (mode === 'sync') {
1098
+ generateMarkup(emit, tagName, props, null, null);
1099
+ }
1100
+ else {
1101
+ throw new Error(`Invalid mode: ${mode}`);
997
1102
  }
1103
+ return markup;
998
1104
  }
999
1105
 
1000
1106
  /*
@@ -1075,6 +1181,76 @@ function renderStylesheets(stylesheets, scopeToken, Component, hasScopedTemplate
1075
1181
  return result;
1076
1182
  }
1077
1183
 
1078
- export { ClassList, LightningElement, SYMBOL__GENERATE_MARKUP, SYMBOL__SET_INTERNALS, api, createContextProvider, createElement, fallbackTmpl, fallbackTmplNoYield, freezeTemplate, getComponentDef, hasScopedStaticStylesheets, hot, htmlEscape, isComponentConstructor, mutationTracker, parseFragment, parseSVGFragment, readonly, registerComponent, registerDecorators, registerTemplate, renderAttrs, renderAttrsNoYield, serverSideRenderComponent as renderComponent, renderStylesheets, renderer, sanitizeAttribute, serverSideRenderComponent, setFeatureFlag, setFeatureFlagForTest, setHooks, swapComponent, swapStyle, swapTemplate, toIteratorDirective, track, unwrap, validateStyleTextContents, wire };
1079
- /** version: 8.5.0 */
1184
+ /*
1185
+ * Copyright (c) 2024, salesforce.com, inc.
1186
+ * All rights reserved.
1187
+ * SPDX-License-Identifier: MIT
1188
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
1189
+ */
1190
+ /**
1191
+ * Converts an iterable into one that emits the object used by the [`iterator` directive](
1192
+ * https://lwc.dev/guide/html_templates#iterator).
1193
+ */
1194
+ function* toIteratorDirective(iterable) {
1195
+ if (iterable === undefined || iterable === null)
1196
+ return;
1197
+ if (!iterable[Symbol.iterator]) {
1198
+ throw new Error(
1199
+ // Mimic error message from "[i]terable node" in engine-core's api.ts
1200
+ `Invalid template iteration for value \`${iterable}\`. It must be an array-like object.`);
1201
+ }
1202
+ const iterator = iterable[Symbol.iterator]();
1203
+ let next = iterator.next();
1204
+ let index = 0;
1205
+ let { value, done: last = false } = next;
1206
+ while (last === false) {
1207
+ // using a look-back approach because we need to know if the element is the last
1208
+ next = iterator.next();
1209
+ last = next.done ?? false;
1210
+ yield {
1211
+ value,
1212
+ index,
1213
+ first: index === 0,
1214
+ last,
1215
+ };
1216
+ index += 1;
1217
+ value = next.value;
1218
+ }
1219
+ }
1220
+
1221
+ /*
1222
+ * Copyright (c) 2024, Salesforce, Inc.
1223
+ * All rights reserved.
1224
+ * SPDX-License-Identifier: MIT
1225
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
1226
+ */
1227
+ // Deep freeze and clone an object. Designed for cloning/freezing child props when passed from a parent to a child so
1228
+ // that they are immutable. This is one of the normal guarantees of both engine-dom and engine-server that we want to
1229
+ // emulate in ssr-runtime. The goal here is that a child cannot mutate the props of its parent and thus affect
1230
+ // the parent's rendering, which would lead to bidirectional reactivity and mischief.
1231
+ function cloneAndDeepFreeze(obj) {
1232
+ if (isArray(obj)) {
1233
+ const res = [];
1234
+ for (const item of obj) {
1235
+ ArrayPush.call(res, cloneAndDeepFreeze(item));
1236
+ }
1237
+ freeze(res);
1238
+ return res;
1239
+ }
1240
+ else if (isObject(obj) && !isNull(obj)) {
1241
+ const res = create(null);
1242
+ for (const [key, value] of entries(obj)) {
1243
+ res[key] = cloneAndDeepFreeze(value);
1244
+ }
1245
+ freeze(res);
1246
+ return res;
1247
+ }
1248
+ else {
1249
+ // primitive
1250
+ return obj;
1251
+ }
1252
+ }
1253
+
1254
+ export { ClassList, LightningElement, SYMBOL__GENERATE_MARKUP, SYMBOL__SET_INTERNALS, api, cloneAndDeepFreeze, createContextProvider, createElement, fallbackTmpl, fallbackTmplNoYield, filterProperties, freezeTemplate, getComponentDef, hasScopedStaticStylesheets, hot, htmlEscape, isComponentConstructor, mutationTracker, parseFragment, parseSVGFragment, readonly, registerComponent, registerDecorators, registerTemplate, renderAttrs, renderAttrsNoYield, serverSideRenderComponent as renderComponent, renderStylesheets, renderer, sanitizeAttribute, sanitizeHtmlContent, serverSideRenderComponent, setFeatureFlag, setFeatureFlagForTest, setHooks, swapComponent, swapStyle, swapTemplate, toIteratorDirective, track, unwrap, validateStyleTextContents, wire };
1255
+ /** version: 8.7.0 */
1080
1256
  //# sourceMappingURL=index.js.map