@lwc/ssr-runtime 8.1.3 → 8.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ import { LightningElement } from './lightning-element';
2
+ interface DOMTokenList {
3
+ readonly length: number;
4
+ value: string;
5
+ toString(): string;
6
+ add(...tokens: string[]): void;
7
+ contains(token: string): boolean;
8
+ item(index: number): string | null;
9
+ remove(...tokens: string[]): void;
10
+ replace(token: string, newToken: string): boolean;
11
+ supports(token: string): boolean;
12
+ toggle(token: string, force?: boolean): boolean;
13
+ forEach(callbackfn: (value: string, key: number, parent: DOMTokenList) => void, thisArg?: any): void;
14
+ [index: number]: string;
15
+ }
16
+ export declare class ClassList implements DOMTokenList {
17
+ el: LightningElement;
18
+ constructor(el: LightningElement);
19
+ add(...newClassNames: string[]): void;
20
+ contains(className: string): boolean;
21
+ remove(...classNamesToRemove: string[]): void;
22
+ replace(oldClassName: string, newClassName: string): boolean;
23
+ toggle(classNameToToggle: string, force?: boolean): boolean;
24
+ get value(): string;
25
+ toString(): string;
26
+ [index: number]: never;
27
+ item(_index: number): string | null;
28
+ supports(_token: string): boolean;
29
+ forEach(_callbackfn: (value: string, key: number, parent: DOMTokenList) => void, _thisArg?: any): void;
30
+ get length(): number;
31
+ }
32
+ export {};
package/dist/index.cjs.js CHANGED
@@ -5,67 +5,14 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- /*
9
- * Copyright (c) 2024, Salesforce, Inc.
10
- * All rights reserved.
11
- * SPDX-License-Identifier: MIT
12
- * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
13
- */
14
- /**
15
- * Per the HTML spec on restrictions for "raw text elements" like `<style>`:
16
- *
17
- * > The text in raw text and escapable raw text elements must not contain any occurrences of the string
18
- * > "</" (U+003C LESS-THAN SIGN, U+002F SOLIDUS) followed by characters that case-insensitively match the tag name of
19
- * > the element followed by one of:
20
- * > - U+0009 CHARACTER TABULATION (tab)
21
- * > - U+000A LINE FEED (LF)
22
- * > - U+000C FORM FEED (FF)
23
- * > - U+000D CARRIAGE RETURN (CR)
24
- * > - U+0020 SPACE
25
- * > - U+003E GREATER-THAN SIGN (>), or
26
- * > - U+002F SOLIDUS (/)
27
- * @see https://html.spec.whatwg.org/multipage/syntax.html#cdata-rcdata-restrictions
28
- */
29
- const INVALID_STYLE_CONTENT = /<\/style[\t\n\f\r >/]/i;
30
- /**
31
- * The text content inside `<style>` is a special case. It is _only_ rendered by the LWC engine itself; `<style>` tags
32
- * are disallowed inside of HTML templates.
33
- *
34
- * The `<style>` tag is unusual in how it's defined in HTML. Like `<script>`, it is considered a "raw text element,"
35
- * which means that it is parsed as raw text, but certain character sequences are disallowed, namely to avoid XSS
36
- * attacks like `</style><script>alert("pwned")</script>`.
37
- *
38
- * This also means that we cannot use "normal" HTML escaping inside `<style>` tags, e.g. we cannot use `&lt;`,
39
- * `&gt;`, etc., because these are treated as-is by the HTML parser.
40
- *
41
- *
42
- * @param contents CSS source to validate
43
- * @throws Throws if the contents provided are not valid.
44
- * @see https://html.spec.whatwg.org/multipage/syntax.html#raw-text-elements
45
- * @see https://github.com/salesforce/lwc/issues/3439
46
- * @example
47
- * validateStyleTextContents('div { color: red }') // Ok
48
- * validateStyleTextContents('</style><script>alert("pwned")</script>') // Throws
49
- */
50
- function validateStyleTextContents(contents) {
51
- if (INVALID_STYLE_CONTENT.test(contents)) {
52
- throw new Error('CSS contains unsafe characters and cannot be serialized inside a style element');
53
- }
54
- }
8
+ var shared = require('@lwc/shared');
55
9
 
