@lwc/ssr-runtime 8.4.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +178 -27
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +176 -28
- package/dist/index.js.map +1 -1
- package/dist/lightning-element.d.ts +12 -9
- package/dist/reflection.d.ts +1 -1
- package/dist/render.d.ts +5 -2
- package/dist/styles.d.ts +4 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
@@ -146,6 +146,8 @@ defineProperty,
|
|
146
146
|
entries,
|
147
147
|
/** Detached {@linkcode Object.freeze}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze MDN Reference}. */
|
148
148
|
freeze,
|
149
|
+
/** Detached {@linkcode Object.fromEntries}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries MDN Reference}. */
|
150
|
+
fromEntries,
|
149
151
|
/** Detached {@linkcode Object.getOwnPropertyDescriptor}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor MDN Reference}. */
|
150
152
|
getOwnPropertyDescriptor,
|
151
153
|
/** Detached {@linkcode Object.getOwnPropertyDescriptors}; see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors MDN Reference}. */
|
@@ -328,7 +330,19 @@ function htmlEscape(str, attrMode = false) {
|
|
328
330
|
const searchValue = attrMode ? /["&]/g : /["'<>&]/g;
|
329
331
|
return str.replace(searchValue, (char) => ESCAPED_CHARS[char]);
|
330
332
|
}
|
331
|
-
|
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 */
|
332
346
|
|
333
347
|
/*
|
334
348
|
* Copyright (c) 2024, Salesforce, Inc.
|
@@ -377,8 +391,102 @@ const mutationTracker = new MutationTracker();
|
|
377
391
|
* SPDX-License-Identifier: MIT
|
378
392
|
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
379
393
|
*/
|
380
|
-
|
381
|
-
|
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
|
+
});
|
410
|
+
/**
|
411
|
+
* Descriptor for IDL attribute reflections that merely reflect the string, e.g. `title`.
|
412
|
+
*/
|
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
|
+
});
|
443
|
+
/**
|
444
|
+
* Descriptor for a "true" boolean attribute that checks solely for presence, e.g. `hidden`.
|
445
|
+
*/
|
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
|
+
});
|
466
|
+
/**
|
467
|
+
* Descriptor for ARIA reflections, e.g. `ariaLabel` and `role`.
|
468
|
+
*/
|
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
|
+
}
|
487
|
+
}
|
488
|
+
},
|
489
|
+
});
|
382
490
|
function reflectAttrToProp(instance, attrName, attrValue) {
|
383
491
|
const reflectedPropName = attrsToProps[attrName];
|
384
492
|
// If it is a reflected property and it was not overridden by the instance
|
@@ -389,30 +497,34 @@ function reflectAttrToProp(instance, attrName, attrValue) {
|
|
389
497
|
}
|
390
498
|
}
|
391
499
|
}
|
392
|
-
const descriptors =
|
393
|
-
|
394
|
-
|
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: {
|
395
509
|
get() {
|
396
|
-
|
510
|
+
const str = this.getAttribute('tabindex');
|
511
|
+
const num = Number(str);
|
512
|
+
return isFinite(num) ? Math.trunc(num) : -1;
|
397
513
|
},
|
398
514
|
set(newValue) {
|
399
|
-
const currentValue = this.getAttribute(
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
// See also https://github.com/w3c/aria/issues/1858
|
405
|
-
if (isNull(newValue)) {
|
406
|
-
this.removeAttribute(attrName);
|
407
|
-
}
|
408
|
-
else {
|
409
|
-
this.setAttribute(attrName, toString(newValue));
|
410
|
-
}
|
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));
|
411
520
|
}
|
412
521
|
},
|
413
|
-
|
414
|
-
|
415
|
-
|
522
|
+
},
|
523
|
+
title: stringDescriptor('title'),
|
524
|
+
};
|
525
|
+
// Add descriptors for ARIA attributes
|
526
|
+
for (const [attrName, propName] of entries(AriaAttrNameToPropNameMap)) {
|
527
|
+
descriptors[propName] = ariaDescriptor(attrName);
|
416
528
|
}
|
417
529
|
|
418
530
|
/*
|
@@ -423,6 +535,7 @@ for (const [attrName, propName] of entries(attrsToProps)) {
|
|
423
535
|
*/
|
424
536
|
var _LightningElement_attrs, _LightningElement_classList;
|
425
537
|
const SYMBOL__SET_INTERNALS = Symbol('set-internals');
|
538
|
+
const SYMBOL__GENERATE_MARKUP = Symbol('generate-markup');
|
426
539
|
class LightningElement {
|
427
540
|
constructor(propsAvailableAtConstruction) {
|
428
541
|
this.isConnected = false;
|
@@ -599,21 +712,26 @@ function fallbackTmplNoYield(emit, _props, _attrs, _slotted, Cmp, _instance) {
|
|
599
712
|
emit('<template shadowrootmode="open"></template>');
|
600
713
|
}
|
601
714
|
}
|
602
|
-
async function serverSideRenderComponent(tagName,
|
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}`);
|
718
|
+
}
|
719
|
+
// TODO [#4726]: remove `generateMarkup` export
|
720
|
+
const generateMarkup = SYMBOL__GENERATE_MARKUP in Component ? Component[SYMBOL__GENERATE_MARKUP] : Component;
|
603
721
|
let markup = '';
|
604
722
|
const emit = (segment) => {
|
605
723
|
markup += segment;
|
606
724
|
};
|
607
725
|
if (mode === 'asyncYield') {
|
608
|
-
for await (const segment of
|
726
|
+
for await (const segment of generateMarkup(tagName, props, null, null)) {
|
609
727
|
markup += segment;
|
610
728
|
}
|
611
729
|
}
|
612
730
|
else if (mode === 'async') {
|
613
|
-
await
|
731
|
+
await generateMarkup(emit, tagName, props, null, null);
|
614
732
|
}
|
615
733
|
else if (mode === 'sync') {
|
616
|
-
|
734
|
+
generateMarkup(emit, tagName, props, null, null);
|
617
735
|
}
|
618
736
|
else {
|
619
737
|
throw new Error(`Invalid mode: ${mode}`);
|
@@ -927,6 +1045,36 @@ function validateStyleTextContents(contents) {
|
|
927
1045
|
}
|
928
1046
|
}
|
929
1047
|
|
930
|
-
|
931
|
-
|
1048
|
+
/*
|
1049
|
+
* Copyright (c) 2024, Salesforce, Inc.
|
1050
|
+
* All rights reserved.
|
1051
|
+
* SPDX-License-Identifier: MIT
|
1052
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
1053
|
+
*/
|
1054
|
+
function hasScopedStaticStylesheets(Component) {
|
1055
|
+
const { stylesheets } = Component;
|
1056
|
+
if (stylesheets) {
|
1057
|
+
return flattenStylesheets(stylesheets).some((stylesheet) => stylesheet.$scoped$);
|
1058
|
+
}
|
1059
|
+
return false;
|
1060
|
+
}
|
1061
|
+
function renderStylesheets(stylesheets, scopeToken, Component, hasScopedTemplateStyles) {
|
1062
|
+
const hasAnyScopedStyles = hasScopedTemplateStyles || hasScopedStaticStylesheets(Component);
|
1063
|
+
let result = '';
|
1064
|
+
const truthyStylesheets = stylesheets.filter(Boolean);
|
1065
|
+
for (const stylesheet of flattenStylesheets(truthyStylesheets)) {
|
1066
|
+
// TODO [#2869]: `<style>`s should not have scope token classes
|
1067
|
+
result += `<style${hasAnyScopedStyles ? ` class="${scopeToken}"` : ''} type="text/css">`;
|
1068
|
+
const token = stylesheet.$scoped$ ? scopeToken : undefined;
|
1069
|
+
const useActualHostSelector = !stylesheet.$scoped$ || Component.renderMode !== 'light';
|
1070
|
+
const useNativeDirPseudoclass = true;
|
1071
|
+
const styleContents = stylesheet(token, useActualHostSelector, useNativeDirPseudoclass);
|
1072
|
+
validateStyleTextContents(styleContents);
|
1073
|
+
result += styleContents + '</style>';
|
1074
|
+
}
|
1075
|
+
return result;
|
1076
|
+
}
|
1077
|
+
|
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 */
|
932
1080
|
//# sourceMappingURL=index.js.map
|