56
10
  /*
57
- * Copyright (c) 2024, salesforce.com, inc.
11
+ * Copyright (c) 2024, Salesforce, Inc.
58
12
  * All rights reserved.
59
13
  * SPDX-License-Identifier: MIT
60
14
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
61
15
  */
62
- // At runtime, we don't have access to the DOM, so we don't want TypeScript to allow accessing DOM
63
- // globals. However, we're mimicking DOM functionality here, so we *do* want access to DOM types.
64
- // To access the real DOM types when writing new code, uncomment the line below and comment out the
65
- // stub types. Switch them back when you're done to validate that you're not accidentally using
66
- // DOM globals. IMPORTANT: The comment below is a "triple slash directive", it must start with ///
67
- // and be located before import statements.
68
- // /// <reference lib="dom" />
69
16
  const MULTI_SPACE = /\s+/g;
70
17
  class ClassList {
71
18
  constructor(el) {
@@ -135,17 +82,103 @@ class ClassList {
135
82
  throw new Error('Property "length" not implemented.');
136
83
  }
137
84
  }
85
+
86
+ /******************************************************************************
87
+ Copyright (c) Microsoft Corporation.
88
+
89
+ Permission to use, copy, modify, and/or distribute this software for any
90
+ purpose with or without fee is hereby granted.
91
+
92
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
93
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
94
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
95
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
96
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
97
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
98
+ PERFORMANCE OF THIS SOFTWARE.
99
+ ***************************************************************************** */
100
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
101
+
102
+
103
+ function __classPrivateFieldGet(receiver, state, kind, f) {
104
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
105
+ 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");
106
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
107
+ }
108
+
109
+ function __classPrivateFieldSet(receiver, state, value, kind, f) {
110
+ if (kind === "m") throw new TypeError("Private method is not writable");
111
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
112
+ 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");
113
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
114
+ }
115
+
116
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
117
+ var e = new Error(message);
118
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
119
+ };
120
+
121
+ /*
122
+ * Copyright (c) 2024, Salesforce, Inc.
123
+ * All rights reserved.
124
+ * SPDX-License-Identifier: MIT
125
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
126
+ */
127
+ var _MutationTracker_enabledSet, _MutationTracker_mutationMap;
128
+ class MutationTracker {
129
+ constructor() {
130
+ _MutationTracker_enabledSet.set(this, new WeakSet());
131
+ _MutationTracker_mutationMap.set(this, new WeakMap());
132
+ }
133
+ add(instance, attrName) {
134
+ if (__classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").has(instance)) {
135
+ let mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
136
+ if (!mutatedAttrs) {
137
+ mutatedAttrs = new Set();
138
+ __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").set(instance, mutatedAttrs);
139
+ }
140
+ mutatedAttrs.add(attrName.toLowerCase());
141
+ }
142
+ }
143
+ enable(instance) {
144
+ __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").add(instance);
145
+ }
146
+ disable(instance) {
147
+ __classPrivateFieldGet(this, _MutationTracker_enabledSet, "f").delete(instance);
148
+ }
149
+ renderMutatedAttrs(instance) {
150
+ const mutatedAttrs = __classPrivateFieldGet(this, _MutationTracker_mutationMap, "f").get(instance);
151
+ if (mutatedAttrs) {
152
+ return ` data-lwc-host-mutated="${[...mutatedAttrs].sort().join(' ')}"`;
153
+ }
154
+ else {
155
+ return '';
156
+ }
157
+ }
158
+ }
159
+ _MutationTracker_enabledSet = new WeakMap(), _MutationTracker_mutationMap = new WeakMap();
160
+ const mutationTracker = new MutationTracker();
161
+
162
+ /*
163
+ * Copyright (c) 2024, salesforce.com, inc.
164
+ * All rights reserved.
165
+ * SPDX-License-Identifier: MIT
166
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
167
+ */
168
+ var _LightningElement_instances, _LightningElement_attrs, _LightningElement_classList, _LightningElement_setAttribute;
169
+ const SYMBOL__SET_INTERNALS = Symbol('set-internals');
138
170
  class LightningElement {
139
171
  constructor(propsAvailableAtConstruction) {
172
+ _LightningElement_instances.add(this);
140
173
  this.isConnected = false;
141
174
  this.className = '';
142
- this.__classList = null;
175
+ _LightningElement_attrs.set(this, void 0);
176
+ _LightningElement_classList.set(this, null);
143
177
  Object.assign(this, propsAvailableAtConstruction);
144
178
  }
145
- // TODO [W-14977927]: protect internals from userland
146
- __internal__setState(props, reflectedProps, attrs) {
179
+ [(_LightningElement_attrs = new WeakMap(), _LightningElement_classList = new WeakMap(), _LightningElement_instances = new WeakSet(), SYMBOL__SET_INTERNALS)](props, reflectedProps, attrs) {
147
180
  Object.assign(this, props);
148
- this.__attrs = attrs;
181
+ __classPrivateFieldSet(this, _LightningElement_attrs, attrs, "f");
149
182
  // Whenever a reflected prop changes, we'll update the original props object
150
183
  // that was passed in. That'll be referenced when the attrs are rendered later.
151
184
  for (const reflectedPropName of reflectedProps) {
@@ -155,6 +188,7 @@ class LightningElement {
155
188
  },
156
189
  set(newValue) {
157
190
  props[reflectedPropName] = newValue;
191
+ mutationTracker.add(this, shared.htmlPropertyToAttribute(reflectedPropName));
158
192
  },
159
193
  enumerable: true,
160
194
  });
@@ -166,26 +200,40 @@ class LightningElement {
166
200
  set(newVal) {
167
201
  props.class = newVal;
168
202
  attrs.class = newVal;
203
+ mutationTracker.add(this, 'class');
169
204
  },
170
205
  });
171
206
  }
172
207
  get classList() {
173
- if (this.__classList) {
174
- return this.__classList;
208
+ if (__classPrivateFieldGet(this, _LightningElement_classList, "f")) {
209
+ return __classPrivateFieldGet(this, _LightningElement_classList, "f");
175
210
  }
176
- return (this.__classList = new ClassList(this));
211
+ return (__classPrivateFieldSet(this, _LightningElement_classList, new ClassList(this), "f"));
177
212
  }
178
- getAttribute(attrName) {
179
- return this.__attrs[attrName] ?? null;
213
+ setAttribute(attrName, attrValue) {
214
+ __classPrivateFieldGet(this, _LightningElement_instances, "m", _LightningElement_setAttribute).call(this, attrName, String(attrValue));
180
215
  }
181
- setAttribute(attrName, value) {
182
- this.__attrs[attrName] = String(value);
216
+ getAttribute(attrName) {
217
+ if (this.hasAttribute(attrName)) {
218
+ return __classPrivateFieldGet(this, _LightningElement_attrs, "f")[attrName];
219
+ }
220
+ return null;
183
221
  }
184
222
  hasAttribute(attrName) {
185
- return Boolean(this.__attrs && attrName in this.__attrs);
223
+ return typeof attrName === 'string' && typeof __classPrivateFieldGet(this, _LightningElement_attrs, "f")[attrName] === 'string';
186
224
  }
187
225
  removeAttribute(attrName) {
188
- this.__attrs[attrName] = null;
226
+ if (this.hasAttribute(attrName)) {
227
+ // Reflected attributes use accessor methods to update their
228
+ // corresponding properties so we can't simply `delete`. Instead,
229
+ // we use `null` when we want to remove.
230
+ __classPrivateFieldGet(this, _LightningElement_instances, "m", _LightningElement_setAttribute).call(this, attrName, null);
231
+ }
232
+ else {
233
+ // This interprets the removal of a non-existing attribute as an
234
+ // attribute mutation. We may want to revisit this.
235
+ mutationTracker.add(this, attrName);
236
+ }
189
237
  }
190
238
  addEventListener(_type, _listener, _options) {
191
239
  // noop
@@ -261,19 +309,32 @@ class LightningElement {
261
309
  throw new Error('Method "setAttributeNS" not implemented.');
262
310
  }
263
311
  }
312
+ _LightningElement_setAttribute = function _LightningElement_setAttribute(attrName, attrValue) {
313
+ __classPrivateFieldGet(this, _LightningElement_attrs, "f")[attrName] = attrValue;
314
+ mutationTracker.add(this, attrName);
315
+ };
316
+
317
+ /*
318
+ * Copyright (c) 2024, salesforce.com, inc.
319
+ * All rights reserved.
320
+ * SPDX-License-Identifier: MIT
321
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
322
+ */
264
323
  const escapeAttrVal = (attrVal) => attrVal.replaceAll('&', '&amp;').replaceAll('"', '&quot;');
265
- function* renderAttrs(attrs) {
324
+ function* renderAttrs(instance, attrs) {
266
325
  if (!attrs) {
267
326
  return;
268
327
  }
269
- for (const [key, val] of Object.entries(attrs)) {
270
- if (typeof val === 'string') {
271
- yield val === '' ? ` ${key}` : ` ${key}="${escapeAttrVal(val)}"`;
328
+ for (const attrName of Object.getOwnPropertyNames(attrs)) {
329
+ const attrVal = attrs[attrName];
330
+ if (typeof attrVal === 'string') {
331
+ yield attrVal === '' ? ` ${attrName}` : ` ${attrName}="${escapeAttrVal(attrVal)}"`;
272
332
  }
273
- else if (val === null) {
274
- return '';
333
+ else if (attrVal === null) {
334
+ yield '';
275
335
  }
276
336
  }
337
+ yield mutationTracker.renderMutatedAttrs(instance);
277
338
  }
278
339
  function* fallbackTmpl(_props, _attrs, _slotted, Cmp, _instance) {
279
340
  if (Cmp.renderMode !== 'light') {
@@ -288,10 +349,345 @@ async function serverSideRenderComponent(tagName, compiledGenerateMarkup, props)
288
349
  return markup;
289
350
  }
290
351
 
352
+ /*
353
+ * Copyright (c) 2024, Salesforce, Inc.
354
+ * All rights reserved.
355
+ * SPDX-License-Identifier: MIT
356
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
357
+ */
358
+ // Stubs for all the un-implemented exports from @lwc/engine-server
359
+ function api(..._) {
360
+ throw new Error('@api cannot be used in SSR context.');
361
+ }
362
+ function createContextProvider(..._) {
363
+ throw new Error('createContextProvider cannot be used in SSR context.');
364
+ }
365
+ function createElement(..._) {
366
+ throw new Error('createElement cannot be used in SSR context.');
367
+ }
368
+ function freezeTemplate(..._) {
369
+ throw new Error('freezeTemplate cannot be used in SSR context.');
370
+ }
371
+ function getComponentDef(..._) {
372
+ throw new Error('getComponentDef cannot be used in SSR context.');
373
+ }
374
+ function isComponentConstructor(..._) {
375
+ throw new Error('isComponentConstructor cannot be used in SSR context.');
376
+ }
377
+ function parseFragment(..._) {
378
+ throw new Error('parseFragment cannot be used in SSR context.');
379
+ }
380
+ function parseSVGFragment(..._) {
381
+ throw new Error('parseSVGFragment cannot be used in SSR context.');
382
+ }
383
+ function readonly(..._) {
384
+ throw new Error('readonly cannot be used in SSR context.');
385
+ }
386
+ function registerComponent(..._) {
387
+ throw new Error('registerComponent cannot be used in SSR context.');
388
+ }
389
+ function registerDecorators(..._) {
390
+ throw new Error('registerDecorators cannot be used in SSR context.');
391
+ }
392
+ function registerTemplate(..._) {
393
+ throw new Error('registerTemplate cannot be used in SSR context.');
394
+ }
395
+ function sanitizeAttribute(..._) {
396
+ throw new Error('sanitizeAttribute cannot be used in SSR context.');
397
+ }
398
+ function setFeatureFlag(..._) {
399
+ throw new Error('setFeatureFlag cannot be used in SSR context.');
400
+ }
401
+ function setFeatureFlagForTest(..._) {
402
+ throw new Error('setFeatureFlagForTest cannot be used in SSR context.');
403
+ }
404
+ function setHooks(..._) {
405
+ throw new Error('setHooks cannot be used in SSR context.');
406
+ }
407
+ function swapComponent(..._) {
408
+ throw new Error('swapComponent cannot be used in SSR context.');
409
+ }
410
+ function swapStyle(..._) {
411
+ throw new Error('swapStyle cannot be used in SSR context.');
412
+ }
413
+ function swapTemplate(..._) {
414
+ throw new Error('swapTemplate cannot be used in SSR context.');
415
+ }
416
+ function track(..._) {
417
+ throw new Error('@track cannot be used in SSR context.');
418
+ }
419
+ function unwrap(..._) {
420
+ throw new Error('unwrap cannot be used in SSR context.');
421
+ }
422
+ function wire(..._) {
423
+ throw new Error('@wire cannot be used in SSR context.');
424
+ }
425
+ const renderer = {
426
+ isSyntheticShadowDefined: false,
427
+ insert(..._) {
428
+ throw new Error('renderer.insert cannot be used in SSR context.');
429
+ },
430
+ remove(..._) {
431
+ throw new Error('renderer.remove cannot be used in SSR context.');
432
+ },
433
+ cloneNode(..._) {
434
+ throw new Error('renderer.cloneNode cannot be used in SSR context.');
435
+ },
436
+ createFragment(..._) {
437
+ throw new Error('renderer.createFragment cannot be used in SSR context.');
438
+ },
439
+ createElement(..._) {
440
+ throw new Error('renderer.createElement cannot be used in SSR context.');
441
+ },
442
+ createText(..._) {
443
+ throw new Error('renderer.createText cannot be used in SSR context.');
444
+ },
445
+ createComment(..._) {
446
+ throw new Error('renderer.createComment cannot be used in SSR context.');
447
+ },
448
+ createCustomElement(..._) {
449
+ throw new Error('renderer.createCustomElement cannot be used in SSR context.');
450
+ },
451
+ nextSibling(..._) {
452
+ throw new Error('renderer.nextSibling cannot be used in SSR context.');
453
+ },
454
+ previousSibling(..._) {
455
+ throw new Error('renderer.previousSibling cannot be used in SSR context.');
456
+ },
457
+ attachShadow(..._) {
458
+ throw new Error('renderer.attachShadow cannot be used in SSR context.');
459
+ },
460
+ getProperty(..._) {
461
+ throw new Error('renderer.getProperty cannot be used in SSR context.');
462
+ },
463
+ setProperty(..._) {
464
+ throw new Error('renderer.setProperty cannot be used in SSR context.');
465
+ },
466
+ setText(..._) {
467
+ throw new Error('renderer.setText cannot be used in SSR context.');
468
+ },
469
+ getAttribute(..._) {
470
+ throw new Error('renderer.getAttribute cannot be used in SSR context.');
471
+ },
472
+ setAttribute(..._) {
473
+ throw new Error('renderer.setAttribute cannot be used in SSR context.');
474
+ },
475
+ removeAttribute(..._) {
476
+ throw new Error('renderer.removeAttribute cannot be used in SSR context.');
477
+ },
478
+ addEventListener(..._) {
479
+ throw new Error('renderer.addEventListener cannot be used in SSR context.');
480
+ },
481
+ removeEventListener(..._) {
482
+ throw new Error('renderer.removeEventListener cannot be used in SSR context.');
483
+ },
484
+ dispatchEvent(..._) {
485
+ throw new Error('renderer.dispatchEvent cannot be used in SSR context.');
486
+ },
487
+ getClassList(..._) {
488
+ throw new Error('renderer.getClassList cannot be used in SSR context.');
489
+ },
490
+ setCSSStyleProperty(..._) {
491
+ throw new Error('renderer.setCSSStyleProperty cannot be used in SSR context.');
492
+ },
493
+ getBoundingClientRect(..._) {
494
+ throw new Error('renderer.getBoundingClientRect cannot be used in SSR context.');
495
+ },
496
+ querySelector(..._) {
497
+ throw new Error('renderer.querySelector cannot be used in SSR context.');
498
+ },
499
+ querySelectorAll(..._) {
500
+ throw new Error('renderer.querySelectorAll cannot be used in SSR context.');
501
+ },
502
+ getElementsByTagName(..._) {
503
+ throw new Error('renderer.getElementsByTagName cannot be used in SSR context.');
504
+ },
505
+ getElementsByClassName(..._) {
506
+ throw new Error('renderer.getElementsByClassName cannot be used in SSR context.');
507
+ },
508
+ getChildren(..._) {
509
+ throw new Error('renderer.getChildren cannot be used in SSR context.');
510
+ },
511
+ getChildNodes(..._) {
512
+ throw new Error('renderer.getChildNodes cannot be used in SSR context.');
513
+ },
514
+ getFirstChild(..._) {
515
+ throw new Error('renderer.getFirstChild cannot be used in SSR context.');
516
+ },
517
+ getFirstElementChild(..._) {
518
+ throw new Error('renderer.getFirstElementChild cannot be used in SSR context.');
519
+ },
520
+ getLastChild(..._) {
521
+ throw new Error('renderer.getLastChild cannot be used in SSR context.');
522
+ },
523
+ getLastElementChild(..._) {
524
+ throw new Error('renderer.getLastElementChild cannot be used in SSR context.');
525
+ },
526
+ getTagName(..._) {
527
+ throw new Error('renderer.getTagName cannot be used in SSR context.');
528
+ },
529
+ getStyle(..._) {
530
+ throw new Error('renderer.getStyle cannot be used in SSR context.');
531
+ },
532
+ isConnected(..._) {
533
+ throw new Error('renderer.isConnected cannot be used in SSR context.');
534
+ },
535
+ insertStylesheet(..._) {
536
+ throw new Error('renderer.insertStylesheet cannot be used in SSR context.');
537
+ },
538
+ assertInstanceOfHTMLElement(..._) {
539
+ throw new Error('renderer.assertInstanceOfHTMLElement cannot be used in SSR context.');
540
+ },
541
+ ownerDocument(..._) {
542
+ throw new Error('renderer.ownerDocument cannot be used in SSR context.');
543
+ },
544
+ registerContextConsumer(..._) {
545
+ throw new Error('renderer.registerContextConsumer cannot be used in SSR context.');
546
+ },
547
+ attachInternals(..._) {
548
+ throw new Error('renderer.attachInternals cannot be used in SSR context.');
549
+ },
550
+ defineCustomElement(..._) {
551
+ throw new Error('renderer.defineCustomElement cannot be used in SSR context.');
552
+ },
553
+ getParentNode(..._) {
554
+ throw new Error('renderer.getParentNode cannot be used in SSR context.');
555
+ },
556
+ startTrackingMutations(..._) {
557
+ throw new Error('renderer.startTrackingMutations cannot be used in SSR context.');
558
+ },
559
+ stopTrackingMutations(..._) {
560
+ throw new Error('renderer.stopTrackingMutations cannot be used in SSR context.');
561
+ },
562
+ };
563
+ /**
564
+ * The hot API is used to orchestrate hot swapping in client rendered components.
565
+ * It doesn't do anything on the server side, however, you may import it.
566
+ *
567
+ * The whole point of defining this and exporting it is so that you can import it in isomorphic code without
568
+ * an error being thrown by the import itself.
569
+ */
570
+ // A real stub, not a "not implemented" one! 😯
571
+ const hot = undefined;
572
+
573
+ /*
574
+ * Copyright (c) 2024, salesforce.com, inc.
575
+ * All rights reserved.
576
+ * SPDX-License-Identifier: MIT
577
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
578
+ */
579
+ /**
580
+ * Converts an iterable into one that emits the object used by the [`iterator` directive](
581
+ * https://lwc.dev/guide/html_templates#iterator).
582
+ */
583
+ function* toIteratorDirective(iterable) {
584
+ if (iterable === undefined || iterable === null)
585
+ return;
586
+ if (!iterable[Symbol.iterator]) {
587
+ throw new Error(
588
+ // Mimic error message from "[i]terable node" in engine-core's api.ts
589
+ `Invalid template iteration for value \`${iterable}\`. It must be an array-like object.`);
590
+ }
591
+ const iterator = iterable[Symbol.iterator]();
592
+ let next = iterator.next();
593
+ let index = 0;
594
+ let { value, done: last = false } = next;
595
+ while (last === false) {
596
+ // using a look-back approach because we need to know if the element is the last
597
+ next = iterator.next();
598
+ last = next.done ?? false;
599
+ yield {
600
+ value,
601
+ index,
602
+ first: index === 0,
603
+ last,
604
+ };
605
+ index += 1;
606
+ value = next.value;
607
+ }
608
+ }
609
+
610
+ /*
611
+ * Copyright (c) 2024, Salesforce, Inc.
612
+ * All rights reserved.
613
+ * SPDX-License-Identifier: MIT
614
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
615
+ */
616
+ /**
617
+ * Per the HTML spec on restrictions for "raw text elements" like `<style>`:
618
+ *
619
+ * > The text in raw text and escapable raw text elements must not contain any occurrences of the string
620
+ * > "</" (U+003C LESS-THAN SIGN, U+002F SOLIDUS) followed by characters that case-insensitively match the tag name of
621
+ * > the element followed by one of:
622
+ * > - U+0009 CHARACTER TABULATION (tab)
623
+ * > - U+000A LINE FEED (LF)
624
+ * > - U+000C FORM FEED (FF)
625
+ * > - U+000D CARRIAGE RETURN (CR)
626
+ * > - U+0020 SPACE
627
+ * > - U+003E GREATER-THAN SIGN (>), or
628
+ * > - U+002F SOLIDUS (/)
629
+ * @see https://html.spec.whatwg.org/multipage/syntax.html#cdata-rcdata-restrictions
630
+ */
631
+ const INVALID_STYLE_CONTENT = /<\/style[\t\n\f\r >/]/i;
632
+ /**
633
+ * The text content inside `<style>` is a special case. It is _only_ rendered by the LWC engine itself; `<style>` tags
634
+ * are disallowed inside of HTML templates.
635
+ *
636
+ * The `<style>` tag is unusual in how it's defined in HTML. Like `<script>`, it is considered a "raw text element,"
637
+ * which means that it is parsed as raw text, but certain character sequences are disallowed, namely to avoid XSS
638
+ * attacks like `</style><script>alert("pwned")</script>`.
639
+ *
640
+ * This also means that we cannot use "normal" HTML escaping inside `<style>` tags, e.g. we cannot use `&lt;`,
641
+ * `&gt;`, etc., because these are treated as-is by the HTML parser.
642
+ *
643
+ *
644
+ * @param contents CSS source to validate
645
+ * @throws Throws if the contents provided are not valid.
646
+ * @see https://html.spec.whatwg.org/multipage/syntax.html#raw-text-elements
647
+ * @see https://github.com/salesforce/lwc/issues/3439
648
+ * @example
649
+ * validateStyleTextContents('div { color: red }') // Ok
650
+ * validateStyleTextContents('</style><script>alert("pwned")</script>') // Throws
651
+ */
652
+ function validateStyleTextContents(contents) {
653
+ if (INVALID_STYLE_CONTENT.test(contents)) {
654
+ throw new Error('CSS contains unsafe characters and cannot be serialized inside a style element');
655
+ }
656
+ }
657
+
658
+ exports.ClassList = ClassList;
291
659
  exports.LightningElement = LightningElement;
660
+ exports.SYMBOL__SET_INTERNALS = SYMBOL__SET_INTERNALS;
661
+ exports.api = api;
662
+ exports.createContextProvider = createContextProvider;
663
+ exports.createElement = createElement;
292
664
  exports.fallbackTmpl = fallbackTmpl;
665
+ exports.freezeTemplate = freezeTemplate;
666
+ exports.getComponentDef = getComponentDef;
667
+ exports.hot = hot;
668
+ exports.isComponentConstructor = isComponentConstructor;
669
+ exports.mutationTracker = mutationTracker;
670
+ exports.parseFragment = parseFragment;
671
+ exports.parseSVGFragment = parseSVGFragment;
672
+ exports.readonly = readonly;
673
+ exports.registerComponent = registerComponent;
674
+ exports.registerDecorators = registerDecorators;
675
+ exports.registerTemplate = registerTemplate;
293
676
  exports.renderAttrs = renderAttrs;
677
+ exports.renderComponent = serverSideRenderComponent;
678
+ exports.renderer = renderer;
679
+ exports.sanitizeAttribute = sanitizeAttribute;
294
680
  exports.serverSideRenderComponent = serverSideRenderComponent;
681
+ exports.setFeatureFlag = setFeatureFlag;
682
+ exports.setFeatureFlagForTest = setFeatureFlagForTest;
683
+ exports.setHooks = setHooks;
684
+ exports.swapComponent = swapComponent;
685
+ exports.swapStyle = swapStyle;
686
+ exports.swapTemplate = swapTemplate;
687
+ exports.toIteratorDirective = toIteratorDirective;
688
+ exports.track = track;
689
+ exports.unwrap = unwrap;
295
690
  exports.validateStyleTextContents = validateStyleTextContents;
296
- /** version: 8.1.3 */
691
+ exports.wire = wire;
692
+ /** version: 8.3.0 */
297
693
  //# sourceMappingURL=index.cjs.js.map