diff --git a/apps/sap-commerce-cloud/coverage/base.css b/apps/sap-commerce-cloud/coverage/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/apps/sap-commerce-cloud/coverage/block-navigation.js b/apps/sap-commerce-cloud/coverage/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/apps/sap-commerce-cloud/coverage/clover.xml b/apps/sap-commerce-cloud/coverage/clover.xml new file mode 100644 index 0000000000..d8562123f9 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/clover.xml @@ -0,0 +1,1374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/sap-commerce-cloud/coverage/coverage-final.json b/apps/sap-commerce-cloud/coverage/coverage-final.json new file mode 100644 index 0000000000..a8ff070d03 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/coverage-final.json @@ -0,0 +1,29 @@ +{"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/index.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/index.tsx","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":46}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":95}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":46}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":45}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":48}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":21}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":49}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":16}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":46}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":37}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":5}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":46}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":18}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":18}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":50}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":39}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":24}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":132}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":24}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":33}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":13}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":32}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":35}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":41}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":29}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":29}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":14}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":13}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":30}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":33}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":26}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":123}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":29}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":29}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":26}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":14}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":12}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":41}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":6}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":5}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":47}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":67}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":6}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":5}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":42}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":69}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":6}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":4}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":67}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":61}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":54}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":5}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":5}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}}},"s":{"0":0,"2":0,"3":0,"4":0,"6":0,"7":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":68,"column":-1652}},"locations":[{"start":{"line":1,"column":0},"end":{"line":68,"column":-1652}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":68,"column":-1652}},"loc":{"start":{"line":1,"column":0},"end":{"line":68,"column":-1652}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/interfaces.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/interfaces.ts","all":true,"statementMap":{},"s":{},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":8103},"end":{"line":293,"column":62}},"locations":[{"start":{"line":1,"column":8103},"end":{"line":293,"column":62}}]}},"b":{"0":[1]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":8103},"end":{"line":293,"column":62}},"loc":{"start":{"line":1,"column":8103},"end":{"line":293,"column":62}},"line":1}},"f":{"0":1}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/setupTests.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/setupTests.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":35}}},"s":{"0":1,"4":1},"branchMap":{},"b":{},"fnMap":{},"f":{}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/utils.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/utils.ts","all":false,"statementMap":{"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":62}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":27}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":8}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":47}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":21}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":56}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":5}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":97}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":61}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}}},"s":{"6":1,"7":4,"8":4,"9":4,"10":4,"11":4,"12":0,"13":0,"14":0,"15":4,"16":4,"17":4,"26":1,"27":0,"28":0},"branchMap":{"0":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":23},"end":{"line":18,"column":2}},"locations":[{"start":{"line":7,"column":23},"end":{"line":18,"column":2}}]}},"b":{"0":[4]},"fnMap":{"0":{"name":"mapSort","decl":{"start":{"line":7,"column":23},"end":{"line":18,"column":2}},"loc":{"start":{"line":7,"column":23},"end":{"line":18,"column":2}},"line":7},"1":{"name":"formatProductUrl","decl":{"start":{"line":27,"column":32},"end":{"line":29,"column":2}},"loc":{"start":{"line":27,"column":32},"end":{"line":29,"column":2}},"line":27}},"f":{"0":4,"1":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/AppConfig.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/AppConfig.styles.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":13}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":19}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":21}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":56}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":38}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":39}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":14}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":49}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":24}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":5}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":32}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":9}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":23}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":27}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":17}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":29}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":7}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":16}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":36}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":5}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":17}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":31}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":34}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":14}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":18}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":36}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":5}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":13}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":20}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":29}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":14}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":20}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":38}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":2}}},"s":{"0":1,"1":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1},"branchMap":{"0":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":14},"end":{"line":26,"column":7}},"locations":[{"start":{"line":17,"column":14},"end":{"line":26,"column":7}}]}},"b":{"0":[2]},"fnMap":{"0":{"name":"background","decl":{"start":{"line":17,"column":14},"end":{"line":26,"column":7}},"loc":{"start":{"line":17,"column":14},"end":{"line":26,"column":7}},"line":17}},"f":{"0":2}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/AppConfig.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/AppConfig.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":36}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":66}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":18}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":44}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":70}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":11}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":21}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":25}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":23}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":73}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":21}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":16}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":4}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":23}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":16}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":22}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":41}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":79}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":30}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":34}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":26}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":89}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":88}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":63}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":62}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":49}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":41}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":7}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":18}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":7}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":43}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":84}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":83}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":8}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":26}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":6}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":4}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":26}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":68}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":60}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":16}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":43}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":19}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":12}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":79}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":77}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":6}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":4}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":12}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":12}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":8}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":63}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":37}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":52}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":57}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":44}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":28}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":14}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":37}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":54}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":14}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":9}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":3}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":80}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":38}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":31}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":56}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":8}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":4}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":64}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":38}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":4}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":15}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":86}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":53}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":35}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":39}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":92}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":12}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":8}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":37}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":12}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":44}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":18}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":50}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":53}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":24}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":40}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":69}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":30}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":47}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":31}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":30}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":32}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":37}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":72}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":70}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":48}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":74}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":22}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":82}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":32}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":17}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":19}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":46}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":13}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":43}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":36}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":21}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":78}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":98}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":22}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":12}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":23}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":80}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":55}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":24}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":36}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":100}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":63}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":23}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":33}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":31}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":41}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":22}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":42}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":81}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":109}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":18}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":30}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":19}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":13}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":22}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":37}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":45}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":41}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":62}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":10}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":9}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":3}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":1}}},"s":{"0":1,"11":1,"13":1,"15":1,"25":1,"29":1,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2,"56":2,"58":2,"59":2,"60":2,"62":2,"63":1,"65":1,"67":1,"68":1,"69":1,"70":1,"71":1,"73":1,"74":1,"76":1,"77":1,"78":1,"79":1,"80":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"93":2,"94":1,"95":1,"97":1,"98":0,"99":0,"100":0,"102":1,"103":1,"104":1,"105":1,"106":1,"108":2,"109":2,"110":2,"111":2,"112":2,"113":2,"114":2,"115":2,"116":2,"117":2,"118":2,"119":2,"120":2,"121":2,"123":2,"125":2,"126":0,"128":0,"129":0,"130":0,"131":0,"133":2,"134":0,"135":0,"137":1,"138":2,"139":2,"140":2,"141":2,"142":2,"144":2,"145":2,"146":2,"147":2,"148":2,"149":2,"150":2,"151":2,"153":2,"154":2,"155":2,"156":2,"157":2,"158":2,"159":2,"160":2,"161":2,"162":2,"163":2,"164":2,"165":2,"166":2,"167":2,"168":2,"170":2,"171":2,"172":2,"173":2,"175":2,"176":2,"177":0,"178":0,"179":0,"181":0,"183":2,"184":2,"185":2,"186":2,"187":2,"188":2,"189":2,"190":2,"191":2,"192":2,"193":2,"194":2,"195":2,"196":2,"197":2,"198":0,"199":2,"201":2,"203":2,"204":2,"206":2,"207":2,"208":2,"209":2,"210":2,"211":2,"212":2,"214":2,"215":1},"branchMap":{"0":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":0},"end":{"line":136,"column":4}},"locations":[{"start":{"line":49,"column":0},"end":{"line":136,"column":4}}]},"1":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":9},"end":{"line":92,"column":4}},"locations":[{"start":{"line":63,"column":9},"end":{"line":92,"column":4}}]},"2":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":53},"end":{"line":81,"column":5}},"locations":[{"start":{"line":78,"column":53},"end":{"line":81,"column":5}}]},"3":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":6},"end":{"line":90,"column":26}},"locations":[{"start":{"line":90,"column":6},"end":{"line":90,"column":26}}]},"4":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":19},"end":{"line":107,"column":4}},"locations":[{"start":{"line":94,"column":19},"end":{"line":107,"column":4}}]},"5":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":15},"end":{"line":101,"column":5}},"locations":[{"start":{"line":98,"column":15},"end":{"line":101,"column":5}}]},"6":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":2},"end":{"line":124,"column":3}},"locations":[{"start":{"line":109,"column":2},"end":{"line":124,"column":3}}]},"7":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":2},"end":{"line":215,"column":3}},"locations":[{"start":{"line":138,"column":2},"end":{"line":215,"column":3}}]},"8":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":31},"end":{"line":182,"column":22}},"locations":[{"start":{"line":177,"column":31},"end":{"line":182,"column":22}}]},"9":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":65},"end":{"line":199,"column":109}},"locations":[{"start":{"line":198,"column":65},"end":{"line":199,"column":109}}]},"10":{"type":"branch","line":151,"loc":{"start":{"line":151,"column":40},"end":{"line":171,"column":15}},"locations":[{"start":{"line":151,"column":40},"end":{"line":171,"column":15}}]},"11":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":53},"end":{"line":163,"column":72}},"locations":[{"start":{"line":163,"column":53},"end":{"line":163,"column":72}}]},"12":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":52},"end":{"line":164,"column":70}},"locations":[{"start":{"line":164,"column":52},"end":{"line":164,"column":70}}]}},"b":{"0":[2],"1":[1],"2":[1],"3":[1],"4":[1],"5":[0],"6":[2],"7":[2],"8":[0],"9":[0],"10":[2],"11":[0],"12":[0]},"fnMap":{"0":{"name":"AppConfig","decl":{"start":{"line":49,"column":0},"end":{"line":136,"column":4}},"loc":{"start":{"line":49,"column":0},"end":{"line":136,"column":4}},"line":49},"1":{"name":"AppConfig.init","decl":{"start":{"line":63,"column":9},"end":{"line":92,"column":4}},"loc":{"start":{"line":63,"column":9},"end":{"line":92,"column":4}},"line":63},"2":{"name":"AppConfig.onAppConfigure","decl":{"start":{"line":94,"column":19},"end":{"line":107,"column":4}},"loc":{"start":{"line":94,"column":19},"end":{"line":107,"column":4}},"line":94},"3":{"name":"AppConfig.onParameterChange","decl":{"start":{"line":126,"column":22},"end":{"line":132,"column":4}},"loc":{"start":{"line":126,"column":22},"end":{"line":132,"column":4}},"line":126},"4":{"name":"AppConfig.onSelectedFieldsChange","decl":{"start":{"line":134,"column":27},"end":{"line":136,"column":4}},"loc":{"start":{"line":134,"column":27},"end":{"line":136,"column":4}},"line":134},"5":{"name":"render","decl":{"start":{"line":109,"column":2},"end":{"line":124,"column":3}},"loc":{"start":{"line":109,"column":2},"end":{"line":124,"column":3}},"line":109},"6":{"name":"renderApp","decl":{"start":{"line":138,"column":2},"end":{"line":215,"column":3}},"loc":{"start":{"line":138,"column":2},"end":{"line":215,"column":3}},"line":138}},"f":{"0":2,"1":1,"2":1,"3":0,"4":0,"5":2,"6":2}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/FieldSelector.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/FieldSelector.styles.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":53}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":2}}},"s":{"0":1,"1":1,"3":1,"4":1,"5":1},"branchMap":{},"b":{},"fnMap":{},"f":{}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/FieldSelector.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/FieldSelector.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":48}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":85}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":67}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":27}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":17}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":42}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":8}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":53}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":34}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":62}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":12}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":77}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":5}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":47}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":4}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":12}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":74}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":12}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":8}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":35}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":53}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":18}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":66}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":48}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":20}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":40}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":73}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":29}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":36}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":35}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":83}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":49}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":86}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":92}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":34}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":31}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":32}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":19}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":21}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":18}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":11}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":3}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":1}}},"s":{"0":1,"1":1,"2":1,"13":1,"14":1,"15":0,"16":0,"17":0,"18":0,"19":0,"21":0,"22":0,"23":0,"24":0,"25":0,"27":0,"28":0,"30":1,"31":2,"33":2,"34":2,"35":2,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"57":2,"58":2,"60":2,"61":1},"branchMap":{"0":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":0},"end":{"line":29,"column":4}},"locations":[{"start":{"line":14,"column":0},"end":{"line":29,"column":4}}]},"1":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":61,"column":3}},"locations":[{"start":{"line":31,"column":2},"end":{"line":61,"column":3}}]}},"b":{"0":[1],"1":[2]},"fnMap":{"0":{"name":"FieldSelector","decl":{"start":{"line":14,"column":0},"end":{"line":29,"column":4}},"loc":{"start":{"line":14,"column":0},"end":{"line":29,"column":4}},"line":14},"1":{"name":"FieldSelector.onSelectedFieldChange","decl":{"start":{"line":15,"column":26},"end":{"line":29,"column":4}},"loc":{"start":{"line":15,"column":26},"end":{"line":29,"column":4}},"line":15},"2":{"name":"render","decl":{"start":{"line":31,"column":2},"end":{"line":61,"column":3}},"loc":{"start":{"line":31,"column":2},"end":{"line":61,"column":3}},"line":31}},"f":{"0":1,"1":0,"2":2}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/fields.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/fields.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":41}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":95}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":1}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":84}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":12}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":13}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":63}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":9}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":49}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":25}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":16}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":19}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":34}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":62}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":46}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":91}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":40}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":78}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":38}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":42}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":12}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":17}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":5}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":9}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":1}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":44}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":30}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":32}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":3}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":10}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":55}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":28}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":46}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":86}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":43}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":11}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":4}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}}},"s":{"0":1,"33":1,"34":1,"35":1,"36":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"58":1,"59":0,"60":1,"61":1,"62":1,"63":1,"64":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":0,"73":0,"74":0,"75":0,"77":0,"78":1,"79":1,"80":1},"branchMap":{"0":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":0},"end":{"line":37,"column":1}},"locations":[{"start":{"line":34,"column":0},"end":{"line":37,"column":1}}]},"1":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":37},"end":{"line":36,"column":95}},"locations":[{"start":{"line":36,"column":37},"end":{"line":36,"column":95}}]},"2":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":7},"end":{"line":46,"column":1}},"locations":[{"start":{"line":39,"column":7},"end":{"line":46,"column":1}}]},"3":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":29},"end":{"line":45,"column":5}},"locations":[{"start":{"line":40,"column":29},"end":{"line":45,"column":5}}]},"4":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":23},"end":{"line":43,"column":37}},"locations":[{"start":{"line":43,"column":23},"end":{"line":43,"column":37}}]},"5":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":7},"end":{"line":65,"column":1}},"locations":[{"start":{"line":48,"column":7},"end":{"line":65,"column":1}}]},"6":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":20},"end":{"line":64,"column":5}},"locations":[{"start":{"line":52,"column":20},"end":{"line":64,"column":5}}]},"7":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":37},"end":{"line":61,"column":11}},"locations":[{"start":{"line":59,"column":37},"end":{"line":61,"column":11}}]},"8":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":7},"end":{"line":81,"column":1}},"locations":[{"start":{"line":67,"column":7},"end":{"line":81,"column":1}}]}},"b":{"0":[1],"1":[0],"2":[1],"3":[1],"4":[0],"5":[1],"6":[1],"7":[0],"8":[1]},"fnMap":{"0":{"name":"isCompatibleField","decl":{"start":{"line":34,"column":0},"end":{"line":37,"column":1}},"loc":{"start":{"line":34,"column":0},"end":{"line":37,"column":1}},"line":34},"1":{"name":"getCompatibleFields","decl":{"start":{"line":39,"column":7},"end":{"line":46,"column":1}},"loc":{"start":{"line":39,"column":7},"end":{"line":46,"column":1}},"line":39},"2":{"name":"editorInterfacesToSelectedFields","decl":{"start":{"line":48,"column":7},"end":{"line":65,"column":1}},"loc":{"start":{"line":48,"column":7},"end":{"line":65,"column":1}},"line":48},"3":{"name":"selectedFieldsToTargetState","decl":{"start":{"line":67,"column":7},"end":{"line":81,"column":1}},"loc":{"start":{"line":67,"column":7},"end":{"line":81,"column":1}},"line":67}},"f":{"0":1,"1":1,"2":1,"3":1}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/parameters.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/AppConfig/parameters.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":46}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":32}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":84}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":12}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":13}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":66}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":6}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":9}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":32}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":46}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":37}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":52}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":12}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":13}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":68}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":6}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":9}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":1}}},"s":{"0":1,"4":1,"5":4,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":7},"end":{"line":16,"column":1}},"locations":[{"start":{"line":5,"column":7},"end":{"line":16,"column":1}}]},"1":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":37},"end":{"line":15,"column":5}},"locations":[{"start":{"line":9,"column":37},"end":{"line":15,"column":5}}]},"2":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":48},"end":{"line":10,"column":67}},"locations":[{"start":{"line":10,"column":48},"end":{"line":10,"column":67}}]},"3":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":62},"end":{"line":10,"column":84}},"locations":[{"start":{"line":10,"column":62},"end":{"line":10,"column":84}}]},"4":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":7},"end":{"line":29,"column":1}},"locations":[{"start":{"line":18,"column":7},"end":{"line":29,"column":1}}]},"5":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":37},"end":{"line":28,"column":5}},"locations":[{"start":{"line":22,"column":37},"end":{"line":28,"column":5}}]},"6":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":29},"end":{"line":26,"column":62}},"locations":[{"start":{"line":26,"column":29},"end":{"line":26,"column":62}}]}},"b":{"0":[4],"1":[4],"2":[2],"3":[2],"4":[1],"5":[1],"6":[0]},"fnMap":{"0":{"name":"toInputParameters","decl":{"start":{"line":5,"column":7},"end":{"line":16,"column":1}},"loc":{"start":{"line":5,"column":7},"end":{"line":16,"column":1}},"line":5},"1":{"name":"toAppParameters","decl":{"start":{"line":18,"column":7},"end":{"line":29,"column":1}},"loc":{"start":{"line":18,"column":7},"end":{"line":29,"column":1}},"line":18}},"f":{"0":4,"1":1}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/index.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/index.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}}},"s":{"0":1},"branchMap":{},"b":{},"fnMap":{},"f":{}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/mockProductPreview.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/mockProductPreview.ts","all":false,"statementMap":{"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":17}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":12}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":12}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":19}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":33}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":2}}},"s":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1},"branchMap":{},"b":{},"fnMap":{},"f":{}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/mockSdk.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/__mocks__/mockSdk.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":8}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":4}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":14}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":4}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":27},"end":{"line":8,"column":3}},"locations":[{"start":{"line":1,"column":27},"end":{"line":8,"column":3}}]}},"b":{"0":[1]},"fnMap":{"0":{"name":"makeSdkMock","decl":{"start":{"line":1,"column":27},"end":{"line":8,"column":3}},"loc":{"start":{"line":1,"column":27},"end":{"line":8,"column":3}},"line":1}},"f":{"0":1}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/dataTransformers.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/dataTransformers.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":33}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":45}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":47}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":21}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":28}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":37}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":55}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":40}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":5}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":40}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":43}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":16}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":59}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":12}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":9}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":22}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":35}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":64}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":33}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":10}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":6}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":4}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":34}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":7}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":27}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":34}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":4}}},"s":{"0":0,"3":0,"4":0,"5":0,"6":0,"7":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"33":0,"34":0,"35":0,"36":0,"37":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":38,"column":-24}},"locations":[{"start":{"line":1,"column":0},"end":{"line":38,"column":-24}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":38,"column":-24}},"loc":{"start":{"line":1,"column":0},"end":{"line":38,"column":-24}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchBaseSites.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchBaseSites.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":84}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":72}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":7}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":38}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":22}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":49}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":77}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":23}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":19}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":16}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":1}}},"s":{"0":0,"3":0,"4":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":-5}},"locations":[{"start":{"line":1,"column":0},"end":{"line":18,"column":-5}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":18,"column":-5}},"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":-5}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchProductList.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchProductList.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":76}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":56}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":39}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":19}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":22}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":15}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":38}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":22}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":25}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":12}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":17}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":6}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":36}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":41}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":16}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":35}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":10}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":4}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":45}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":50}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":63}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":6}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":63}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":27}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":14}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":21}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":17}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":11}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":73}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":30}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":12}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":10}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":8}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":5}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":36}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":58}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":1}}},"s":{"0":0,"1":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"17":0,"18":0,"19":0,"20":0,"21":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":1239},"end":{"line":48,"column":1}},"locations":[{"start":{"line":1,"column":1239},"end":{"line":48,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":1239},"end":{"line":48,"column":1}},"loc":{"start":{"line":1,"column":1239},"end":{"line":48,"column":1}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchProductPreviews.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/api/fetchProductPreviews.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":43}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":56}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":43}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":17}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":23}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":21}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":14}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":54}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":27}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":58}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":23}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":33}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":279}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":38}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":47}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":39}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":5}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":99}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":73}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":71}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":39}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":14}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":13}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":20}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":37}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":6}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}}},"s":{"0":0,"2":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"12":0,"13":0,"14":0,"16":0,"17":0,"18":0,"19":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":1457},"end":{"line":41,"column":1}},"locations":[{"start":{"line":1,"column":1457},"end":{"line":41,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":1457},"end":{"line":41,"column":1}},"loc":{"start":{"line":1,"column":1457},"end":{"line":41,"column":1}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/fields.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/fields.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":29}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":51}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":33}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":1}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":84}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":43}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":12}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":13}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":63}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":9}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":49}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":25}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":16}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":17}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":34}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":62}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":91}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":40}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":78}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":38}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":56}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":67}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":19}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":13}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":40}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":12}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":17}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":5}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":9}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":1}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":44}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":30}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":30}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":3}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":10}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":55}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":28}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":59}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":25}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":86}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":43}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":11}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":4}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":1}}},"s":{"0":0,"1":0,"34":0,"35":0,"36":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":2228},"end":{"line":87,"column":1}},"locations":[{"start":{"line":1,"column":2228},"end":{"line":87,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":2228},"end":{"line":87,"column":1}},"loc":{"start":{"line":1,"column":2228},"end":{"line":87,"column":1}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/Dialog.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/Dialog.styles.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":78}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":43}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":35}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":47}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":85}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":57}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}}},"s":{"0":0,"1":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":12,"column":-241}},"locations":[{"start":{"line":1,"column":0},"end":{"line":12,"column":-241}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":12,"column":-241}},"loc":{"start":{"line":1,"column":0},"end":{"line":12,"column":-241}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/Dialog.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/Dialog.tsx","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":44}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":58}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":29}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":33}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":47}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":41}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":34}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":61}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":73}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":17}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":18}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":14}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":12}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":18}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":17}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":25}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":15}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":4}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":23}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":37}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":18}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":7}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":22}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":56}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":26}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":23}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":22}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":49}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":27}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":6}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":19}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":36}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":38}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":30}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":25}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":52}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":21}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":7}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":4}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":31}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":87}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":38}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":99}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":49}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":41}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":72}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":40}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":9}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":7}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":12}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":33}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":5}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":19}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":34}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":32}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":30}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":28}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":19}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":27}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":7}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":4}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":38}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":19}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":20}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":32}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":7}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":4}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":36}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":18}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":7}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":22}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":37}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":8}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":13}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":20}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":7}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":6}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":4}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":53}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":65}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":42}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":31}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":46}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":89}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":89}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":23}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":45}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":11}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":7}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":12}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":45}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":57}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":45}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":23}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":45}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":11}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":5}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":4}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":46}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":34}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":4}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":44}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":97}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":74}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":39}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":4}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":28}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":16}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":31}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":60}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":4}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":31}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":60}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":4}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":12}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":28}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":89}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":12}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":8}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":13}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":39}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":27}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":30}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":34}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":20}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":22}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":25}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":44}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":70}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":38}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":46}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":38}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":44}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":30}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":17}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":16}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":14}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":21}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":20}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":51}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":55}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":56}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":28}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":25}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":17}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":21}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":21}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":20}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":23}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":31}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":35}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":33}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":60}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":25}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":21}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":31}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":22}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":25}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":33}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":35}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":63}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":45}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":27}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":23}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":17}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":15}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":40}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":40}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":23}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":24}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":51}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":49}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":25}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":50}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":30}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":19}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":25}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":24}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":17}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":42}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":14}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":25}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":26}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":76}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":45}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":45}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":46}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":27}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":26}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":25}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":28}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":38}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":48}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":48}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":64}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":67}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":18}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":26}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":15}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":17}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":16}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":43}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":34}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":73}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":21}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":17}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":58}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":19}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":31}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":60}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":49}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":21}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":17}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":14}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":29}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":21}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":29}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":31}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":59}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":40}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":52}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":23}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":15}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":9}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":3}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":1}}},"s":{"0":0,"14":0,"16":0,"17":0,"18":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"120":0,"121":0,"122":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"143":0,"144":0,"145":0,"147":0,"148":0,"149":0,"151":0,"152":0,"154":0,"155":0,"156":0,"158":0,"159":0,"160":0,"162":0,"163":0,"164":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"216":0,"217":0,"219":0,"221":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"236":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"259":0,"261":0,"262":0,"263":0,"264":0,"266":0,"268":0,"270":0,"271":0,"272":0,"273":0,"274":0,"276":0,"278":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"289":0,"291":0,"293":0,"295":0,"296":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":297,"column":-2832}},"locations":[{"start":{"line":1,"column":0},"end":{"line":297,"column":-2832}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":297,"column":-2832}},"loc":{"start":{"line":1,"column":0},"end":{"line":297,"column":-2832}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/ProductList.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Dialog/ProductList.tsx","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":87}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":29}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":47}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":49}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":57}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":39}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":85}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":84}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":12}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":29}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":90}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":12}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":8}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":54}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":69}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":51}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":12}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":18}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":40}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":25}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":38}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":29}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":37}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":39}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":76}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":40}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":27}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":36}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":50}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":52}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":26}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":50}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":51}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":57}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":26}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":23}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":11}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":1}}},"s":{"0":0,"3":0,"4":0,"5":0,"6":0,"16":0,"17":0,"18":0,"19":0,"20":0,"22":0,"23":0,"24":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"42":0,"44":0,"45":0,"46":0,"47":0,"48":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"58":0,"59":0,"61":0,"62":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":63,"column":-732}},"locations":[{"start":{"line":1,"column":0},"end":{"line":63,"column":-732}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":63,"column":-732}},"loc":{"start":{"line":1,"column":0},"end":{"line":63,"column":-732}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Field/Field.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Field/Field.styles.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":17}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":34}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":18}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":20}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":5}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":21}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":33}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":5}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":2}}},"s":{"0":0,"1":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":16,"column":-158}},"locations":[{"start":{"line":1,"column":0},"end":{"line":16,"column":-158}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":16,"column":-158}},"loc":{"start":{"line":1,"column":0},"end":{"line":16,"column":-158}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Field/Field.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/Field/Field.tsx","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":56}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":29}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":73}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":70}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":34}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":40}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":57}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":65}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":15}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":48}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":1}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":40}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":59}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":35}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":1}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":66}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":62}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":4}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":23}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":45}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":72}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":57}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":7}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":76}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":41}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":7}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":42}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":35}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":26}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":75}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":43}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":12}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":41}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":5}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":4}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":30}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":31}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":51}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":32}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":25}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":41}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":38}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":37}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":19}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":39}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":60}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":34}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":30}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":8}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":18}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":21}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":7}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":51}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":36}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":5}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":4}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":18}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":56}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":37}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":68}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":12}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":8}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":22}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":43}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":30}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":34}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":40}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":25}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":46}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":45}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":86}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":14}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":16}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":42}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":63}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":21}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":31}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":68}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":39}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":47}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":36}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":23}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":14}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":9}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":4}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":1}}},"s":{"0":0,"1":0,"3":0,"4":0,"5":0,"6":0,"8":0,"9":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"27":0,"28":0,"29":0,"30":0,"31":0,"33":0,"34":0,"35":0,"36":0,"37":0,"39":0,"40":0,"43":0,"44":0,"45":0,"48":0,"49":0,"50":0,"51":0,"53":0,"54":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"64":0,"65":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"84":0,"85":0,"86":0,"87":0,"89":0,"90":0,"92":0,"93":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"107":0,"108":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"123":0,"124":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":125,"column":-817}},"locations":[{"start":{"line":1,"column":0},"end":{"line":125,"column":-817}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":125,"column":-817}},"loc":{"start":{"line":1,"column":0},"end":{"line":125,"column":-817}},"line":1}},"f":{"0":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableComponent.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableComponent.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":69}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":23}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":46}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":33}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":78}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":50}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":52}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":57}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":2}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":45}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":39}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":27}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":13}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":25}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":6}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":11}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":11}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":23}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":7}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":72}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":54}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":9}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":71}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":26}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":73}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":91}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":50}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":21}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":92}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":5}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":83}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":19}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":69}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":24}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":27}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":5}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":47}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":33}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":24}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":32}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":31}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":24}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":6}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":20}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":4}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":36}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":30}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":37}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":36}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":32}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":35}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":98}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":97}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":96}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":65}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":50}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":7}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":6}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":51}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":4}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":29}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":30}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":29}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":20}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":8}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":7}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":31}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":52}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":6}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":4}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":10}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":95}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":22}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":56}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":47}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":100}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":24}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":17}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":2}}},"s":{"0":1,"9":1,"15":1,"17":1,"18":1,"20":1,"33":1,"34":12,"35":12,"36":12,"37":12,"44":1,"45":9,"47":9,"48":5,"49":9,"51":9,"52":9,"54":1,"55":9,"56":9,"57":9,"58":9,"59":9,"60":9,"61":9,"62":9,"64":9,"65":4,"66":4,"68":4,"69":4,"70":4,"71":4,"72":4,"73":4,"74":0,"75":0,"76":9,"83":9,"84":8,"86":8,"87":4,"88":4,"89":9,"91":9,"92":9,"93":0,"94":0,"95":0,"96":0,"97":9,"98":9,"100":9,"101":9,"102":0,"103":0,"104":0,"106":0,"107":0,"108":0,"109":0,"111":0,"112":0,"113":0,"114":0,"115":9,"116":9,"118":9,"119":9,"120":9,"121":9,"122":9,"123":9,"124":9,"125":9,"126":9,"127":9,"129":9,"130":9,"131":9,"132":9,"133":9,"134":9,"135":9,"136":9,"138":9},"branchMap":{"0":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":21},"end":{"line":38,"column":2}},"locations":[{"start":{"line":34,"column":21},"end":{"line":38,"column":2}}]},"1":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":24},"end":{"line":53,"column":2}},"locations":[{"start":{"line":45,"column":24},"end":{"line":53,"column":2}}]},"2":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":12},"end":{"line":50,"column":5}},"locations":[{"start":{"line":48,"column":12},"end":{"line":50,"column":5}}]},"3":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":44},"end":{"line":139,"column":2}},"locations":[{"start":{"line":55,"column":44},"end":{"line":139,"column":2}}]},"4":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":41},"end":{"line":77,"column":5}},"locations":[{"start":{"line":65,"column":41},"end":{"line":77,"column":5}}]},"5":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"locations":[{"start":{"line":74,"column":4},"end":{"line":76,"column":5}}]},"6":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":12},"end":{"line":90,"column":5}},"locations":[{"start":{"line":84,"column":12},"end":{"line":90,"column":5}}]},"7":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":23},"end":{"line":89,"column":5}},"locations":[{"start":{"line":87,"column":23},"end":{"line":89,"column":5}}]},"8":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":35},"end":{"line":133,"column":54}},"locations":[{"start":{"line":133,"column":35},"end":{"line":133,"column":54}}]}},"b":{"0":[12],"1":[9],"2":[5],"3":[9],"4":[4],"5":[0],"6":[8],"7":[4],"8":[4]},"fnMap":{"0":{"name":"skusAreEqual","decl":{"start":{"line":34,"column":21},"end":{"line":38,"column":2}},"loc":{"start":{"line":34,"column":21},"end":{"line":38,"column":2}},"line":34},"1":{"name":"usePreviousSkus","decl":{"start":{"line":45,"column":24},"end":{"line":53,"column":2}},"loc":{"start":{"line":45,"column":24},"end":{"line":53,"column":2}},"line":45},"2":{"name":"SortableComponent","decl":{"start":{"line":55,"column":44},"end":{"line":139,"column":2}},"loc":{"start":{"line":55,"column":44},"end":{"line":139,"column":2}},"line":55}},"f":{"0":12,"1":9,"2":9}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableList.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableList.styles.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":18}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":2}}},"s":{"0":1,"3":1,"4":1,"5":1,"6":1,"7":1},"branchMap":{},"b":{},"fnMap":{},"f":{}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableList.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableList.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":27}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":54}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":47}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":90}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":54}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":10}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":48}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":16}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":27}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":31}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":29}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":44}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":41}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":12}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":9}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":10}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":2}}},"s":{"0":1,"2":1,"3":1,"11":1,"12":10,"14":10,"15":10,"16":10,"17":5,"18":5,"19":5,"20":5,"21":5,"22":5,"23":5,"24":5,"26":10,"27":10,"29":10},"branchMap":{"0":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":39},"end":{"line":30,"column":2}},"locations":[{"start":{"line":12,"column":39},"end":{"line":30,"column":2}}]},"1":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":27},"end":{"line":27,"column":7}},"locations":[{"start":{"line":17,"column":27},"end":{"line":27,"column":7}}]}},"b":{"0":[10],"1":[5]},"fnMap":{"0":{"name":"SortableList","decl":{"start":{"line":12,"column":39},"end":{"line":30,"column":2}},"loc":{"start":{"line":12,"column":39},"end":{"line":30,"column":2}},"line":12},"1":{"name":"onDelete","decl":{"start":{"line":23,"column":22},"end":{"line":23,"column":44}},"loc":{"start":{"line":23,"column":22},"end":{"line":23,"column":44}},"line":23}},"f":{"0":10,"1":0}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableListItem.styles.ts": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableListItem.styles.ts","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":44}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":20}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":15}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":25}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":34}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":7}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":5}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":44}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":9}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":52}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":53}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":25}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":25}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":34}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":25}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":29}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":43}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":9}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":7}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":19}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":5}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":16}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":26}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":28}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":12}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":30}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":36}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":16}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":97}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":9}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":18}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":18}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":34}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":11}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":8}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":7}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":20}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":21}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":20}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":28}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":29}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":5}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":32}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":9}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":33}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":79}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":59}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":7}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":19}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":26}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":31}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":20}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":5}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":22}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":29}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":30}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":29}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":5}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":36}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":24}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":28}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":29}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":30}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":25}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":14}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":27}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":20}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":20}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":27}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":17}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":18}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":41}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":7}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":5}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":2}}},"s":{"0":1,"1":1,"4":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":14,"17":14,"18":14,"19":14,"20":14,"21":14,"22":14,"23":14,"24":14,"25":14,"26":14,"27":14,"28":14,"29":14,"30":14,"31":14,"32":14,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":15,"61":15,"62":15,"63":15,"64":15,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1},"branchMap":{"0":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":16},"end":{"line":33,"column":7}},"locations":[{"start":{"line":16,"column":16},"end":{"line":33,"column":7}}]},"1":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":13},"end":{"line":18,"column":50}},"locations":[{"start":{"line":18,"column":13},"end":{"line":18,"column":50}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":43},"end":{"line":18,"column":52}},"locations":[{"start":{"line":18,"column":43},"end":{"line":18,"column":52}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":51}},"locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":51}}]},"4":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":44},"end":{"line":19,"column":53}},"locations":[{"start":{"line":19,"column":44},"end":{"line":19,"column":53}}]},"5":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":14},"end":{"line":21,"column":49}},"locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":49}}]},"6":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":38},"end":{"line":21,"column":51}},"locations":[{"start":{"line":21,"column":38},"end":{"line":21,"column":51}}]},"7":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":11},"end":{"line":65,"column":7}},"locations":[{"start":{"line":60,"column":11},"end":{"line":65,"column":7}}]},"8":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":50},"end":{"line":63,"column":61}},"locations":[{"start":{"line":63,"column":50},"end":{"line":63,"column":61}}]}},"b":{"0":[14],"1":[2],"2":[12],"3":[2],"4":[12],"5":[2],"6":[12],"7":[15],"8":[0]},"fnMap":{"0":{"name":"imageWrapper","decl":{"start":{"line":16,"column":16},"end":{"line":33,"column":7}},"loc":{"start":{"line":16,"column":16},"end":{"line":33,"column":7}},"line":16},"1":{"name":"heading","decl":{"start":{"line":60,"column":11},"end":{"line":65,"column":7}},"loc":{"start":{"line":60,"column":11},"end":{"line":65,"column":7}},"line":60}},"f":{"0":14,"1":15}} +,"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableListItem.tsx": {"path":"/Users/david.shibley/projects/apps/apps/sap-commerce-cloud/src/components/ProductPreviews/SortableListItem.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":37}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":48}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":41}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":36}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":44}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":51}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":85}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":22}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":100}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":59}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":64}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":84}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":27}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":5}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":7}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":53}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":19}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":35}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":7}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":37}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":10}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":8}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":22}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":22}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":21}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":20}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":50}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":97}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":14}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":51}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":64}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":70}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":32}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":31}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":47}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":36}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":54}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":48}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":32}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":65}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":18}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":70}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":56}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":35}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":34}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":35}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":16}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":18}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":50}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":57}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":79}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":22}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":84}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":52}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":82}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":44}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":40}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":89}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":54}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":20}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":25}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":52}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":35}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":34}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":16}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":18}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":15}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":13}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":10}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":2}}},"s":{"0":1,"1":1,"2":1,"14":1,"15":1,"16":1,"17":1,"26":1,"28":1,"29":15,"30":15,"32":15,"33":15,"34":15,"36":15,"37":4,"38":4,"39":4,"40":4,"41":4,"42":11,"44":15,"45":15,"46":15,"47":15,"48":15,"49":15,"50":15,"51":15,"52":15,"53":15,"54":15,"55":12,"56":12,"57":12,"59":15,"60":1,"61":1,"62":0,"64":1,"66":1,"68":15,"69":14,"70":14,"71":14,"72":14,"73":14,"74":14,"75":14,"76":14,"77":14,"78":14,"80":15,"81":15,"82":15,"83":15,"84":15,"85":15,"86":15,"88":15,"89":15,"90":15,"91":15,"92":0,"93":0,"94":0,"96":15,"97":15,"98":15,"99":15,"100":15,"101":15,"103":15,"104":15,"105":15,"107":15},"branchMap":{"0":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":43},"end":{"line":108,"column":2}},"locations":[{"start":{"line":29,"column":43},"end":{"line":108,"column":2}}]},"1":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":16},"end":{"line":42,"column":7}},"locations":[{"start":{"line":37,"column":16},"end":{"line":42,"column":7}}]},"2":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":6},"end":{"line":43,"column":37}},"locations":[{"start":{"line":42,"column":6},"end":{"line":43,"column":37}}]},"3":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":55,"column":51}},"locations":[{"start":{"line":55,"column":12},"end":{"line":55,"column":51}}]},"4":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":31},"end":{"line":58,"column":32}},"locations":[{"start":{"line":55,"column":31},"end":{"line":58,"column":32}}]},"5":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":11},"end":{"line":67,"column":18}},"locations":[{"start":{"line":60,"column":11},"end":{"line":67,"column":18}}]},"6":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":23},"end":{"line":63,"column":54}},"locations":[{"start":{"line":62,"column":23},"end":{"line":63,"column":54}}]},"7":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":12},"end":{"line":79,"column":18}},"locations":[{"start":{"line":69,"column":12},"end":{"line":79,"column":18}}]},"8":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":34},"end":{"line":72,"column":61}},"locations":[{"start":{"line":72,"column":34},"end":{"line":72,"column":61}}]},"9":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":51},"end":{"line":72,"column":68}},"locations":[{"start":{"line":72,"column":51},"end":{"line":72,"column":68}}]},"10":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":45},"end":{"line":83,"column":66}},"locations":[{"start":{"line":83,"column":45},"end":{"line":83,"column":66}}]},"11":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":21},"end":{"line":85,"column":84}},"locations":[{"start":{"line":85,"column":21},"end":{"line":85,"column":84}}]},"12":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":23},"end":{"line":95,"column":20}},"locations":[{"start":{"line":92,"column":23},"end":{"line":95,"column":20}}]},"13":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":24},"end":{"line":73,"column":51}},"locations":[{"start":{"line":73,"column":24},"end":{"line":73,"column":51}}]},"14":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":25},"end":{"line":74,"column":56}},"locations":[{"start":{"line":74,"column":25},"end":{"line":74,"column":56}}]}},"b":{"0":[15],"1":[4],"2":[11],"3":[13],"4":[12],"5":[1],"6":[0],"7":[14],"8":[2],"9":[12],"10":[0],"11":[0],"12":[0],"13":[2],"14":[1]},"fnMap":{"0":{"name":"SortableListItem","decl":{"start":{"line":29,"column":43},"end":{"line":108,"column":2}},"loc":{"start":{"line":29,"column":43},"end":{"line":108,"column":2}},"line":29},"1":{"name":"onLoad","decl":{"start":{"line":73,"column":24},"end":{"line":73,"column":51}},"loc":{"start":{"line":73,"column":24},"end":{"line":73,"column":51}},"line":73},"2":{"name":"onError","decl":{"start":{"line":74,"column":25},"end":{"line":74,"column":56}},"loc":{"start":{"line":74,"column":25},"end":{"line":74,"column":56}},"line":74}},"f":{"0":15,"1":2,"2":1}} +} diff --git a/apps/sap-commerce-cloud/coverage/favicon.png b/apps/sap-commerce-cloud/coverage/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/apps/sap-commerce-cloud/coverage/favicon.png differ diff --git a/apps/sap-commerce-cloud/coverage/index.html b/apps/sap-commerce-cloud/coverage/index.html new file mode 100644 index 0000000000..70ebb8a071 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/index.html @@ -0,0 +1,221 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 43.33% + Statements + 546/1260 +
+ + +
+ 67.9% + Branches + 55/81 +
+ + +
+ 61.9% + Functions + 26/42 +
+ + +
+ 43.33% + Lines + 546/1260 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
16%12/7566.66%2/350%2/416%12/75
src/AppConfig +
+
83.06%260/31371.87%23/3282.35%14/1783.06%260/313
src/__mocks__ +
+
100%17/17100%1/1100%1/1100%17/17
src/api +
+
0%0/1280%0/40%0/40%0/128
src/components +
+
0%0/500%0/10%0/10%0/50
src/components/Dialog +
+
0%0/2890%0/30%0/30%0/289
src/components/Field +
+
0%0/1100%0/20%0/20%0/110
src/components/ProductPreviews +
+
92.44%257/27882.85%29/3590%9/1092.44%257/278
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/prettify.css b/apps/sap-commerce-cloud/coverage/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/apps/sap-commerce-cloud/coverage/prettify.js b/apps/sap-commerce-cloud/coverage/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/apps/sap-commerce-cloud/coverage/sort-arrow-sprite.png b/apps/sap-commerce-cloud/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/apps/sap-commerce-cloud/coverage/sort-arrow-sprite.png differ diff --git a/apps/sap-commerce-cloud/coverage/sorter.js b/apps/sap-commerce-cloud/coverage/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/sorter.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if ( + row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()) + ) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.styles.ts.html new file mode 100644 index 0000000000..4fef21924e --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.styles.ts.html @@ -0,0 +1,223 @@ + + + + + + Code coverage report for src/AppConfig/AppConfig.styles.ts + + + + + + + + + +
+
+

All files / src/AppConfig AppConfig.styles.ts

+
+ +
+ 100% + Statements + 45/45 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 45/45 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +471x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+ 
+export const styles = {
+  body: css({
+    height: 'auto',
+    minHeight: '65vh',
+    margin: '0 auto',
+    marginTop: tokens.spacingXl,
+    padding: `${tokens.spacingXl} ${tokens.spacing2Xl}`,
+    maxWidth: tokens.contentWidthText,
+    backgroundColor: tokens.colorWhite,
+    zIndex: 2,
+    boxShadow: '0px 0px 20px rgba(0, 0, 0, 0.1)',
+    borderRadius: '2px',
+  }),
+  background: (color: string) =>
+    css({
+      display: 'block',
+      position: 'absolute',
+      zIndex: -1,
+      top: 0,
+      width: '100%',
+      height: '300px',
+      backgroundColor: color,
+    }),
+  section: css({
+    margin: `${tokens.spacingXl} 0`,
+  }),
+  splitter: css({
+    marginTop: tokens.spacingL,
+    marginBottom: tokens.spacingL,
+    border: 0,
+    height: '1px',
+    backgroundColor: tokens.gray300,
+  }),
+  icon: css({
+    display: 'flex',
+    justifyContent: 'center',
+    '> img': {
+      display: 'block',
+      width: '70px',
+      margin: `${tokens.spacingXl} 0`,
+    },
+  }),
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.tsx.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.tsx.html new file mode 100644 index 0000000000..9f11aace09 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/AppConfig.tsx.html @@ -0,0 +1,733 @@ + + + + + + Code coverage report for src/AppConfig/AppConfig.tsx + + + + + + + + + +
+
+

All files / src/AppConfig AppConfig.tsx

+
+ +
+ 89.86% + Statements + 133/148 +
+ + +
+ 61.53% + Branches + 8/13 +
+ + +
+ 71.42% + Functions + 5/7 +
+ + +
+ 89.86% + Lines + 133/148 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +2171x +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +1x +  +  +  +  +  +  +  +  +  +1x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +2x +2x +2x +  +2x +1x +  +1x +  +1x +1x +1x +1x +1x +  +1x +1x +  +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +2x +1x +1x +  +1x +  +  +  +  +1x +1x +1x +1x +1x +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +2x +  +2x +  +  +  +  +  +  +  +2x +  +  +  +1x +2x +2x +2x +2x +2x +  +2x +2x +2x +2x +2x +2x +2x +2x +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +2x +2x +2x +2x +  +2x +2x +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +2x +  +2x +  +2x +2x +  +2x +2x +2x +2x +2x +2x +2x +  +2x +1x + 
import * as React from 'react';
+ 
+import { CollectionResponse, ConfigAppSDK } from '@contentful/app-sdk';
+import {
+  Form,
+  FormControl,
+  Heading,
+  Note,
+  Paragraph,
+  TextInput,
+  TextLink,
+} from '@contentful/f36-components';
+ 
+import FieldSelector from './FieldSelector';
+ 
+import { toAppParameters, toInputParameters } from './parameters';
+ 
+import {
+  CompatibleFields,
+  ContentType,
+  EditorInterface,
+  editorInterfacesToSelectedFields,
+  getCompatibleFields,
+  SelectedFields,
+  selectedFieldsToTargetState,
+} from './fields';
+ 
+import { AppParameters, Config, ParameterDefinition, ValidateParametersFn } from '../interfaces';
+ 
+import { styles } from './AppConfig.styles';
+ 
+interface Props {
+  sdk: ConfigAppSDK<AppParameters>;
+  parameterDefinitions: ParameterDefinition[];
+  validateParameters: ValidateParametersFn;
+  logo: string;
+  name: string;
+  color: string;
+  description: string;
+}
+ 
+interface State {
+  contentTypes: ContentType[];
+  compatibleFields: CompatibleFields;
+  selectedFields: SelectedFields;
+  parameters: Config;
+}
+ 
+export default class AppConfig extends React.Component<Props, State> {
+  state = {
+    contentTypes: [],
+    compatibleFields: {},
+    selectedFields: {},
+    parameters: toInputParameters(this.props.parameterDefinitions, null),
+    verifying: false,
+    token: null,
+  };
+ 
+  componentDidMount() {
+    this.init();
+  }
+ 
+  init = async () => {
+    const { space, app, ids } = this.props.sdk;
+ 
+    app.onConfigure(this.onAppConfigure);
+ 
+    const [contentTypesResponse, eisResponse, parameters] = await Promise.all([
+      space.getContentTypes(),
+      space.getEditorInterfaces(),
+      app.getParameters(),
+    ]);
+ 
+    const contentTypes = (contentTypesResponse as CollectionResponse<ContentType>).items;
+    const editorInterfaces = (eisResponse as CollectionResponse<EditorInterface>).items;
+ 
+    const compatibleFields = getCompatibleFields(contentTypes);
+    const filteredContentTypes = contentTypes.filter((ct) => {
+      const fields = compatibleFields[ct.sys.id];
+      return fields && fields.length > 0;
+    });
+ 
+    this.setState(
+      {
+        contentTypes: filteredContentTypes,
+        compatibleFields,
+        selectedFields: editorInterfacesToSelectedFields(editorInterfaces, ids.app),
+        parameters: toInputParameters(this.props.parameterDefinitions, parameters),
+      },
+      () => app.setReady()
+    );
+  };
+ 
+  onAppConfigure = () => {
+    const { parameters, contentTypes, selectedFields } = this.state;
+    const error = this.props.validateParameters(parameters);
+ 
+    if (error) {
+      this.props.sdk.notifier.error(error);
+      return false;
+    }
+ 
+    return {
+      parameters: toAppParameters(this.props.parameterDefinitions, parameters),
+      targetState: selectedFieldsToTargetState(contentTypes, selectedFields),
+    };
+  };
+ 
+  render() {
+    return (
+      <>
+        <div className={styles.background(this.props.color)} />
+        <div className={styles.body}>
+          <Heading>About {this.props.name}</Heading>
+          <Paragraph>{this.props.description}</Paragraph>
+          <hr className={styles.splitter} />
+          {this.renderApp()}
+        </div>
+        <div className={styles.icon}>
+          <img src={this.props.logo} alt="App logo" />
+        </div>
+      </>
+    );
+  }
+ 
+  onParameterChange = (key: string, e: React.ChangeEvent<HTMLInputElement>) => {
+    const { value } = e.currentTarget;
+ 
+    this.setState((state) => ({
+      parameters: { ...state.parameters, [key]: value },
+    }));
+  };
+ 
+  onSelectedFieldsChange = (selectedFields: SelectedFields) => {
+    this.setState({ selectedFields });
+  };
+ 
+  renderApp() {
+    const { contentTypes, compatibleFields, selectedFields, parameters } = this.state;
+    const { parameterDefinitions, sdk } = this.props;
+    const { ids, hostnames } = sdk;
+    const { space, environment } = ids;
+    const hasConfigurationOptions = parameterDefinitions && parameterDefinitions.length > 0;
+ 
+    return (
+      <>
+        {hasConfigurationOptions && (
+          <>
+            <Heading>Configuration</Heading>
+            <Form>
+              {parameterDefinitions.map((def) => {
+                const key = `config-input-${def.id}`;
+ 
+                return (
+                  <FormControl id={key}>
+                    <FormControl.Label>{def.name}</FormControl.Label>
+                    <TextInput
+                      isRequired={def.required}
+                      key={key}
+                      id={key}
+                      name={key}
+                      maxLength={255}
+                      width={def.type === 'Symbol' ? 'large' : 'medium'}
+                      type={def.type === 'Symbol' ? 'text' : 'number'}
+                      value={parameters[def.id]}
+                      onChange={this.onParameterChange.bind(this, def.id)}
+                    />
+                    <FormControl.HelpText>{def.description}</FormControl.HelpText>
+                  </FormControl>
+                );
+              })}
+            </Form>
+            <hr className={styles.splitter} />
+          </>
+        )}
+        <Heading>Assign to fields</Heading>
+        {contentTypes.length > 0 ? (
+          <Paragraph>
+            This app can only be used with <strong>Short text</strong> or{' '}
+            <strong>Short text, list</strong> fields. Select which fields you’d like to enable for
+            this app.
+          </Paragraph>
+        ) : (
+          <>
+            <Paragraph>
+              This app can only be used with <strong>Short text</strong> or{' '}
+              <strong>Short text, list</strong> fields.
+            </Paragraph>
+            <Note variant="warning">
+              There are <strong>no content types with Short text or Short text, list</strong> fields
+              in this environment. You can add one in your{' '}
+              <TextLink
+                variant="primary"
+                target="_blank"
+                rel="noopener noreferrer"
+                href={
+                  environment === 'master'
+                    ? `https://${hostnames.webapp}/spaces/${space}/content_types`
+                    : `https://${hostnames.webapp}/spaces/${space}/environments/${environment}/content_types`
+                }>
+                content model
+              </TextLink>{' '}
+              and assign it to the app from this screen.
+            </Note>
+          </>
+        )}
+        <FieldSelector
+          contentTypes={contentTypes}
+          compatibleFields={compatibleFields}
+          selectedFields={selectedFields}
+          onSelectedFieldsChange={this.onSelectedFieldsChange}
+        />
+      </>
+    );
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.styles.ts.html new file mode 100644 index 0000000000..4ba12d1783 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.styles.ts.html @@ -0,0 +1,103 @@ + + + + + + Code coverage report for src/AppConfig/FieldSelector.styles.ts + + + + + + + + + +
+
+

All files / src/AppConfig FieldSelector.styles.ts

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +71x +1x +  +1x +1x +1x + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+ 
+export const styles = {
+  fieldSelector: css({ marginTop: tokens.spacingL }),
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.tsx.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.tsx.html new file mode 100644 index 0000000000..d4eb51f7aa --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/FieldSelector.tsx.html @@ -0,0 +1,271 @@ + + + + + + Code coverage report for src/AppConfig/FieldSelector.tsx + + + + + + + + + +
+
+

All files / src/AppConfig FieldSelector.tsx

+
+ +
+ 30.43% + Statements + 14/46 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 66.66% + Functions + 2/3 +
+ + +
+ 30.43% + Lines + 14/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +631x +1x +1x +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +2x +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +  +2x +1x + 
import * as React from 'react';
+import { styles } from './FieldSelector.styles';
+import { Form, Subheading, FormControl, Checkbox } from '@contentful/f36-components';
+ 
+import { ContentType, CompatibleFields, SelectedFields } from './fields';
+ 
+interface Props {
+  contentTypes: ContentType[];
+  compatibleFields: CompatibleFields;
+  selectedFields: SelectedFields;
+  onSelectedFieldsChange: Function;
+}
+ 
+export default class FieldSelector extends React.Component<Props> {
+  onSelectedFieldChange = (
+    ctId: string,
+    fieldId: string,
+    e: React.ChangeEvent<HTMLInputElement>
+  ) => {
+    const updated = { ...this.props.selectedFields };
+ 
+    if (e.currentTarget.checked) {
+      updated[ctId] = (updated[ctId] || []).concat([fieldId]);
+    } else {
+      updated[ctId] = (updated[ctId] || []).filter((cur) => cur !== fieldId);
+    }
+ 
+    this.props.onSelectedFieldsChange(updated);
+  };
+ 
+  render() {
+    const { compatibleFields, contentTypes, selectedFields } = this.props;
+ 
+    return (
+      <>
+        {contentTypes.map((ct) => {
+          const fields = compatibleFields[ct.sys.id];
+          return (
+            <div key={ct.sys.id} className={styles.fieldSelector}>
+              <Subheading>{ct.name}</Subheading>
+              <Form>
+                {fields.map((field) => (
+                  <FormControl id={`field-box-${ct.sys.id}-${field.id}`}>
+                    <Checkbox
+                      key={field.id}
+                      helpText={`${
+                        field.type === 'Symbol' ? 'Short text' : 'Short text, list'
+                      } · Field ID: ${field.id}`}
+                      isChecked={(selectedFields[ct.sys.id] || []).includes(field.id)}
+                      onChange={this.onSelectedFieldChange.bind(this, ct.sys.id, field.id)}>
+                      {field.name}
+                    </Checkbox>
+                  </FormControl>
+                ))}
+              </Form>
+            </div>
+          );
+        })}
+      </>
+    );
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/fields.ts.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/fields.ts.html new file mode 100644 index 0000000000..b190ee2c4f --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/fields.ts.html @@ -0,0 +1,328 @@ + + + + + + Code coverage report for src/AppConfig/fields.ts + + + + + + + + + +
+
+

All files / src/AppConfig fields.ts

+
+ +
+ 86.36% + Statements + 38/44 +
+ + +
+ 66.66% + Branches + 6/9 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 86.36% + Lines + 38/44 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +821x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +  +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +1x +1x +1x + 
import get from 'lodash.get';
+ 
+interface FieldItems {
+  type: string;
+}
+ 
+interface Field {
+  id: string;
+  name: string;
+  type: string;
+  items?: FieldItems;
+}
+ 
+export interface ContentType {
+  sys: { id: string };
+  name: string;
+  fields?: Field[];
+}
+ 
+interface Control {
+  fieldId: string;
+  widgetNamespace: string;
+  widgetId: string;
+}
+ 
+export interface EditorInterface {
+  sys: { contentType: { sys: { id: string } } };
+  controls?: Control[];
+}
+ 
+export type CompatibleFields = Record<string, Field[]>;
+export type SelectedFields = Record<string, string[] | undefined>;
+ 
+function isCompatibleField(field: Field) {
+  const isArray = field.type === 'Array';
+  return field.type === 'Symbol' || (isArray && (field.items as FieldItems).type === 'Symbol');
+}
+ 
+export function getCompatibleFields(contentTypes: ContentType[]): CompatibleFields {
+  return contentTypes.reduce((acc, ct) => {
+    return {
+      ...acc,
+      [ct.sys.id]: (ct.fields || []).filter(isCompatibleField),
+    };
+  }, {});
+}
+ 
+export function editorInterfacesToSelectedFields(
+  eis: EditorInterface[],
+  appId?: string
+): SelectedFields {
+  return eis.reduce((acc, ei) => {
+    const ctId = get(ei, ['sys', 'contentType', 'sys', 'id']);
+    const fieldIds = get(ei, ['controls'], [])
+      .filter((control) => control.widgetNamespace === 'app' && control.widgetId === appId)
+      .map((control) => control.fieldId)
+      .filter((fieldId) => typeof fieldId === 'string' && fieldId.length > 0);
+ 
+    if (ctId && fieldIds.length > 0) {
+      return { ...acc, [ctId]: fieldIds };
+    } else {
+      return acc;
+    }
+  }, {});
+}
+ 
+export function selectedFieldsToTargetState(
+  contentTypes: ContentType[],
+  selectedFields: SelectedFields
+) {
+  return {
+    EditorInterface: contentTypes.reduce((acc, ct) => {
+      const { id } = ct.sys;
+      const fields = selectedFields[id] || [];
+      const targetState =
+        fields.length > 0 ? { controls: fields.map((fieldId) => ({ fieldId })) } : {};
+ 
+      return { ...acc, [id]: targetState };
+    }, {}),
+  };
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/index.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/index.html new file mode 100644 index 0000000000..1f810771cf --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/index.html @@ -0,0 +1,191 @@ + + + + + + Code coverage report for src/AppConfig + + + + + + + + + +
+
+

All files src/AppConfig

+
+ +
+ 83.06% + Statements + 260/313 +
+ + +
+ 71.87% + Branches + 23/32 +
+ + +
+ 82.35% + Functions + 14/17 +
+ + +
+ 83.06% + Lines + 260/313 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AppConfig.styles.ts +
+
100%45/45100%1/1100%1/1100%45/45
AppConfig.tsx +
+
89.86%133/14861.53%8/1371.42%5/789.86%133/148
FieldSelector.styles.ts +
+
100%5/5100%0/0100%0/0100%5/5
FieldSelector.tsx +
+
30.43%14/46100%2/266.66%2/330.43%14/46
fields.ts +
+
86.36%38/4466.66%6/9100%4/486.36%38/44
parameters.ts +
+
100%25/2585.71%6/7100%2/2100%25/25
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/AppConfig/parameters.ts.html b/apps/sap-commerce-cloud/coverage/src/AppConfig/parameters.ts.html new file mode 100644 index 0000000000..557413b22d --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/AppConfig/parameters.ts.html @@ -0,0 +1,172 @@ + + + + + + Code coverage report for src/AppConfig/parameters.ts + + + + + + + + + +
+
+

All files / src/AppConfig parameters.ts

+
+ +
+ 100% + Statements + 25/25 +
+ + +
+ 85.71% + Branches + 6/7 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 25/25 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +301x +  +  +  +1x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import get from 'lodash.get';
+ 
+import { Config, ParameterDefinition } from '../interfaces';
+ 
+export function toInputParameters(
+  parameterDefinitions: ParameterDefinition[],
+  parameterValues: Config | null
+): Record<string, string> {
+  return parameterDefinitions.reduce((acc, def) => {
+    const defaultValue = typeof def.default === 'undefined' ? '' : `${def.default}`;
+    return {
+      ...acc,
+      [def.id]: `${get(parameterValues, [def.id], defaultValue)}`,
+    };
+  }, {});
+}
+ 
+export function toAppParameters(
+  parameterDefinitions: ParameterDefinition[],
+  inputValues: Record<string, string>
+): Config {
+  return parameterDefinitions.reduce((acc, def) => {
+    const value = inputValues[def.id];
+    return {
+      ...acc,
+      [def.id]: def.type === 'Number' ? parseInt(value, 10) : value,
+    };
+  }, {});
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/__mocks__/index.html b/apps/sap-commerce-cloud/coverage/src/__mocks__/index.html new file mode 100644 index 0000000000..af3a24ea1f --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/__mocks__/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for src/__mocks__ + + + + + + + + + +
+
+

All files src/__mocks__

+
+ +
+ 100% + Statements + 17/17 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 17/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.ts +
+
100%1/1100%0/0100%0/0100%1/1
mockProductPreview.ts +
+
100%8/8100%0/0100%0/0100%8/8
mockSdk.ts +
+
100%8/8100%1/1100%1/1100%8/8
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/__mocks__/index.ts.html b/apps/sap-commerce-cloud/coverage/src/__mocks__/index.ts.html new file mode 100644 index 0000000000..3138804684 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/__mocks__/index.ts.html @@ -0,0 +1,91 @@ + + + + + + Code coverage report for src/__mocks__/index.ts + + + + + + + + + +
+
+

All files / src/__mocks__ index.ts

+
+ +
+ 100% + Statements + 1/1 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 1/1 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +31x +  + 
export { makeSdkMock } from './mockSdk';
+export { mockProductPreview } from './mockProductPreview';
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/__mocks__/mockProductPreview.ts.html b/apps/sap-commerce-cloud/coverage/src/__mocks__/mockProductPreview.ts.html new file mode 100644 index 0000000000..54f206aa23 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/__mocks__/mockProductPreview.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/__mocks__/mockProductPreview.ts + + + + + + + + + +
+
+

All files / src/__mocks__ mockProductPreview.ts

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 8/8 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11  +  +1x +1x +1x +1x +1x +1x +1x +1x + 
import { Product } from '../interfaces';
+ 
+export const mockProductPreview: Product = {
+  sku: 'abc1234',
+  image: '',
+  id: '123',
+  name: 'Mock Product',
+  isMissing: false,
+  productUrl: '/product/abc1234',
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/__mocks__/mockSdk.ts.html b/apps/sap-commerce-cloud/coverage/src/__mocks__/mockSdk.ts.html new file mode 100644 index 0000000000..741f79a3a9 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/__mocks__/mockSdk.ts.html @@ -0,0 +1,109 @@ + + + + + + Code coverage report for src/__mocks__/mockSdk.ts + + + + + + + + + +
+
+

All files / src/__mocks__ mockSdk.ts

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 8/8 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +91x +1x +1x +1x +1x +1x +1x +1x + 
export const makeSdkMock = () => ({
+  ids: {
+    app: 'some-app',
+  },
+  hostnames: {
+    webapp: 'app.contentful.com',
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/api/dataTransformers.ts.html b/apps/sap-commerce-cloud/coverage/src/api/dataTransformers.ts.html new file mode 100644 index 0000000000..3f451ee07a --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/api/dataTransformers.ts.html @@ -0,0 +1,199 @@ + + + + + + Code coverage report for src/api/dataTransformers.ts + + + + + + + + + +
+
+

All files / src/api dataTransformers.ts

+
+ +
+ 0% + Statements + 0/33 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/33 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import get from 'lodash/get';
+import { Product, Hash, ConfigurationParameters } from '../interfaces';
+ 
+export const productTransformer =
+  (
+    { apiEndpoint }: ConfigurationParameters,
+    skuIdsToSkusMap: { [key: string]: string },
+    baseSite?: string
+  ) =>
+  (item: Hash): Product => {
+    const id = get(item, ['id'], '');
+    let imageUrl = get(item, ['images', 0, 'url'], '');
+    if (imageUrl.length > 0) {
+      imageUrl = apiEndpoint + imageUrl;
+    }
+    const sku = get(item, ['code'], '');
+    const productUrl = skuIdsToSkusMap[sku]
+      ? skuIdsToSkusMap[sku]
+      : baseSite
+      ? `${apiEndpoint}/occ/v2/${baseSite}/products/${sku}`
+      : '';
+ 
+    return {
+      id,
+      image: imageUrl,
+      name: get(item, ['name'], '')
+        .replaceAll('<em class="search-results-highlight">', '')
+        .replaceAll('</em>', ''),
+      sku,
+      productUrl: productUrl,
+    };
+  };
+ 
+export const baseSiteTransformer =
+  () =>
+  (item: Hash): string => {
+    return get(item, ['uid'], '');
+  };
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/api/fetchBaseSites.ts.html b/apps/sap-commerce-cloud/coverage/src/api/fetchBaseSites.ts.html new file mode 100644 index 0000000000..4cdb5af63f --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/api/fetchBaseSites.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/api/fetchBaseSites.ts + + + + + + + + + +
+
+

All files / src/api fetchBaseSites.ts

+
+ +
+ 0% + Statements + 0/15 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { baseSiteTransformer } from './dataTransformers';
+import { SAPParameters } from '../interfaces';
+ 
+export async function fetchBaseSites(parameters: SAPParameters): Promise<string[]> {
+  const url = `${parameters.installation.apiEndpoint}/occ/v2/basesites`;
+ 
+  try {
+    const response = await fetch(url);
+    if (response.ok) {
+      const responseJson = await response.json();
+      const baseSites = responseJson['baseSites'].map(baseSiteTransformer());
+      return baseSites;
+    }
+    throw new Error(response.statusText);
+  } catch (error) {
+    throw error;
+  }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/api/fetchProductList.ts.html b/apps/sap-commerce-cloud/coverage/src/api/fetchProductList.ts.html new file mode 100644 index 0000000000..08a4f9de23 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/api/fetchProductList.ts.html @@ -0,0 +1,229 @@ + + + + + + Code coverage report for src/api/fetchProductList.ts + + + + + + + + + +
+
+

All files / src/api fetchProductList.ts

+
+ +
+ 0% + Statements + 0/45 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/45 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { Response, SAPParameters, UpdateTotalPagesFn } from '../interfaces';
+import { productTransformer } from './dataTransformers';
+ 
+export async function fetchProductList(
+  baseSite: string,
+  searchQuery: string,
+  page: number,
+  parameters: SAPParameters,
+  updateTotalPages: UpdateTotalPagesFn
+): Promise<Response> {
+  if (!baseSite.length) {
+    return {
+      products: [],
+      errors: [],
+    };
+  }
+ 
+  const response: any = await fetch(
+    parameters.installation.apiEndpoint +
+      '/occ/v2/' +
+      baseSite +
+      '/products/search' +
+      '?query=' +
+      searchQuery +
+      '&fields=FULL&currentPage=' +
+      page
+  );
+  const responseJson = await response.json();
+  if (response.ok) {
+    const products = responseJson['products'].map(
+      productTransformer(parameters.installation, {}, baseSite)
+    );
+    updateTotalPages(responseJson['pagination']['totalPages']);
+    if (!products.length) {
+      return {
+        products: [],
+        errors: [
+          {
+            message: `Products not found for search term ${searchQuery}`,
+            type: 'Not Found',
+          },
+        ],
+      };
+    }
+    return { products, errors: [] };
+  }
+  return { products: [], errors: responseJson['errors'] };
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/api/fetchProductPreviews.ts.html b/apps/sap-commerce-cloud/coverage/src/api/fetchProductPreviews.ts.html new file mode 100644 index 0000000000..f25740b8af --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/api/fetchProductPreviews.ts.html @@ -0,0 +1,208 @@ + + + + + + Code coverage report for src/api/fetchProductPreviews.ts + + + + + + + + + +
+
+

All files / src/api fetchProductPreviews.ts

+
+ +
+ 0% + Statements + 0/35 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/35 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import difference from 'lodash/difference';
+import { Product, SAPParameters } from '../interfaces';
+import { productTransformer } from './dataTransformers';
+ 
+export async function fetchProductPreviews(
+  skus: string[],
+  parameters: SAPParameters
+): Promise<Product[]> {
+  if (!skus.length) {
+    return [];
+  }
+ 
+  let totalResponse: any[] = [];
+  let skuIds: string[] = [];
+  let skuIdsToSkusMap: { [key: string]: string } = {};
+ 
+  for (const sku of skus) {
+    const skuId = sku.split('/products/').pop() as string;
+    skuIds.push(skuId);
+    skuIdsToSkusMap[skuId] = sku;
+ 
+    const url = `${sku}?fields=code,name,summary,price(formattedValue,DEFAULT),images(galleryIndex,FULL),averageRating,stock(DEFAULT),description,availableForPickup,url,numberOfReviews,manufacturer,categories(FULL),priceRange,multidimensional,configuratorType,configurable,tags`;
+    const response = await fetch(url);
+    if (response.ok) {
+      let responseJson = await response.json();
+      totalResponse.push(responseJson);
+    }
+  }
+ 
+  const products = totalResponse.map(productTransformer(parameters.installation, skuIdsToSkusMap));
+  const foundSKUs = products.map((product: { sku: any }) => product.sku);
+  const missingProducts = difference(skuIds, foundSKUs).map((sku) => ({
+    sku: sku.split('/products/').pop(),
+    image: '',
+    id: '',
+    name: '',
+    isMissing: true,
+    productUrl: skuIdsToSkusMap[sku],
+  }));
+  return [...products, ...missingProducts];
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/api/index.html b/apps/sap-commerce-cloud/coverage/src/api/index.html new file mode 100644 index 0000000000..62b14b8c38 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/api/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for src/api + + + + + + + + + +
+
+

All files src/api

+
+ +
+ 0% + Statements + 0/128 +
+ + +
+ 0% + Branches + 0/4 +
+ + +
+ 0% + Functions + 0/4 +
+ + +
+ 0% + Lines + 0/128 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
dataTransformers.ts +
+
0%0/330%0/10%0/10%0/33
fetchBaseSites.ts +
+
0%0/150%0/10%0/10%0/15
fetchProductList.ts +
+
0%0/450%0/10%0/10%0/45
fetchProductPreviews.ts +
+
0%0/350%0/10%0/10%0/35
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.styles.ts.html new file mode 100644 index 0000000000..c5877786c6 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.styles.ts.html @@ -0,0 +1,121 @@ + + + + + + Code coverage report for src/components/Dialog/Dialog.styles.ts + + + + + + + + + +
+
+

All files / src/components/Dialog Dialog.styles.ts

+
+ +
+ 0% + Statements + 0/11 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/11 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13  +  +  +  +  +  +  +  +  +  +  +  + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+ 
+export const styles = {
+  textInput: css({ width: '250px' }),
+  grid: css({ margin: `${tokens.spacingM} 0`, paddingLeft: tokens.spacingL }),
+  table: css({ padding: tokens.spacingL }),
+  tableCell: css({ width: '10%' }),
+  pagination: css({ margin: tokens.spacingL }),
+  nextButton: (page: number) => css({ marginLeft: page > 0 ? tokens.spacingL : '' }),
+  selectProductsButton: css({ margin: tokens.spacingL }),
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.tsx.html new file mode 100644 index 0000000000..92c36d2eee --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Dialog/Dialog.tsx.html @@ -0,0 +1,976 @@ + + + + + + Code coverage report for src/components/Dialog/Dialog.tsx + + + + + + + + + +
+
+

All files / src/components/Dialog Dialog.tsx

+
+ +
+ 0% + Statements + 0/233 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/233 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import React from 'react';
+import {
+  Button,
+  Grid,
+  GridItem,
+  IconButton,
+  Option,
+  Select,
+  Table,
+  TableBody,
+  TableCell,
+  TableHead,
+  TableRow,
+  TextInput,
+} from '@contentful/f36-components';
+import { DialogAppSDK } from '@contentful/app-sdk';
+import { ProductList } from './ProductList';
+import { fetchProductList } from '../../api/fetchProductList';
+import { fetchBaseSites } from '../../api/fetchBaseSites';
+import { AppParameters, Error, Product, SAPParameters } from '../../interfaces';
+import get from 'lodash/get';
+import union from 'lodash/union';
+import { formatProductUrl } from '../../utils';
+import { styles } from './Dialog.styles';
+import { cx } from '@emotion/css';
+import { DoneIcon, SearchIcon } from '@contentful/f36-icons';
+ 
+interface DialogProps {
+  sdk: DialogAppSDK<AppParameters>;
+}
+ 
+interface State {
+  baseSite: string;
+  baseSites: string[];
+  query: string;
+  page: number;
+  totalPages: number;
+  products: Product[];
+  selectedProducts: string[];
+  errors: Error[];
+}
+ 
+export default class Dialog extends React.Component<DialogProps, State> {
+  state: State = {
+    baseSite: '',
+    baseSites: [],
+    query: '',
+    page: 0,
+    totalPages: 0,
+    products: [],
+    selectedProducts: [],
+    errors: [],
+  };
+ 
+  componentDidMount() {
+    this.loadBaseSites().then(() => {
+      this.load();
+    });
+  }
+ 
+  load = async () => {
+    const { products, errors } = await fetchProductList(
+      this.state.baseSite,
+      this.state.query,
+      this.state.page,
+      this.props.sdk.parameters as SAPParameters,
+      this.updateTotalPages
+    );
+    this.setState({
+      baseSite: this.state.baseSite,
+      baseSites: this.state.baseSites,
+      query: this.state.query,
+      products: products,
+      selectedProducts: this.state.selectedProducts,
+      errors: errors,
+    });
+  };
+ 
+  loadBaseSites = async () => {
+    const baseSites = await fetchBaseSites(this.props.sdk.parameters as SAPParameters);
+    let finalBaseSites: string[] = [];
+    const installationConfigBaseSites = get(this.props.sdk.parameters.invocation, 'baseSites', '');
+    if (installationConfigBaseSites.length > 0) {
+      for (const baseSite of baseSites) {
+        if (installationConfigBaseSites.split(',').includes(baseSite)) {
+          finalBaseSites.push(baseSite);
+        }
+      }
+    } else {
+      finalBaseSites = baseSites;
+    }
+    this.setState({
+      baseSite: finalBaseSites[0],
+      baseSites: finalBaseSites,
+      query: this.state.query,
+      page: this.state.page,
+      products: [],
+      selectedProducts: [],
+    });
+  };
+ 
+  updateSearchTerm = (event: any) => {
+    this.setState({
+      ...this.state,
+      query: event.target.value,
+    });
+  };
+ 
+  updateBaseSite = (event: any) => {
+    this.setState(
+      {
+        ...this.state,
+        baseSite: event.target.value,
+      },
+      () => {
+        this.load();
+      }
+    );
+  };
+ 
+  multiProductsCheckBoxClickEvent = (event: any) => {
+    let existingProducts: string[] = this.state.selectedProducts;
+    const skuId: string = event.target.id;
+ 
+    if (event.target.checked) {
+      if (!existingProducts.includes(skuId)) {
+        const apiEndpoint = get(this.props.sdk.parameters.invocation, 'apiEndpoint', '');
+        existingProducts.push(formatProductUrl(apiEndpoint, this.state.baseSite, skuId));
+        this.setState({
+          selectedProducts: existingProducts,
+        });
+      }
+    } else {
+      if (existingProducts.includes(skuId)) {
+        const skuIndex = existingProducts.indexOf(skuId);
+        existingProducts.splice(skuIndex, 1);
+        this.setState({
+          selectedProducts: existingProducts,
+        });
+      }
+    }
+  };
+ 
+  updateTotalPages = (totalPages: number) => {
+    this.setState({ totalPages });
+  };
+ 
+  selectMultipleProductsClickEvent = () => {
+    const currentField = get(this.props.sdk.parameters.invocation, 'fieldValue', [] as string[]);
+    const updatedField = union(currentField, this.state.selectedProducts);
+ 
+    this.props.sdk.close(updatedField);
+  };
+ 
+  searchButtonClickEvent() {
+    this.load();
+  }
+ 
+  nextPageButtonEvent = () => {
+    this.setState({ page: this.state.page + 1 }, this.load);
+  };
+ 
+  prevPageButtonEvent = () => {
+    this.setState({ page: this.state.page - 1 }, this.load);
+  };
+ 
+  render() {
+    const isFieldTypeArray =
+      (get(this.props.sdk.parameters.invocation, 'fieldType', '') as string) === 'Array';
+    return (
+      <>
+        <Grid
+          columns="1fr 1fr 1fr 1fr 1fr"
+          rowGap="spacingM"
+          columnGap="spacingM"
+          className={styles.grid}>
+          <GridItem>
+            <TextInput
+              type="text"
+              placeholder={'Search Term...'}
+              className={cx(styles.textInput, 'f36-margin-bottom--m')}
+              value={this.state.query}
+              onChange={this.updateSearchTerm}
+              onKeyPress={(event) => {
+                if (event.key === 'Enter') {
+                  this.load();
+                }
+              }}
+            />
+          </GridItem>
+          <GridItem>
+            <Select onChange={this.updateBaseSite}>
+              {this.state.baseSites.map((baseSite) => (
+                <Option key={baseSite} value={baseSite}>
+                  {baseSite}
+                </Option>
+              ))}
+            </Select>
+          </GridItem>
+          <GridItem>
+            <IconButton
+              variant="primary"
+              icon={<SearchIcon />}
+              aria-label="search"
+              onClick={() => this.searchButtonClickEvent()}>
+              Search
+            </IconButton>
+          </GridItem>
+          {isFieldTypeArray ? (
+            <GridItem>
+              <IconButton
+                variant="primary"
+                icon={<DoneIcon />}
+                onClick={this.selectMultipleProductsClickEvent}
+                aria-label="Select Products">
+                Select Products
+              </IconButton>
+            </GridItem>
+          ) : (
+            <></>
+          )}
+        </Grid>
+ 
+        <Table className={styles.table}>
+          {this.state.errors?.length ? (
+            <TableBody>
+              <TableRow>
+                {this.state.errors.map((error) => (
+                  <TableCell key={error.message}>
+                    {' '}
+                    {error.type} : {error.message}
+                  </TableCell>
+                ))}
+              </TableRow>
+            </TableBody>
+          ) : (
+            <></>
+          )}
+          {this.state.products?.length ? (
+            <>
+              <TableHead>
+                <TableRow>
+                  <TableCell className={styles.tableCell}>Select</TableCell>
+                  <TableCell>Code</TableCell>
+                  <TableCell>Name</TableCell>
+                  <TableCell>Image</TableCell>
+                </TableRow>
+              </TableHead>
+              <TableBody>
+                <ProductList
+                  sdk={this.props.sdk}
+                  products={this.state.products}
+                  baseSite={this.state.baseSite}
+                  selectedProducts={this.state.selectedProducts}
+                  checkboxFn={this.multiProductsCheckBoxClickEvent}
+                />
+              </TableBody>
+            </>
+          ) : (
+            <></>
+          )}
+        </Table>
+        <div className={styles.pagination}>
+          {this.state.page > 0 ? (
+            <Button variant="primary" onClick={this.prevPageButtonEvent}>
+              Previous
+            </Button>
+          ) : (
+            <></>
+          )}
+          {this.state.page + 1 < this.state.totalPages ? (
+            <Button
+              variant="primary"
+              className={styles.nextButton(this.state.page)}
+              onClick={this.nextPageButtonEvent}>
+              Next
+            </Button>
+          ) : (
+            <></>
+          )}
+        </div>
+        {isFieldTypeArray ? (
+          <IconButton
+            variant="primary"
+            icon={<DoneIcon />}
+            onClick={this.selectMultipleProductsClickEvent}
+            aria-label="Select Products"
+            className={styles.selectProductsButton}>
+            Select Products
+          </IconButton>
+        ) : (
+          <></>
+        )}
+      </>
+    );
+  }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Dialog/ProductList.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/Dialog/ProductList.tsx.html new file mode 100644 index 0000000000..97a1acea43 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Dialog/ProductList.tsx.html @@ -0,0 +1,274 @@ + + + + + + Code coverage report for src/components/Dialog/ProductList.tsx + + + + + + + + + +
+
+

All files / src/components/Dialog ProductList.tsx

+
+ +
+ 0% + Statements + 0/45 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/45 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import React from 'react';
+import { DialogExtensionSDK } from '@contentful/app-sdk';
+import { CheckBoxFn, Product } from '../../interfaces';
+import { Checkbox, IconButton, TableCell, TableRow } from '@contentful/f36-components';
+import get from 'lodash/get';
+import { formatProductUrl } from '../../utils';
+import { DoneIcon } from '@contentful/f36-icons';
+ 
+interface Props {
+  sdk: DialogExtensionSDK;
+  products: Product[];
+  selectedProducts: string[];
+  baseSite: string;
+  checkboxFn: CheckBoxFn;
+}
+ 
+export class ProductList extends React.Component<Props> {
+  selectButtonClickEvent(sku: string) {
+    const apiEndpoint = get(this.props.sdk.parameters.invocation, 'apiEndpoint', '');
+    this.props.sdk.close([formatProductUrl(apiEndpoint, this.props.baseSite, sku)]);
+  }
+ 
+  render() {
+    const isFieldTypeSymbol =
+      (get(this.props.sdk.parameters.invocation, 'fieldType', '') as string) === 'Symbol';
+ 
+    return (
+      <>
+        {this.props.products.map((product, index) => {
+          const checkboxValue = this.props.selectedProducts.includes(
+            this.props.baseSite + ':' + product.sku
+          );
+          return (
+            <TableRow key={product.sku}>
+              <TableCell>
+                {isFieldTypeSymbol ? (
+                  <IconButton
+                    variant="primary"
+                    icon={<DoneIcon />}
+                    onClick={() => this.selectButtonClickEvent(product.sku)}
+                    aria-label="Select">
+                    Select
+                  </IconButton>
+                ) : (
+                  <Checkbox
+                    id={product.sku}
+                    defaultChecked={checkboxValue}
+                    onChange={this.props.checkboxFn}
+                  />
+                )}
+              </TableCell>
+              <TableCell>{product.sku}</TableCell>
+              <TableCell>{product.name}</TableCell>
+              <TableCell>
+                <img src={product.image} alt="product" />
+              </TableCell>
+            </TableRow>
+          );
+        })}
+      </>
+    );
+  }
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Dialog/index.html b/apps/sap-commerce-cloud/coverage/src/components/Dialog/index.html new file mode 100644 index 0000000000..6b07a65339 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Dialog/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for src/components/Dialog + + + + + + + + + +
+
+

All files src/components/Dialog

+
+ +
+ 0% + Statements + 0/289 +
+ + +
+ 0% + Branches + 0/3 +
+ + +
+ 0% + Functions + 0/3 +
+ + +
+ 0% + Lines + 0/289 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Dialog.styles.ts +
+
0%0/110%0/10%0/10%0/11
Dialog.tsx +
+
0%0/2330%0/10%0/10%0/233
ProductList.tsx +
+
0%0/450%0/10%0/10%0/45
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Field/Field.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/components/Field/Field.styles.ts.html new file mode 100644 index 0000000000..5add39b4f5 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Field/Field.styles.ts.html @@ -0,0 +1,133 @@ + + + + + + Code coverage report for src/components/Field/Field.styles.ts + + + + + + + + + +
+
+

All files / src/components/Field Field.styles.ts

+
+ +
+ 0% + Statements + 0/15 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+ 
+export const styles = {
+  sortable: css({
+    marginBottom: tokens.spacingM,
+  }),
+  container: css({
+    display: 'flex',
+  }),
+  logo: css({
+    display: 'block',
+    height: '30px',
+    marginRight: tokens.spacingM,
+  }),
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Field/Field.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/Field/Field.tsx.html new file mode 100644 index 0000000000..f5c65c4bf3 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Field/Field.tsx.html @@ -0,0 +1,460 @@ + + + + + + Code coverage report for src/components/Field/Field.tsx + + + + + + + + + +
+
+

All files / src/components/Field Field.tsx

+
+ +
+ 0% + Statements + 0/95 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/95 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import React from 'react';
+import { IconButton } from '@contentful/f36-components';
+import { FieldAppSDK } from '@contentful/app-sdk';
+import get from 'lodash/get';
+import { SortableComponent } from '../ProductPreviews/SortableComponent';
+import { fetchProductPreviews } from '../../api/fetchProductPreviews';
+import logo from '../../logo.png';
+import { AppParameters, SAPParameters } from '../../interfaces';
+import { styles } from './Field.styles';
+import { ShoppingCartIcon } from '@contentful/f36-icons';
+ 
+interface Props {
+  sdk: FieldAppSDK<AppParameters>;
+}
+ 
+interface State {
+  value: string[];
+  editingDisabled: boolean;
+}
+ 
+function fieldValueToState(value?: string | string[]): string[] {
+  if (!value) {
+    return [];
+  }
+  return Array.isArray(value) ? value : [value];
+}
+ 
+function makeCTAText(fieldType: string) {
+  const isArray = fieldType === 'Array';
+  const beingSelected = isArray ? 'products' : 'a product';
+  return `Select ${beingSelected}`;
+}
+ 
+export default class Field extends React.Component<Props, State> {
+  state = {
+    value: fieldValueToState(this.props.sdk.field.getValue()),
+    editingDisabled: true,
+  };
+ 
+  componentDidMount() {
+    this.props.sdk.window.startAutoResizer();
+ 
+    // Handle external changes (e.g. when multiple authors are working on the same entry).
+    this.props.sdk.field.onValueChanged((value?: string[] | string) => {
+      this.setState({ value: fieldValueToState(value) });
+    });
+ 
+    // Disable editing (e.g. when field is not editable due to R&P).
+    this.props.sdk.field.onIsDisabledChanged((editingDisabled: boolean) => {
+      this.setState({ editingDisabled });
+    });
+  }
+ 
+  updateStateValue = (skus: string[]) => {
+    this.setState({ value: skus });
+ 
+    if (skus.length > 0) {
+      const value = this.props.sdk.field.type === 'Array' ? skus : skus[0];
+      this.props.sdk.field.setValue(value);
+    } else {
+      this.props.sdk.field.removeValue();
+    }
+  };
+ 
+  onDialogOpen = async () => {
+    const { sdk } = this.props;
+ 
+    const skus = await sdk.dialogs.openCurrentApp({
+      allowHeightOverflow: true,
+      position: 'center',
+      title: makeCTAText(sdk.field.type),
+      shouldCloseOnOverlayClick: true,
+      shouldCloseOnEscapePress: true,
+      parameters: {
+        ...sdk.parameters.installation,
+        fieldValue: fieldValueToState(sdk.field.getValue()),
+        fieldType: sdk.field.type,
+        fieldId: sdk.field.id,
+      },
+      width: 1400,
+      minHeight: 600,
+    });
+    const result = Array.isArray(skus) ? skus : [];
+ 
+    if (result.length) {
+      this.updateStateValue(result);
+    }
+  };
+ 
+  render = () => {
+    const { value: data, editingDisabled } = this.state;
+ 
+    const hasItems = data.length > 0;
+    const fieldType = get(this.props, ['sdk', 'field', 'type'], '');
+ 
+    return (
+      <>
+        {hasItems && (
+          <div className={styles.sortable}>
+            <SortableComponent
+              sdk={this.props.sdk}
+              disabled={editingDisabled}
+              skus={data}
+              onChange={this.updateStateValue}
+              fetchProductPreviews={(skus) =>
+                fetchProductPreviews(skus, this.props.sdk.parameters as SAPParameters)
+              }
+            />
+          </div>
+        )}
+        <div className={styles.container}>
+          <img src={logo} alt="Logo" className={styles.logo} />
+          <IconButton
+            variant="secondary"
+            icon={<ShoppingCartIcon size="small" variant="muted" />}
+            onClick={this.onDialogOpen}
+            aria-label={makeCTAText(fieldType)}
+            isDisabled={editingDisabled}>
+            {makeCTAText(fieldType)}
+          </IconButton>
+        </div>
+      </>
+    );
+  };
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/Field/index.html b/apps/sap-commerce-cloud/coverage/src/components/Field/index.html new file mode 100644 index 0000000000..e3d57916aa --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/Field/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/components/Field + + + + + + + + + +
+
+

All files src/components/Field

+
+ +
+ 0% + Statements + 0/110 +
+ + +
+ 0% + Branches + 0/2 +
+ + +
+ 0% + Functions + 0/2 +
+ + +
+ 0% + Lines + 0/110 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Field.styles.ts +
+
0%0/150%0/10%0/10%0/15
Field.tsx +
+
0%0/950%0/10%0/10%0/95
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableComponent.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableComponent.tsx.html new file mode 100644 index 0000000000..de34fb686f --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableComponent.tsx.html @@ -0,0 +1,502 @@ + + + + + + Code coverage report for src/components/ProductPreviews/SortableComponent.tsx + + + + + + + + + +
+
+

All files / src/components/ProductPreviews SortableComponent.tsx

+
+ +
+ 80.45% + Statements + 70/87 +
+ + +
+ 88.88% + Branches + 8/9 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 80.45% + Lines + 70/87 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +1401x +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +1x +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +12x +12x +12x +12x +  +  +  +  +  +  +1x +9x +  +9x +5x +9x +  +9x +9x +  +1x +9x +9x +9x +9x +9x +9x +9x +9x +  +9x +4x +4x +  +4x +4x +4x +4x +4x +4x +  +  +9x +  +  +  +  +  +  +9x +8x +  +8x +4x +4x +9x +  +9x +9x +  +  +  +  +9x +9x +  +9x +9x +  +  +  +  +  +  +  +  +  +  +  +  +  +9x +9x +  +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x +  +9x +9x +9x +9x +9x +9x +9x +9x +  +9x + 
import { FC, useState, useEffect, useCallback, useRef } from 'react';
+import {
+  DndContext,
+  closestCenter,
+  KeyboardSensor,
+  PointerSensor,
+  useSensor,
+  useSensors,
+  DragEndEvent,
+} from '@dnd-kit/core';
+import {
+  arrayMove,
+  SortableContext,
+  sortableKeyboardCoordinates,
+  verticalListSortingStrategy,
+} from '@dnd-kit/sortable';
+import { FieldAppSDK } from '@contentful/app-sdk';
+import { mapSort } from '../../utils';
+import { SortableList } from './SortableList';
+import { Product, PreviewsFn } from '../../interfaces';
+import { isEqual } from 'lodash';
+ 
+interface Props {
+  sdk: FieldAppSDK;
+  disabled: boolean;
+  onChange: (skus: string[]) => void;
+  skus: string[];
+  fetchProductPreviews: PreviewsFn;
+}
+ 
+/**
+ * @description - helper function to compare two lists of skus for order agnostic equality
+ */
+const skusAreEqual = (prevSkus: string[], currentSkus: string[]): boolean => {
+  const sortedPreviousSkus = [...prevSkus].sort();
+  const sortedCurrentSkus = [...currentSkus].sort();
+  return !isEqual(sortedPreviousSkus, sortedCurrentSkus);
+};
+ 
+/**
+ * @description - hook to track previous version of skus prop
+ * @param skus - list of most current skus
+ * @returns previous list of skus
+ */
+const usePreviousSkus = (skus: string[]) => {
+  const skusRef = useRef<string[]>([]);
+ 
+  useEffect(() => {
+    skusRef.current = skus;
+  }, [skus]);
+ 
+  return skusRef.current;
+};
+ 
+export const SortableComponent: FC<Props> = ({
+  sdk,
+  disabled,
+  onChange,
+  skus,
+  fetchProductPreviews,
+}) => {
+  const [productPreviews, setProductPreviews] = useState<Product[]>([]);
+  const previousSkus = usePreviousSkus(skus);
+ 
+  const getProductPreviews = useCallback(async () => {
+    try {
+      const shouldRefetch = skusAreEqual([...previousSkus], [...skus]);
+ 
+      if (shouldRefetch) {
+        const productPreviewsUnsorted = await fetchProductPreviews(skus);
+        const sortedProductPreviews = mapSort(productPreviewsUnsorted, skus, 'productUrl');
+        setProductPreviews(sortedProductPreviews);
+      }
+    } catch (error) {
+      sdk.notifier.error('There was an error fetching the data for the selected products.');
+    }
+  }, [skus, fetchProductPreviews, setProductPreviews, sdk.notifier, previousSkus]);
+ 
+  /**
+   * @description - Compare previous list of skus (see `usePreviousSkus`) to the list of skus
+   * passed as a prop.  If the previous & current skus differ (a sku was added/removed, order agnostic),
+   * then fetch/refetch associated productPreviews given list of skus.
+   */
+  useEffect(() => {
+    const shouldRefetch = skusAreEqual([...previousSkus], [...skus]);
+ 
+    if (shouldRefetch) {
+      getProductPreviews();
+    }
+  }, [skus, getProductPreviews, previousSkus]);
+ 
+  const deleteItem = useCallback(
+    (index: number) => {
+      const newSkus = [...skus];
+      newSkus.splice(index, 1);
+      onChange(newSkus);
+    },
+    [onChange, skus]
+  );
+ 
+  const handleDragEnd = useCallback(
+    (event: DragEndEvent) => {
+      const { active, over } = event;
+      console.log('active', active);
+      console.log('over', over);
+ 
+      if (active.id !== over?.id) {
+        const oldIndex = productPreviews.findIndex((product) => product.productUrl === active.id);
+        const newIndex = productPreviews.findIndex((product) => product.productUrl === over?.id);
+        const sortedProductPreviews: Product[] = arrayMove(productPreviews, oldIndex, newIndex);
+ 
+        onChange(sortedProductPreviews.map((p) => p.productUrl));
+        setProductPreviews(sortedProductPreviews);
+      }
+    },
+    [productPreviews, onChange, setProductPreviews]
+  );
+ 
+  const sensors = useSensors(
+    useSensor(PointerSensor, {
+      activationConstraint: {
+        distance: 8,
+      },
+    }),
+    useSensor(KeyboardSensor, {
+      coordinateGetter: sortableKeyboardCoordinates,
+    })
+  );
+ 
+  return (
+    <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>
+      <SortableContext
+        items={productPreviews.map((p) => p.productUrl)}
+        strategy={verticalListSortingStrategy}>
+        <SortableList disabled={disabled} productPreviews={productPreviews} deleteFn={deleteItem} />
+      </SortableContext>
+    </DndContext>
+  );
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.styles.ts.html new file mode 100644 index 0000000000..731f1155db --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.styles.ts.html @@ -0,0 +1,109 @@ + + + + + + Code coverage report for src/components/ProductPreviews/SortableList.styles.ts + + + + + + + + + +
+
+

All files / src/components/ProductPreviews SortableList.styles.ts

+
+ +
+ 100% + Statements + 6/6 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +91x +  +  +1x +1x +1x +1x +1x + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+ 
+export const styles = {
+  container: css({
+    marginRight: '0.4rem',
+  }),
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.tsx.html new file mode 100644 index 0000000000..022a2e2f66 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableList.tsx.html @@ -0,0 +1,175 @@ + + + + + + Code coverage report for src/components/ProductPreviews/SortableList.tsx + + + + + + + + + +
+
+

All files / src/components/ProductPreviews SortableList.tsx

+
+ +
+ 100% + Statements + 19/19 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 50% + Functions + 1/2 +
+ + +
+ 100% + Lines + 19/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +311x +  +1x +1x +  +  +  +  +  +  +  +1x +10x +  +10x +10x +10x +5x +5x +5x +5x +5x +5x +5x +5x +  +10x +10x +  +10x + 
import { FC } from 'react';
+import { DeleteFn, Product } from '../../interfaces';
+import { SortableListItem } from './SortableListItem';
+import { styles } from './SortableList.styles';
+ 
+export interface Props {
+  disabled: boolean;
+  productPreviews: Product[];
+  deleteFn: DeleteFn;
+}
+ 
+export const SortableList: FC<Props> = ({ disabled, deleteFn, productPreviews = [] }) => {
+  const itemsAreSortable = productPreviews.length > 1;
+ 
+  return (
+    <div className={styles.container}>
+      {productPreviews.map((product, index) => {
+        return (
+          <SortableListItem
+            disabled={disabled}
+            key={`${product.image}-${product.sku}`}
+            product={product}
+            onDelete={() => deleteFn(index)}
+            isSortable={itemsAreSortable}
+          />
+        );
+      })}
+    </div>
+  );
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.styles.ts.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.styles.ts.html new file mode 100644 index 0000000000..39ba111ae4 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.styles.ts.html @@ -0,0 +1,364 @@ + + + + + + Code coverage report for src/components/ProductPreviews/SortableListItem.styles.ts + + + + + + + + + +
+
+

All files / src/components/ProductPreviews SortableListItem.styles.ts

+
+ +
+ 100% + Statements + 90/90 +
+ + +
+ 88.88% + Branches + 8/9 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 90/90 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +941x +1x +  +  +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +15x +15x +15x +15x +15x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { css } from 'emotion';
+import tokens from '@contentful/f36-tokens';
+import { Product } from '../../interfaces';
+ 
+const IMAGE_SIZE = 48;
+ 
+export const styles = {
+  card: css({
+    display: 'flex',
+    padding: 0,
+    position: 'relative',
+    ':not(:first-of-type)': css({
+      marginTop: tokens.spacingXs,
+    }),
+  }),
+  imageWrapper: (imageHasLoaded: boolean) =>
+    css({
+      width: imageHasLoaded ? `${IMAGE_SIZE}px` : 0,
+      height: imageHasLoaded ? `${IMAGE_SIZE}px` : 0,
+      overflow: 'hidden',
+      margin: imageHasLoaded ? tokens.spacingM : 0,
+      position: 'relative',
+      '> img': css({
+        display: 'block',
+        height: `${IMAGE_SIZE}px`,
+        minWidth: 'auto',
+        userSelect: 'none',
+        position: 'absolute',
+        left: '50%',
+        top: '50%',
+        transform: 'translate(-50%, -50%)',
+      }),
+    }),
+  dragHandle: css({
+    height: 'auto',
+  }),
+  actions: css({
+    position: 'absolute',
+    top: tokens.spacingXs,
+    right: tokens.spacingXs,
+    a: css({
+      display: 'inline-block',
+      marginRight: tokens.spacingXs,
+      svg: css({
+        transition: `fill ${tokens.transitionDurationDefault} ${tokens.transitionEasingDefault}`,
+      }),
+      '&:hover': {
+        svg: css({
+          fill: tokens.colorBlack,
+        }),
+      },
+    }),
+  }),
+  description: css({
+    flex: '1 0 auto',
+    display: 'flex',
+    flexDirection: 'column',
+    justifyContent: 'center',
+  }),
+  heading: (product: Product) =>
+    css({
+      fontSize: tokens.fontSizeL,
+      marginBottom: product.isMissing || !product.name ? 0 : tokens.spacing2Xs,
+      ...(product.name && { textTransform: 'capitalize' }),
+    }),
+  subheading: css({
+    color: tokens.gray500,
+    fontSize: tokens.fontSizeS,
+    marginBottom: 0,
+  }),
+  skeletonImage: css({
+    width: `${IMAGE_SIZE}px`,
+    height: `${IMAGE_SIZE}px`,
+    padding: tokens.spacingM,
+  }),
+  errorImage: css({
+    backgroundColor: tokens.gray100,
+    borderRadius: '3px',
+    margin: tokens.spacingM,
+    width: `${IMAGE_SIZE}px`,
+    height: `${IMAGE_SIZE}px`,
+    position: 'relative',
+    svg: css({
+      fill: tokens.gray600,
+      width: '100%',
+      height: '50%',
+      position: 'absolute',
+      top: '50%',
+      left: '50%',
+      transform: 'translate(-50%, -50%)',
+    }),
+  }),
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.tsx.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.tsx.html new file mode 100644 index 0000000000..184d5f0459 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/SortableListItem.tsx.html @@ -0,0 +1,409 @@ + + + + + + Code coverage report for src/components/ProductPreviews/SortableListItem.tsx + + + + + + + + + +
+
+

All files / src/components/ProductPreviews SortableListItem.tsx

+
+ +
+ 94.73% + Statements + 72/76 +
+ + +
+ 73.33% + Branches + 11/15 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 94.73% + Lines + 72/76 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +1091x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +  +  +  +  +  +  +  +  +1x +  +1x +15x +15x +  +15x +15x +15x +  +15x +4x +4x +4x +4x +4x +11x +  +15x +15x +15x +15x +15x +15x +15x +15x +15x +15x +15x +12x +12x +12x +  +15x +1x +1x +  +  +1x +  +1x +  +15x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +  +15x +15x +15x +15x +15x +15x +15x +  +15x +15x +15x +15x +  +  +  +  +15x +15x +15x +15x +15x +15x +  +15x +15x +15x +  +15x + 
import { FC, useState } from 'react';
+import { useSortable } from '@dnd-kit/sortable';
+import { CSS } from '@dnd-kit/utilities';
+import { Product } from '../../interfaces';
+import {
+  AssetIcon,
+  Badge,
+  Card,
+  Flex,
+  Heading,
+  IconButton,
+  SkeletonContainer,
+  SkeletonImage,
+  Subheading,
+} from '@contentful/f36-components';
+import tokens from '@contentful/f36-tokens';
+import { styles } from './SortableListItem.styles';
+import { CloseIcon, ErrorCircleIcon, ExternalLinkIcon } from '@contentful/f36-icons';
+ 
+export interface Props {
+  product: Product;
+  disabled: boolean;
+  onDelete: () => void;
+  isSortable: boolean;
+}
+ 
+const IMAGE_SIZE = 48;
+ 
+export const SortableListItem: FC<Props> = ({ product, disabled, onDelete, isSortable }: Props) => {
+  const [imageHasLoaded, setImageLoaded] = useState(false);
+  const [imageHasErrored, setImageHasErrored] = useState(false);
+ 
+  const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
+    id: product.productUrl,
+  });
+ 
+  const style = isSortable
+    ? {
+        transform: CSS.Transform.toString(transform),
+        transition,
+        marginTop: tokens.spacingS,
+      }
+    : { marginTop: tokens.spacingS };
+ 
+  return (
+    <div
+      ref={setNodeRef}
+      style={style}
+      key={product.id}
+      {...attributes}
+      {...listeners}
+      data-testid={`sortable-item-${product.id}`}>
+      <Card withDragHandle={isSortable} className={styles.card} data-testid="sortable-list-item">
+        <Flex>
+          {!imageHasLoaded && !imageHasErrored && (
+            <SkeletonContainer className={styles.skeletonImage}>
+              <SkeletonImage width={IMAGE_SIZE} height={IMAGE_SIZE} />
+            </SkeletonContainer>
+          )}
+          {imageHasErrored && (
+            <div className={styles.errorImage}>
+              {product.isMissing ? (
+                <ErrorCircleIcon data-testid="icon" />
+              ) : (
+                <AssetIcon data-testid="icon" />
+              )}
+            </div>
+          )}
+          {!imageHasErrored && (
+            <div className={styles.imageWrapper(imageHasLoaded)}>
+              <img
+                style={{ display: imageHasLoaded ? 'block' : 'none' }}
+                onLoad={() => setImageLoaded(true)}
+                onError={() => setImageHasErrored(true)}
+                src={product.image}
+                alt={product.name}
+                data-testid="image"
+              />
+            </div>
+          )}
+          <section className={styles.description}>
+            <Heading className={styles.heading(product)}>
+              {product.isMissing || !product.name ? product.sku : product.name}
+            </Heading>
+            {product.isMissing && <Badge variant="negative">Product missing</Badge>}
+            {!product.isMissing && product.name && (
+              <Subheading className={styles.subheading}>{product.sku}</Subheading>
+            )}
+          </section>
+          {!disabled && (
+            <div className={styles.actions}>
+              {product.externalLink && (
+                <a target="_blank" rel="noopener noreferrer" href={product.externalLink}>
+                  <ExternalLinkIcon variant="muted" />
+                </a>
+              )}
+              <IconButton
+                icon={<CloseIcon variant="muted" />}
+                aria-label="Delete"
+                onClick={onDelete}
+              />
+            </div>
+          )}
+        </Flex>
+      </Card>
+    </div>
+  );
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/index.html b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/index.html new file mode 100644 index 0000000000..794bdd0ad1 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/ProductPreviews/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for src/components/ProductPreviews + + + + + + + + + +
+
+

All files src/components/ProductPreviews

+
+ +
+ 92.44% + Statements + 257/278 +
+ + +
+ 82.85% + Branches + 29/35 +
+ + +
+ 90% + Functions + 9/10 +
+ + +
+ 92.44% + Lines + 257/278 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
SortableComponent.tsx +
+
80.45%70/8788.88%8/9100%3/380.45%70/87
SortableList.styles.ts +
+
100%6/6100%0/0100%0/0100%6/6
SortableList.tsx +
+
100%19/19100%2/250%1/2100%19/19
SortableListItem.styles.ts +
+
100%90/9088.88%8/9100%2/2100%90/90
SortableListItem.tsx +
+
94.73%72/7673.33%11/15100%3/394.73%72/76
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/fields.ts.html b/apps/sap-commerce-cloud/coverage/src/components/fields.ts.html new file mode 100644 index 0000000000..758c38f88e --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/fields.ts.html @@ -0,0 +1,346 @@ + + + + + + Code coverage report for src/components/fields.ts + + + + + + + + + +
+
+

All files / src/components fields.ts

+
+ +
+ 0% + Statements + 0/50 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/50 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import get from 'lodash/get';
+import set from 'lodash/set';
+ 
+interface FieldItems {
+  type: string;
+}
+ 
+interface Field {
+  id: string;
+  name: string;
+  type: string;
+  items?: FieldItems;
+}
+ 
+export interface ContentType {
+  sys: { id: string };
+  name: string;
+  fields?: Field[];
+}
+ 
+interface Control {
+  fieldId: string;
+  widgetNamespace: string;
+  widgetId: string;
+}
+ 
+export interface EditorInterface {
+  sys: { contentType: { sys: { id: string } } };
+  controls?: Control[];
+}
+ 
+export type CompatibleFields = Record<string, Field[]>;
+export type FieldsConfig = Record<string, Record<string, string | undefined> | undefined>;
+ 
+function isCompatibleField(field: Field): boolean {
+  return field.type === 'Symbol';
+}
+ 
+export function getCompatibleFields(contentTypes: ContentType[]): CompatibleFields {
+  return contentTypes.reduce((acc, ct) => {
+    return {
+      ...acc,
+      [ct.sys.id]: (ct.fields || []).filter(isCompatibleField),
+    };
+  }, {});
+}
+ 
+export function editorInterfacesToSelectedFields(
+  eis: EditorInterface[],
+  fieldsConfig: FieldsConfig,
+  appId?: string
+): FieldsConfig {
+  return eis.reduce((acc, ei) => {
+    const ctId = get(ei, ['sys', 'contentType', 'sys', 'id']);
+    const fieldIds = get(ei, ['controls'], [])
+      .filter((control) => control.widgetNamespace === 'app' && control.widgetId === appId)
+      .map((control) => control.fieldId)
+      .filter((fieldId) => typeof fieldId === 'string' && fieldId.length > 0);
+ 
+    if (ctId && fieldIds.length > 0) {
+      const fields = fieldIds.reduce((acc, fieldId) => {
+        const type = get(fieldsConfig, [ctId, fieldId], 'product');
+        set(acc, [fieldId], type);
+        return acc;
+      }, {});
+      return { ...acc, [ctId]: fields };
+    } else {
+      return acc;
+    }
+  }, {});
+}
+ 
+export function selectedFieldsToTargetState(
+  contentTypes: ContentType[],
+  selectedFields: FieldsConfig
+) {
+  return {
+    EditorInterface: contentTypes.reduce((acc, ct) => {
+      const { id } = ct.sys;
+      const fields = Object.keys(selectedFields[id] || {});
+      const targetState =
+        fields.length > 0 ? { controls: fields.map((fieldId) => ({ fieldId })) } : {};
+ 
+      return { ...acc, [id]: targetState };
+    }, {}),
+  };
+}
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/components/index.html b/apps/sap-commerce-cloud/coverage/src/components/index.html new file mode 100644 index 0000000000..0599e45498 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/components/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/components + + + + + + + + + +
+
+

All files src/components

+
+ +
+ 0% + Statements + 0/50 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/50 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
fields.ts +
+
0%0/500%0/10%0/10%0/50
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/index.html b/apps/sap-commerce-cloud/coverage/src/index.html new file mode 100644 index 0000000000..e8505ba737 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 16% + Statements + 12/75 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 50% + Functions + 2/4 +
+ + +
+ 16% + Lines + 12/75 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.tsx +
+
0%0/580%0/10%0/10%0/58
interfaces.ts +
+
0%0/00%1/10%1/10%0/0
setupTests.ts +
+
100%2/2100%0/0100%0/0100%2/2
utils.ts +
+
66.66%10/15100%1/150%1/266.66%10/15
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/index.tsx.html b/apps/sap-commerce-cloud/coverage/src/index.tsx.html new file mode 100644 index 0000000000..73b3986495 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/index.tsx.html @@ -0,0 +1,289 @@ + + + + + + Code coverage report for src/index.tsx + + + + + + + + + +
+
+

All files / src index.tsx

+
+ +
+ 0% + Statements + 0/58 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/58 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { createRoot } from 'react-dom/client';
+ 
+import { init, locations, FieldAppSDK, DialogAppSDK, ConfigAppSDK } from '@contentful/app-sdk';
+import './index.css';
+import AppConfig from './AppConfig/AppConfig';
+ 
+import Field from './components/Field/Field';
+import Dialog from './components/Dialog/Dialog';
+import { AppParameters } from './interfaces';
+ 
+init(async (sdk) => {
+  const rootEl = document.getElementById('root');
+  if (!rootEl) {
+    throw new Error('Root element not found');
+  }
+  const root = createRoot(rootEl);
+ 
+  const ComponentLocationSettings = [
+    {
+      location: locations.LOCATION_APP_CONFIG,
+      component: (
+        <AppConfig
+          sdk={sdk as ConfigAppSDK<AppParameters>}
+          name="SAP Commerce Cloud App"
+          description={`
+            The SAP Commerce Cloud app allows content creators to select products from their
+            SAP Commerce Cloud instance and reference them inside of Contentful entries.`}
+          logo="https://images.ctfassets.net/lpjm8d10rkpy/6pMn4nHfKoOZGwFFcqaqqe/70272257dc1d2d0bbcc3ebdde13a7358/1493030643828.svg"
+          color="212F3F"
+          parameterDefinitions={[
+            {
+              id: 'apiEndpoint',
+              name: 'API Endpoint',
+              description: 'The API URL',
+              type: 'Symbol',
+              required: true,
+            },
+            {
+              id: 'baseSites',
+              name: 'Base Sites',
+              description:
+                'Include all base sites that you want to have available in the app. Separate each base site with a comma.',
+              type: 'Symbol',
+              required: true,
+              default: '',
+            },
+          ]}
+          validateParameters={() => null}
+        />
+      ),
+    },
+    {
+      location: locations.LOCATION_ENTRY_FIELD,
+      component: <Field sdk={sdk as FieldAppSDK<AppParameters>} />,
+    },
+    {
+      location: locations.LOCATION_DIALOG,
+      component: <Dialog sdk={sdk as DialogAppSDK<AppParameters>} />,
+    },
+  ];
+ 
+  // Select a component depending on a location in which the app is rendered.
+  ComponentLocationSettings.forEach((componentLocationSetting) => {
+    if (sdk.location.is(componentLocationSetting.location)) {
+      root.render(componentLocationSetting.component);
+    }
+  });
+});
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/interfaces.ts.html b/apps/sap-commerce-cloud/coverage/src/interfaces.ts.html new file mode 100644 index 0000000000..cdac104033 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/interfaces.ts.html @@ -0,0 +1,964 @@ + + + + + + Code coverage report for src/interfaces.ts + + + + + + + + + +
+
+

All files / src interfaces.ts

+
+ +
+ 0% + Statements + 0/0 +
+ + +
+ 0% + Branches + 1/1 +
+ + +
+ 0% + Functions + 1/1 +
+ + +
+ 0% + Lines + 0/0 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { DialogExtensionSDK, FieldExtensionSDK, ParametersAPI } from '@contentful/app-sdk';
+import { FieldsConfig } from './components/fields';
+ 
+/**
+ * Object containing all information configured on the app configuration page.
+ */
+export type Config = Record<string, any>;
+ 
+/**
+ * Definition of app configuration parameters
+ */
+export interface ParameterDefinition {
+  /**
+   * Unique id. Used as key in Config object.
+   */
+  id: string;
+ 
+  /**
+   * Name / Label
+   */
+  name: string;
+ 
+  /**
+   * Short description/explanation
+   */
+  description: string;
+ 
+  /**
+   * Default value
+   */
+  default?: any;
+ 
+  /**
+   * Parameter type
+   * - Symbol: Text
+   * - List: List of texts
+   * - Number: Integer
+   */
+  type: 'Symbol' | 'List' | 'Number';
+ 
+  /**
+   * Whether it is possible without providing a value.
+   */
+  required: boolean;
+}
+ 
+export type AppParameters = {
+  apiEndpoint: string;
+  baseSites: string;
+};
+ 
+export interface SAPParameters extends ParametersAPI<AppParameters, {}, {}> {
+  installation: {
+    apiEndpoint: string;
+    baseSites: string;
+  };
+}
+ 
+export interface Response {
+  products: Product[];
+  errors: Error[];
+}
+ 
+export interface Product {
+  sku: string;
+  image: string;
+  id: string;
+  name: string;
+  externalLink?: string;
+  isMissing?: boolean;
+  productUrl: string;
+}
+ 
+export interface Error {
+  message: string;
+  type: string;
+}
+ 
+export interface Pagination {
+  offset: number;
+  total: number;
+  count: number;
+  limit: number;
+  hasNextPage?: boolean;
+}
+ 
+interface ProductsFnResponse {
+  pagination: Pagination;
+  products: Product[];
+}
+ 
+export type ProductsFn = (
+  search: string,
+  pagination?: Partial<Pagination>
+) => Promise<ProductsFnResponse>;
+ 
+/**
+ * Returns the text that is displayed on the button in the field location.
+ *
+ * @param fieldType Type of the field the app is used for.
+ * @returns Text that should be displayed on the button
+ */
+export type MakeCTAFn = (fieldType: string) => string;
+ 
+/**
+ * Custom code that validates installation parameters that is run before saving.
+ *
+ * @param parameters Object containg the entered parameters.
+ * @returns `string` containing an error message. `null` if the parameters are valid.
+ */
+export type ValidateParametersFn = (parameters: Record<string, string>) => string | null;
+ 
+/**
+ * Function that returns a list for a given list of skus. The returned value is used to render a product preview.
+ *
+ * @param skus List of skus
+ * @param config App configuration
+ * @returns List of Products which is used to render a preview.
+ */
+export type ProductPreviewsFn = (skus: string[], config: Config) => Promise<Product[]>;
+export type DeleteFn = (index: number) => void;
+ 
+/**
+ * Function that gets called within the Iframe when the app is rendered in a dialog location.
+ *
+ * @example
+ * ```javascript
+ * function renderDialog(sdk) {
+ *   const config = sdk.parameters.invocation;
+ *
+ *   const container = document.createElement('div');
+ *   container.innerHTML = `<iframe src="https://example.com/dam?folder=${config.folder}" width="400" height="650" style="border:none;"/>`;
+ *   document.body.appendChild(container);
+ * }
+ * ```
+ *
+ * @param sdk [DialogExtensionSDK](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/)
+ */
+export type RenderDialogFn = (sdk: DialogExtensionSDK) => void;
+ 
+/**
+ * Function that gets called when app wants to open a dialog. Should return an updated list of skus as a Promise.
+ *
+ * You probably want to call [`sdk.openCurrentApp`](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/#open-the-current-app-in-a-dialog).
+ *
+ * @example
+ * ```javascript
+ * async function openDialog(sdk, currentValue, config) {
+ *   return await sdk.dialogs.openCurrentApp({
+ *     parameters: { config, currentValue },
+ *   });
+ * }
+ *
+ * ```
+ *
+ * @param sdk [FieldExtensionSDK](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/)
+ * @param currentValue List of currently selected akus
+ * @param config App configuration
+ * @returns Promise containing a list of selected skus
+ */
+export type OpenDialogFn = (
+  sdk: FieldExtensionSDK,
+  currentValue: string[] | string,
+  config: Config
+) => Promise<string[]>;
+ 
+/**
+ * Function that should return true when the button should be disabled.
+ *
+ * @param currentValue Currently selected skus
+ * @param config App configuration
+ * @returns true, if the button in the field location should be disabled. false, if the button should be enabled
+ */
+export type DisabledPredicateFn = (currentValue: string[], config: Config) => boolean;
+ 
+export interface Integration {
+  /**
+   * Returns the text that is displayed on the button in the field location.
+   *
+   * @param fieldType Type of the field the app is used for.
+   * @returns Text that should be displayed on the button
+   */
+  makeCTA: MakeCTAFn;
+ 
+  /**
+   * Name of the app
+   */
+  name: string;
+ 
+  /**
+   * Path to the app's logo
+   */
+  logo: string;
+ 
+  /**
+   * The app's primary color
+   */
+  color: string;
+ 
+  /**
+   * Short description of the app
+   */
+  description: string;
+ 
+  /**
+   * Parameter definition which can be customized on the app configuration page and used in the callback functions.
+   */
+  parameterDefinitions: ParameterDefinition[];
+ 
+  /**
+   * Custom code that validates installation parameters that is run before saving.
+   *
+   * @param parameters Object containg the entered parameters.
+   * @returns `string` containing an error message. `null` if the parameters are valid.
+   */
+  validateParameters: ValidateParametersFn;
+ 
+  /**
+   * Function that returns a list for a given list of skus. The returned value is used to render a product preview.
+   *
+   * @param skus List of skus
+   * @param config App configuration
+   * @returns List of Products which is used to render a preview.
+   */
+  fetchProductPreviews: ProductPreviewsFn;
+ 
+  /**
+   * Function that gets called within the Iframe when the app is rendered in a dialog location.
+   *
+   * @example
+   * ```javascript
+   * function renderDialog(sdk) {
+   *   const config = sdk.parameters.invocation;
+   *
+   *   const container = document.createElement('div');
+   *   container.innerHTML = `<iframe src="https://example.com/dam?folder=${config.folder}" width="400" height="650" style="border:none;"/>`;
+   *   document.body.appendChild(container);
+   * }
+   * ```
+   *
+   * @param sdk [DialogExtensionSDK](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/)
+   */
+  renderDialog: RenderDialogFn;
+ 
+  /**
+   * Function that gets called when app wants to open a dialog. Should return an updated list of skus as a Promise.
+   *
+   * You probably want to call [`sdk.openCurrentApp`](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/#open-the-current-app-in-a-dialog).
+   *
+   * @example
+   * ```javascript
+   * async function openDialog(sdk, currentValue, config) {
+   *   return await sdk.dialogs.openCurrentApp({
+   *     parameters: { config, currentValue },
+   *   });
+   * }
+   * ```
+   *
+   * @param sdk [FieldExtensionSDK](https://www.contentful.com/developers/docs/extensibility/app-framework/sdk/)
+   * @param currentValue Array of currently selected skus
+   * @param config App configuration
+   * @returns Promise containing a list of selected assets
+   */
+  openDialog: OpenDialogFn;
+ 
+  /**
+   * Function that should return true when the button should be disabled.
+   *
+   * @param currentValue Currently selected assets
+   * @param config App configuration
+   * @returns true, if the button in the field location should be disabled. false, if the button should be enabled
+   */
+  isDisabled: DisabledPredicateFn;
+}
+ 
+export type Hash = Record<string, any>;
+ 
+export interface ConfigurationParameters {
+  projectKey?: string;
+  clientId?: string;
+  clientSecret?: string;
+  apiEndpoint?: string;
+  authApiEndpoint?: string;
+  locale?: string;
+  fieldsConfig?: FieldsConfig;
+  baseSites?: string;
+}
+ 
+export type PreviewsFn = (skus: string[]) => Promise<Product[]>;
+ 
+export type CheckBoxFn = (event: any) => void;
+ 
+export type UpdateTotalPagesFn = (totalPages: number) => void;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/setupTests.ts.html b/apps/sap-commerce-cloud/coverage/src/setupTests.ts.html new file mode 100644 index 0000000000..c065814666 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/setupTests.ts.html @@ -0,0 +1,100 @@ + + + + + + Code coverage report for src/setupTests.ts + + + + + + + + + +
+
+

All files / src setupTests.ts

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +61x +  +  +  +1x + 
// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom';
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/coverage/src/utils.ts.html b/apps/sap-commerce-cloud/coverage/src/utils.ts.html new file mode 100644 index 0000000000..22b24b4c56 --- /dev/null +++ b/apps/sap-commerce-cloud/coverage/src/utils.ts.html @@ -0,0 +1,172 @@ + + + + + + Code coverage report for src/utils.ts + + + + + + + + + +
+
+

All files / src utils.ts

+
+ +
+ 66.66% + Statements + 10/15 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 50% + Functions + 1/2 +
+ + +
+ 66.66% + Lines + 10/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30  +  +  +  +  +  +1x +4x +4x +4x +4x +4x +  +  +  +4x +4x +4x +  +  +  +  +  +  +  +  +1x +  +  + 
import { Product } from './interfaces';
+/**
+ * Used to sort fetched products previews in the same
+ * order that the SKUs were added to the field value.
+ * @see https://gist.github.com/ecarter/1423674
+ */
+export const mapSort = <T extends Product, K extends keyof T>(
+  array: T[],
+  order: (T[K] | string)[],
+  key: K
+): T[] => {
+  const sorted = array.slice().sort((a, b) => {
+    const A = a[key];
+    const B = b[key];
+    return order.indexOf(A) > order.indexOf(B) ? 1 : -1;
+  });
+  return sorted;
+};
+ 
+/**
+ * Formats the product url saved to the field for the given sku
+ * @param sku
+ * @param apiEndpoint
+ * @param baseSite
+ * @returns string
+ */
+export const formatProductUrl = (apiEndpoint: string, baseSite: string, sku: string): string => {
+  return `${apiEndpoint}/occ/v2/${baseSite}/products/${sku}`;
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/apps/sap-commerce-cloud/frontend/src/AppConfig/FieldSelector.spec.tsx b/apps/sap-commerce-cloud/frontend/src/AppConfig/FieldSelector.spec.tsx new file mode 100644 index 0000000000..026e0e39ba --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/AppConfig/FieldSelector.spec.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import FieldSelector from './FieldSelector'; +import { vi, describe, it, expect } from 'vitest'; + +const contentTypes = [ + { + sys: { id: 'ct1' }, + name: 'Content Type 1', + }, + { + sys: { id: 'ct2' }, + name: 'Content Type 2', + }, +]; + +const compatibleFields = { + ct1: [ + { id: 'field1', name: 'Field 1', type: 'Symbol' }, + { id: 'field2', name: 'Field 2', type: 'Symbol' }, + ], + ct2: [ + { id: 'field3', name: 'Field 3', type: 'Symbol' }, + { id: 'field4', name: 'Field 4', type: 'Symbol' }, + ], +}; + +const selectedFields = { + ct1: ['field1'], + ct2: [], +}; + +describe('FieldSelector', () => { + it('renders content types and fields correctly', () => { + render( + + ); + + expect(screen.getByText('Content Type 1')).toBeInTheDocument(); + expect(screen.getByText('Content Type 2')).toBeInTheDocument(); + expect(screen.getByText('Field 1')).toBeInTheDocument(); + expect(screen.getByText('Field 2')).toBeInTheDocument(); + expect(screen.getByText('Field 3')).toBeInTheDocument(); + expect(screen.getByText('Field 4')).toBeInTheDocument(); + + const field1Checkbox = screen.getByLabelText('Field 1'); + const field2Checkbox = screen.getByLabelText('Field 2'); + + expect(field1Checkbox).toBeChecked(); + expect(field2Checkbox).not.toBeChecked(); + }); + + it('calls onSelectedFieldsChange with correct arguments when a checkbox is checked', () => { + const onSelectedFieldsChangeMock = vi.fn(); + + render( + + ); + + const field2Checkbox = screen.getByLabelText('Field 2'); + fireEvent.click(field2Checkbox); + + expect(onSelectedFieldsChangeMock).toHaveBeenCalledWith({ + ...selectedFields, + ct1: ['field1', 'field2'], + }); + }); + + it('calls onSelectedFieldsChange with correct arguments when a checkbox is unchecked', () => { + const onSelectedFieldsChangeMock = vi.fn(); + + render( + + ); + + const field2Checkbox = screen.getByLabelText('Field 2'); + fireEvent.click(field2Checkbox); + + expect(onSelectedFieldsChangeMock).toHaveBeenCalledWith({ + ...selectedFields, + ct1: ['field1'], + }); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/AppConfig/fields.spec.tsx b/apps/sap-commerce-cloud/frontend/src/AppConfig/fields.spec.tsx new file mode 100644 index 0000000000..f914609ad7 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/AppConfig/fields.spec.tsx @@ -0,0 +1,98 @@ +import { + getCompatibleFields, + selectedFieldsToTargetState, + editorInterfacesToSelectedFields, +} from './fields'; + +describe('getCompatibleFields', () => { + it('should return compatible fields', () => { + const contentTypes = [ + { + sys: { id: 'ct1' }, + name: 'ct1', + fields: [ + { id: 'f1', name: 'f1', type: 'Symbol' }, + { id: 'f2', name: 'f2', type: 'Array', items: { type: 'Symbol' } }, + { id: 'f3', name: 'f3', type: 'Array', items: { type: 'Link' } }, + { id: 'f4', name: 'f4', type: 'Link' }, + ], + }, + { + sys: { id: 'ct2' }, + name: 'ct2', + fields: [ + { id: 'f5', name: 'f5', type: 'Symbol' }, + { id: 'f6', name: 'f6', type: 'Array', items: { type: 'Symbol' } }, + ], + }, + ]; + + const result = getCompatibleFields(contentTypes); + + expect(result).toEqual({ + ct1: [ + { id: 'f1', name: 'f1', type: 'Symbol' }, + { id: 'f2', name: 'f2', type: 'Array', items: { type: 'Symbol' } }, + ], + ct2: [ + { id: 'f5', name: 'f5', type: 'Symbol' }, + { id: 'f6', name: 'f6', type: 'Array', items: { type: 'Symbol' } }, + ], + }); + }); +}); + +describe('editorInterfacesToSelectedFields', () => { + it('should return selected fields', () => { + const editorInterfaces = [ + { + sys: { contentType: { sys: { id: 'ct1' } } }, + controls: [ + { fieldId: 'f1', widgetNamespace: 'app', widgetId: 'widget1' }, + { fieldId: 'f2', widgetNamespace: 'app', widgetId: 'widget1' }, + ], + }, + { + sys: { contentType: { sys: { id: 'ct2' } } }, + controls: [ + { fieldId: 'f3', widgetNamespace: 'app', widgetId: 'widget1' }, + { fieldId: 'f4', widgetNamespace: 'app', widgetId: 'widget1' }, + ], + }, + ]; + + const result = editorInterfacesToSelectedFields(editorInterfaces, 'widget1'); + + expect(result).toEqual({ + ct1: ['f1', 'f2'], + ct2: ['f3', 'f4'], + }); + }); +}); + +describe('selectedFieldsToTargetState', () => { + it('should return target state', () => { + const selectedFields = [ + { ctId: 'ct1', fieldId: 'f1', sys: { id: 'f1' }, name: '' }, + { ctId: 'ct1', fieldId: 'f2', sys: { id: 'f2' }, name: '' }, + { ctId: 'ct2', fieldId: 'f3', sys: { id: 'f3' }, name: '' }, + { ctId: 'ct2', fieldId: 'f4', sys: { id: 'f4' }, name: '' }, + ]; + + const compatibleFields = { + ct1: ['f1', 'f2'], + ct2: ['f3', 'f4'], + }; + + const result = selectedFieldsToTargetState(selectedFields, compatibleFields); + + expect(result).toEqual({ + EditorInterface: { + f1: {}, + f2: {}, + f3: {}, + f4: {}, + }, + }); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/api/dataTransformers.spec.tsx b/apps/sap-commerce-cloud/frontend/src/api/dataTransformers.spec.tsx new file mode 100644 index 0000000000..1f9db99497 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/api/dataTransformers.spec.tsx @@ -0,0 +1,33 @@ +import { productTransformer, baseSiteTransformer } from './dataTransformers'; + +describe('dataTransformers', () => { + describe('productTransformer', () => { + it('transforms product data', () => { + const apiEndpoint = 'http://localhost:9002'; + const skuIdsToSkusMap = { '123': 'product1' }; + const baseSite = 'electronics-spa'; + const item = { + id: '123', + images: [{ url: '/image1.jpg' }], + code: '123', + name: 'Product 1', + }; + const product = productTransformer({ apiEndpoint }, skuIdsToSkusMap, baseSite)(item); + expect(product).toEqual({ + id: '123', + image: 'http://localhost:9002/image1.jpg', + name: 'Product 1', + sku: '123', + productUrl: 'product1', + }); + }); + }); + + describe('baseSiteTransformer', () => { + it('transforms base site data', () => { + const item = { uid: 'electronics-spa' }; + const baseSite = baseSiteTransformer()(item); + expect(baseSite).toEqual('electronics-spa'); + }); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/api/fetchBaseSites.spec.tsx b/apps/sap-commerce-cloud/frontend/src/api/fetchBaseSites.spec.tsx new file mode 100644 index 0000000000..b1e2b0e53b --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/api/fetchBaseSites.spec.tsx @@ -0,0 +1,57 @@ +import { vi } from 'vitest'; +import { fetchBaseSites } from './fetchBaseSites'; + +const originalFetch = global.fetch; +describe('fetchBaseSites', () => { + afterAll(() => { + global.fetch = originalFetch; + }); + + it('should fetch base sites', async () => { + global.fetch = vi.fn(() => + Promise.resolve({ + json: () => + Promise.resolve({ + baseSites: [{ uid: 'electronics-spa' }], + }), + ok: true, + status: 200, + statusText: 'OK', + headers: new Headers(), + redirected: false, + type: 'basic' as ResponseType, + url: '', + clone: () => new Response(), + body: null, + bodyUsed: false, + arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)), + blob: () => Promise.resolve(new Blob()), + formData: () => Promise.resolve(new FormData()), + text: () => Promise.resolve(''), + }) + ); + const baseSites = await fetchBaseSites({ + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }); + expect(baseSites).toEqual(['electronics-spa']); + }); + + it('should throw an error if the request fails', async () => { + global.fetch = vi.fn(() => Promise.reject(new Error('Failed to fetch'))); + await expect( + fetchBaseSites({ + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }) + ).rejects.toThrow(); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/api/fetchProductList.spec.tsx b/apps/sap-commerce-cloud/frontend/src/api/fetchProductList.spec.tsx new file mode 100644 index 0000000000..1f1a2ff73e --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/api/fetchProductList.spec.tsx @@ -0,0 +1,136 @@ +import { vi } from 'vitest'; +import { fetchProductList } from './fetchProductList'; + +const originalFetch = global.fetch; +describe('fetchProductList', () => { + afterAll(() => { + global.fetch = originalFetch; + }); + it('should fetch product list', async () => { + global.fetch = vi.fn(() => + Promise.resolve({ + json: () => + Promise.resolve({ + pagination: { totalPages: 1 }, + products: [{ id: '123' }], + }), + ok: true, + status: 200, + statusText: 'OK', + headers: new Headers(), + redirected: false, + type: 'basic' as ResponseType, + url: '', + clone: () => new Response(), + body: null, + bodyUsed: false, + arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)), + blob: () => Promise.resolve(new Blob()), + formData: () => Promise.resolve(new FormData()), + text: () => Promise.resolve(''), + }) + ); + const response = await fetchProductList( + 'electronics-spa', + 'product', + 1, + { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }, + () => {} + ); + expect(response.products).toEqual([ + { + id: '123', + image: '', + name: '', + productUrl: 'http://localhost:9002/occ/v2/electronics-spa/products/', + sku: '', + }, + ]); + }); + + it('should throw an error if the request fails', async () => { + global.fetch = vi.fn(() => Promise.reject(new Error('Failed to fetch'))); + await expect( + fetchProductList( + 'electronics-spa', + 'product', + 1, + { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }, + () => {} + ) + ).rejects.toThrow(); + }); + + it('should return an empty array if base site is not provided', async () => { + const response = await fetchProductList( + '', + 'product', + 1, + { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }, + () => {} + ); + expect(response.products).toEqual([]); + }); + + it('should return an empty array if no products are found', async () => { + global.fetch = vi.fn(() => + Promise.resolve({ + json: () => + Promise.resolve({ + pagination: { totalPages: 1 }, + products: [], + }), + ok: true, + status: 200, + statusText: 'OK', + headers: new Headers(), + redirected: false, + type: 'basic' as ResponseType, + url: '', + text: () => Promise.resolve(''), + clone: () => new Response(), + body: null, + bodyUsed: false, + arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)), + blob: () => Promise.resolve(new Blob()), + formData: () => Promise.resolve(new FormData()), + }) + ); + const response = await fetchProductList( + 'electronics-spa', + 'product', + 1, + { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }, + () => {} + ); + expect(response.products).toEqual([]); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/api/fetchProductPreview.spec.tsx b/apps/sap-commerce-cloud/frontend/src/api/fetchProductPreview.spec.tsx new file mode 100644 index 0000000000..956b1cdf93 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/api/fetchProductPreview.spec.tsx @@ -0,0 +1,83 @@ +import { vi } from 'vitest'; +import { fetchProductPreviews } from './fetchProductPreviews'; + +const originalFetch = global.fetch; +describe('fetchProductPreviews', () => { + afterAll(() => { + global.fetch = originalFetch; + }); + it('should fetch product previews', async () => { + global.fetch = vi.fn(() => + Promise.resolve({ + json: () => Promise.resolve(), + ok: true, + text: () => Promise.resolve(''), + status: 200, + statusText: 'OK', + headers: new Headers(), + redirected: false, + type: 'basic' as ResponseType, + url: '', + clone: () => new Response(), + body: null, + bodyUsed: false, + arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)), + blob: () => Promise.resolve(new Blob()), + formData: () => Promise.resolve(new FormData()), + }) + ); + const productPreviews = await fetchProductPreviews(['1', '2'], { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }); + expect(productPreviews).toEqual([ + { + id: '', + image: '', + name: '', + productUrl: '', + sku: '', + }, + { + id: '', + image: '', + name: '', + productUrl: '', + sku: '', + }, + { + id: '', + image: '', + isMissing: true, + name: '', + productUrl: '1', + sku: '1', + }, + { + id: '', + image: '', + isMissing: true, + name: '', + productUrl: '2', + sku: '2', + }, + ]); + }); + it('should throw an error if the request fails', async () => { + global.fetch = vi.fn(() => Promise.reject(new Error('Failed to fetch'))); + await expect( + fetchProductPreviews(['1', '2'], { + installation: { + apiEndpoint: 'http://localhost:9002', + baseSites: 'electronics-spa', + }, + instance: 'electronics', + invocation: '123', + }) + ).rejects.toThrow(); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/components/Dialog/Dialog.spec.tsx b/apps/sap-commerce-cloud/frontend/src/components/Dialog/Dialog.spec.tsx new file mode 100644 index 0000000000..6951283da2 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Dialog/Dialog.spec.tsx @@ -0,0 +1,119 @@ +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { vi } from 'vitest'; +import Dialog from './Dialog'; +import { DialogAppSDK } from '@contentful/app-sdk'; +import { AppParameters, Product } from '../../interfaces'; + +describe('Dialog', () => { + let sdkMock: DialogAppSDK; + + beforeAll(() => { + vi.mock('../../api/fetchBaseSites', () => ({ + fetchBaseSites: vi.fn(() => Promise.resolve(['site1', 'site2'])), + })); + + vi.mock('../../api/fetchProductList', () => ({ + fetchProductList: vi.fn((baseSite, query, page, parameters, updateTotalPages) => { + const products: Product[] = [ + { + id: 'product1', + name: 'Product 1', + sku: 'P1', + image: 'image1.jpg', + productUrl: 'product1', + }, + { + id: 'product2', + name: 'Product 2', + sku: 'P2', + image: 'image2.jpg', + productUrl: 'product2', + }, + ]; + updateTotalPages(2); // Set total pages to 2 for testing pagination + return Promise.resolve({ products, errors: [] }); + }), + })); + + sdkMock = { + window: { + startAutoResizer: vi.fn(), + }, + space: { + sys: { + id: 'spaceId', + }, + }, + dialogs: { + openCurrentApp: vi.fn(), + }, + parameters: { + installation: {}, + invocation: { + apiEndpoint: 'https://api.example.com', + baseSites: 'site1,site2', + fieldValue: [], + }, + }, + cma: {}, + cmaAdapter: {}, + } as unknown as DialogAppSDK; + }); + + afterAll(() => { + vi.clearAllMocks(); + }); + + it('renders correctly and matches snapshot', async () => { + const { container } = render(); + await waitFor(() => screen.getByText('Product 1')); // Wait for products to load + expect(container).toMatchSnapshot(); + }); + + it('loads base sites and products on mount', async () => { + render(); + await waitFor(() => { + expect(screen.getByText('Product 1')).toBeInTheDocument(); + expect(screen.getByText('Product 2')).toBeInTheDocument(); + }); + }); + + it('updates products when base site is changed', async () => { + render(); + await waitFor(() => screen.getByText('Product 1')); + + fireEvent.change(screen.getByRole('combobox'), { target: { value: 'site2' } }); + await waitFor(() => { + expect(screen.getByText('Product 1')).toBeInTheDocument(); + expect(screen.getByText('Product 2')).toBeInTheDocument(); + }); + }); + + it('updates products when search term is entered', async () => { + render(); + await waitFor(() => screen.getByText('Product 1')); + + const searchInput = screen.getByPlaceholderText('Search Term...'); + fireEvent.change(searchInput, { target: { value: 'Product 1' } }); + fireEvent.keyPress(searchInput, { key: 'Enter', code: 'Enter' }); + + await waitFor(() => { + expect(screen.getByText('Product 1')).toBeInTheDocument(); + }); + }); + + it('handles pagination correctly', async () => { + render(); + await waitFor(() => screen.getByText('Product 1')); + + fireEvent.click(screen.getByText('Next')); + await waitFor(() => { + expect(screen.getByText('Product 1')).toBeInTheDocument(); // This would normally update if the API call was real + }); + + fireEvent.click(screen.getByText('Previous')); + await waitFor(() => { + expect(screen.getByText('Product 1')).toBeInTheDocument(); // Same as above + }); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/components/Dialog/ProductList.spec.tsx b/apps/sap-commerce-cloud/frontend/src/components/Dialog/ProductList.spec.tsx new file mode 100644 index 0000000000..dfc23c2e8e --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Dialog/ProductList.spec.tsx @@ -0,0 +1,49 @@ +import { render, screen } from '@testing-library/react'; +import { ProductList } from './ProductList'; +import { vi } from 'vitest'; +import { DialogExtensionSDK } from '@contentful/app-sdk'; + +describe('ProductList', () => { + it('renders', () => { + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + it('selectButtonClickEvent', async () => { + const close = vi.fn(); + const { container } = render( + + ); + const selectButton = await screen.findByLabelText('Select'); + selectButton.click(); + expect(close).toHaveBeenCalled(); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/Dialog.spec.tsx.snap b/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/Dialog.spec.tsx.snap new file mode 100644 index 0000000000..0851031eb1 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/Dialog.spec.tsx.snap @@ -0,0 +1,368 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Dialog > renders 1`] = ` +
+
+
+ +
+
+
+ +
+
+
+ + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Select + + Code + + Name + + Image +
+
+ +
+
+ P1 + + Product 1 + + product +
+
+ +
+
+ P2 + + Product 2 + + product +
+
+ +
+
+`; diff --git a/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/ProductList.spec.tsx.snap b/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/ProductList.spec.tsx.snap new file mode 100644 index 0000000000..7a83c49474 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Dialog/__snapshots__/ProductList.spec.tsx.snap @@ -0,0 +1,3 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`ProductList > renders 1`] = `
`; diff --git a/apps/sap-commerce-cloud/frontend/src/components/Field/Field.spec.tsx b/apps/sap-commerce-cloud/frontend/src/components/Field/Field.spec.tsx new file mode 100644 index 0000000000..cd949ff83d --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Field/Field.spec.tsx @@ -0,0 +1,90 @@ +import { FieldAppSDK } from '@contentful/app-sdk'; +import Field from './Field'; +import { render } from '@testing-library/react'; +import { AppParameters } from '../../interfaces'; +import { vi } from 'vitest'; + +describe('Field', () => { + it('should render', () => { + const { container } = render( + , + }} + /> + ); + expect(container).toMatchSnapshot(); + }); + + it('should update state value', () => { + const sdk = { + field: { + type: 'Array', + getValue: vi.fn(() => { + return ['sku1', 'sku2']; + }), + setValue: vi.fn((value) => { + return value; + }), + removeValue: vi.fn(), + }, + } as unknown as FieldAppSDK; + + const field = new Field({ sdk }); + field.updateStateValue(['sku1', 'sku2']); + expect(field.state.value).toEqual(['sku1', 'sku2']); + }); + + it('should open dialog', async () => { + const sdk = { + dialogs: { + openCurrentApp: vi.fn(() => { + return ['sku1', 'sku2']; + }), + }, + field: { + type: 'Array', + getValue: vi.fn(() => { + return ['sku1', 'sku2']; + }), + setValue: vi.fn((value) => { + return value; + }), + removeValue: vi.fn(), + }, + parameters: { + installation: {}, + }, + } as unknown as FieldAppSDK; + + const field = new Field({ sdk }); + await field.onDialogOpen(); + expect(field.state.value).toEqual(['sku1', 'sku2']); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/components/Field/__snapshots__/Field.spec.tsx.snap b/apps/sap-commerce-cloud/frontend/src/components/Field/__snapshots__/Field.spec.tsx.snap new file mode 100644 index 0000000000..5bfc5a3736 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/Field/__snapshots__/Field.spec.tsx.snap @@ -0,0 +1,119 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Field > should render 1`] = ` +
+
+ Logo + +
+
+`; + +exports[`Field > should render correctly 1`] = ` +
+
+
+ +
+
+
+ Logo + +
+
+`; diff --git a/apps/sap-commerce-cloud/frontend/src/components/fields.spec.tsx b/apps/sap-commerce-cloud/frontend/src/components/fields.spec.tsx new file mode 100644 index 0000000000..fa8a768903 --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/components/fields.spec.tsx @@ -0,0 +1,89 @@ +import { + getCompatibleFields, + selectedFieldsToTargetState, + editorInterfacesToSelectedFields, +} from './fields'; + +describe('getCompatibleFields', () => { + it('should return compatible fields', () => { + const contentTypes = [ + { + sys: { id: 'ct1' }, + name: 'ct1', + fields: [ + { id: 'f1', name: 'f1', type: 'Symbol' }, + { id: 'f2', name: 'f2', type: 'Array', items: { type: 'Symbol' } }, + { id: 'f3', name: 'f3', type: 'Array', items: { type: 'Link' } }, + { id: 'f4', name: 'f4', type: 'Link' }, + ], + }, + { + sys: { id: 'ct2' }, + name: 'ct2', + fields: [ + { id: 'f5', name: 'f5', type: 'Symbol' }, + { id: 'f6', name: 'f6', type: 'Array', items: { type: 'Symbol' } }, + ], + }, + ]; + + const result = getCompatibleFields(contentTypes); + + expect(result).toEqual({ + ct1: [{ id: 'f1', name: 'f1', type: 'Symbol' }], + ct2: [{ id: 'f5', name: 'f5', type: 'Symbol' }], + }); + }); +}); + +describe('editorInterfacesToSelectedFields', () => { + it('should return selected fields', () => { + const editorInterfaces = [ + { + sys: { contentType: { sys: { id: 'ct1' } } }, + controls: [ + { fieldId: 'f1', widgetNamespace: 'app', widgetId: 'widget1' }, + { fieldId: 'f2', widgetNamespace: 'app', widgetId: 'widget1' }, + ], + }, + { + sys: { contentType: { sys: { id: 'ct2' } } }, + controls: [ + { fieldId: 'f3', widgetNamespace: 'app', widgetId: 'widget1' }, + { fieldId: 'f4', widgetNamespace: 'app', widgetId: 'widget1' }, + ], + }, + ]; + + const result = editorInterfacesToSelectedFields(editorInterfaces, {}); + + expect(result).toEqual({}); + }); +}); + +describe('selectedFieldsToTargetState', () => { + it('should return target state', () => { + const selectedFields = [ + { ctId: 'ct1', fieldId: 'f1', sys: { id: 'f1' }, name: '' }, + { ctId: 'ct1', fieldId: 'f2', sys: { id: 'f2' }, name: '' }, + { ctId: 'ct2', fieldId: 'f3', sys: { id: 'f3' }, name: '' }, + { ctId: 'ct2', fieldId: 'f4', sys: { id: 'f4' }, name: '' }, + ]; + + const compatibleFields = { + ct1: {}, + ct2: {}, + }; + + const result = selectedFieldsToTargetState(selectedFields, compatibleFields); + + expect(result).toEqual({ + EditorInterface: { + f1: {}, + f2: {}, + f3: {}, + f4: {}, + }, + }); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/index.spec.tsx b/apps/sap-commerce-cloud/frontend/src/index.spec.tsx new file mode 100644 index 0000000000..497b83eb6a --- /dev/null +++ b/apps/sap-commerce-cloud/frontend/src/index.spec.tsx @@ -0,0 +1,55 @@ +import { vi } from 'vitest'; +import { locations } from '@contentful/app-sdk'; +import AppConfig from './AppConfig/AppConfig'; + +let renderMock: any; + +vi.mock('@contentful/app-sdk', () => ({ + init: vi.fn((cb) => { + const sdk = { + location: { + is: vi.fn((location) => location === mockLocation), + }, + }; + cb(sdk); + }), + locations: { + LOCATION_APP_CONFIG: 'app-config', + LOCATION_ENTRY_FIELD: 'entry-field', + LOCATION_DIALOG: 'dialog', + }, +})); + +let mockLocation: any = locations.LOCATION_APP_CONFIG; + +document.body.innerHTML = '
'; + +describe('index.tsx', () => { + beforeEach(() => { + vi.clearAllMocks(); + mockLocation = locations.LOCATION_APP_CONFIG; + + renderMock = vi.fn(); + vi.doMock('react-dom/client', () => ({ + createRoot: vi.fn().mockReturnValue({ + render: renderMock, + }), + })); + }); + + it('renders AppConfig component when location is LOCATION_APP_CONFIG', async () => { + await import('./index'); + + expect(renderMock).toHaveBeenCalledWith( + + ); + }); +}); diff --git a/apps/sap-commerce-cloud/frontend/src/index.tsx b/apps/sap-commerce-cloud/frontend/src/index.tsx index 623fdf16d7..22b838c1b3 100644 --- a/apps/sap-commerce-cloud/frontend/src/index.tsx +++ b/apps/sap-commerce-cloud/frontend/src/index.tsx @@ -10,6 +10,7 @@ import { AppParameters } from './interfaces'; init(async (sdk) => { const rootEl = document.getElementById('root'); + if (!rootEl) { throw new Error('Root element not found'); } diff --git a/apps/sap-commerce-cloud/package-lock.json b/apps/sap-commerce-cloud/package-lock.json index 2d8cf00874..c254219b76 100644 --- a/apps/sap-commerce-cloud/package-lock.json +++ b/apps/sap-commerce-cloud/package-lock.json @@ -13,10 +13,420 @@ "esbuild": "^0.23.0" }, "devDependencies": { + "@testing-library/jest-dom": "^5.11.9", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^12.7.2", + "@types/jest": "^26.0.20", + "@types/lodash.get": "^4.4.6", + "@types/node": "^20.0.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "@vitest/coverage-v8": "^2.0.5", "contentful-management": "^11.3.0", - "ts-node": "^10.9.1" + "happy-dom": "^14.12.3", + "ts-node": "^10.9.1", + "typescript": "^4.1.5", + "vite": "^5.4.0", + "vitest": "2.0.5" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@contentful/app-scripts": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@contentful/app-scripts/-/app-scripts-1.25.0.tgz", @@ -43,44 +453,6 @@ "npm": ">=6" } }, - "node_modules/@contentful/app-scripts/node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@contentful/app-scripts/node_modules/contentful-management": { - "version": "11.27.4", - "resolved": "https://registry.npmjs.org/contentful-management/-/contentful-management-11.27.4.tgz", - "integrity": "sha512-YE9RvdH5IydBXdbOmig9Qz1MuLT0AsGbkF8q+koshxASv+I2PGjxzxVRsI6cxW2iAtItcSS2jkaczEs3Gioj9Q==", - "dependencies": { - "@contentful/rich-text-types": "^16.3.0", - "@types/json-patch": "0.0.30", - "axios": "~1.6.8", - "contentful-sdk-core": "^8.1.0", - "fast-copy": "^3.0.0", - "lodash.isplainobject": "^4.0.6", - "type-fest": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@contentful/app-scripts/node_modules/type-fest": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz", - "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@contentful/rich-text-types": { "version": "16.8.3", "resolved": "https://registry.npmjs.org/@contentful/rich-text-types/-/rich-text-types-16.8.3.tgz", @@ -101,6 +473,16 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", @@ -461,35 +843,179 @@ "node": ">=18" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "engines": { "node": ">=8" } @@ -505,6 +1031,29 @@ "node": ">=8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/@segment/analytics-core": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.6.0.tgz", @@ -541,6 +1090,122 @@ "node": ">=18" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "12.8.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", + "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -565,115 +1230,471 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/json-patch": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/json-patch/-/json-patch-0.0.30.tgz", - "integrity": "sha512-MhCUjojzDhVLnZnxwPwa+rETFRDQ0ffjxYdrqOP6TBO2O0/Z64PV5tNeYApo4bc4y4frbWOrRwv/eEkXlI13Rw==" + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true }, - "node_modules/@types/node": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz", - "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, - "peer": true, "dependencies": { - "undici-types": "~6.18.2" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/adm-zip": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz", - "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==", - "engines": { - "node": ">=12.0" + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 10" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "node_modules/@types/json-patch": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/json-patch/-/json-patch-0.0.30.tgz", + "integrity": "sha512-MhCUjojzDhVLnZnxwPwa+rETFRDQ0ffjxYdrqOP6TBO2O0/Z64PV5tNeYApo4bc4y4frbWOrRwv/eEkXlI13Rw==" + }, + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/@types/lodash.get": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.9.tgz", + "integrity": "sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } }, - "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "node_modules/@types/node": { + "version": "20.14.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz", + "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "undici-types": "~5.26.4" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", + "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.5", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.10", + "magicast": "^0.3.4", + "std-env": "^3.7.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "2.0.5" + } + }, + "node_modules/@vitest/expect": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", + "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "dev": true, + "dependencies": { + "@vitest/utils": "2.0.5", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", + "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.0.5", + "magic-string": "^0.30.10", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.0.5", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz", + "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -727,6 +1748,47 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -750,6 +1812,15 @@ "ieee754": "^1.2.1" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -768,6 +1839,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -788,7 +1895,16 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "node_modules/cli-cursor": { + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", @@ -862,15 +1978,17 @@ } }, "node_modules/contentful-management": { - "version": "11.31.4", - "resolved": "https://registry.npmjs.org/contentful-management/-/contentful-management-11.31.4.tgz", - "integrity": "sha512-gN2wz4lHw4hfh0aQ9X5uirfa0F5gJDgTOyJceSPa86+xPR0T0DfPVNrGeXg0w+HXXTgLmWl+LiinXvCPNW9wTA==", - "dev": true, + "version": "11.27.4", + "resolved": "https://registry.npmjs.org/contentful-management/-/contentful-management-11.27.4.tgz", + "integrity": "sha512-YE9RvdH5IydBXdbOmig9Qz1MuLT0AsGbkF8q+koshxASv+I2PGjxzxVRsI6cxW2iAtItcSS2jkaczEs3Gioj9Q==", "dependencies": { - "@contentful/rich-text-types": "^16.6.1", - "axios": "^1.7.2", - "contentful-sdk-core": "^8.3.1", - "fast-copy": "^3.0.0" + "@contentful/rich-text-types": "^16.3.0", + "@types/json-patch": "0.0.30", + "axios": "~1.6.8", + "contentful-sdk-core": "^8.1.0", + "fast-copy": "^3.0.0", + "lodash.isplainobject": "^4.0.6", + "type-fest": "^4.0.0" }, "engines": { "node": ">=18" @@ -902,6 +2020,90 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -937,6 +2139,23 @@ "node": ">=8" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -945,6 +2164,15 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -954,6 +2182,21 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -973,11 +2216,35 @@ "node": ">=4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.8.tgz", + "integrity": "sha512-4Nx0gP2tPNBLTrFxBMHpkQbtn2hidPVr/+/FTtcCiBYTucqc70zRyVZiOLj17Ui3wTO7SQ1/N+hkHYzJjBzt6A==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -997,6 +2264,26 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/esbuild": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", @@ -1035,12 +2322,84 @@ "@esbuild/win32-x64": "0.23.0" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/external-editor": { @@ -1075,6 +2434,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -1094,6 +2461,43 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -1107,6 +2511,20 @@ "node": ">= 6" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -1115,6 +2533,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -1133,6 +2578,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -1144,6 +2630,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/happy-dom": { + "version": "14.12.3", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-14.12.3.tgz", + "integrity": "sha512-vsYlEs3E9gLwA1Hp+w3qzu+RUDFf4VTT8cyKqVICoZ2k7WM++Qyd2LwzyTi5bqMJFiIC/vNpTDYuxdreENRK/g==", + "dev": true, + "dependencies": { + "entities": "^4.5.0", + "webidl-conversions": "^7.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1185,6 +2694,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -1196,6 +2720,21 @@ "node": ">= 0.4" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1234,6 +2773,15 @@ "node": ">= 4" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1264,157 +2812,185 @@ "node": ">=12.0.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jose": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", - "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://github.com/sponsors/panva" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -1422,70 +2998,67 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "call-bind": "^1.0.7" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz", - "integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -1493,244 +3066,222 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "is-docker": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "dependencies": { - "tslib": "^2.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "node_modules/jose": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", + "funding": { + "url": "https://github.com/sponsors/panva" + } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.6.0" + "node": ">=4" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "json5": "lib/cli.js" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { "node": ">=10" }, @@ -1738,37 +3289,1663 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=14.17" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/undici-types": { - "version": "6.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", - "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==", + "node_modules/loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", "dev": true, - "peer": true + "dependencies": { + "get-func-name": "^2.0.1" + } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", + "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.4", + "@babel/types": "^7.24.0", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz", + "integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", + "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", + "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/type-fest": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz", + "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vite": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz", + "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.41", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", + "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.5", + "pathe": "^1.1.2", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", + "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.5", + "@vitest/pretty-format": "^2.0.5", + "@vitest/runner": "2.0.5", + "@vitest/snapshot": "2.0.5", + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "debug": "^4.3.5", + "execa": "^8.0.1", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.0.5", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.0.5", + "@vitest/ui": "2.0.5", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } }, "node_modules/wcwidth": { "version": "1.0.1", @@ -1779,9 +4956,22 @@ } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { "version": "5.0.0", @@ -1792,6 +4982,95 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -1805,6 +5084,30 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/apps/sap-commerce-cloud/package.json b/apps/sap-commerce-cloud/package.json index f1c258e736..139fe68a1e 100644 --- a/apps/sap-commerce-cloud/package.json +++ b/apps/sap-commerce-cloud/package.json @@ -23,6 +23,20 @@ }, "devDependencies": { "contentful-management": "^11.3.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "@testing-library/jest-dom": "^5.11.9", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^12.7.2", + "@types/jest": "^26.0.20", + "@types/lodash.get": "^4.4.6", + "@types/node": "^20.0.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "@vitest/coverage-v8": "^2.0.5", + "happy-dom": "^14.12.3", + "typescript": "^4.1.5", + "vite": "^5.4.0", + "vitest": "2.0.5" } } diff --git a/apps/sap-commerce-cloud/src/components/Dialog/ProductList.tsx b/apps/sap-commerce-cloud/src/components/Dialog/ProductList.tsx new file mode 100644 index 0000000000..91bd56fce6 --- /dev/null +++ b/apps/sap-commerce-cloud/src/components/Dialog/ProductList.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { DialogExtensionSDK } from '@contentful/app-sdk'; +import { CheckBoxFn, Product } from '../../interfaces'; +import { Checkbox, IconButton, TableCell, TableRow } from '@contentful/f36-components'; +import get from 'lodash/get'; +import { formatProductUrl } from '../../utils'; +import { DoneIcon } from '@contentful/f36-icons'; + +interface Props { + sdk: DialogExtensionSDK; + products: Product[]; + selectedProducts: string[]; + baseSite: string; + checkboxFn: CheckBoxFn; +} + +export class ProductList extends React.Component { + selectButtonClickEvent(sku: string) { + const apiEndpoint = get(this.props.sdk.parameters.invocation, 'apiEndpoint', ''); + this.props.sdk.close([formatProductUrl(`${apiEndpoint}`, this.props.baseSite, sku)]); + } + + render() { + const isFieldTypeSymbol = + (get(this.props.sdk.parameters.invocation, 'fieldType', '') as string) === 'Symbol'; + + return ( + <> + {this.props.products.map((product, index) => { + const checkboxValue = this.props.selectedProducts.includes( + this.props.baseSite + ':' + product.sku + ); + return ( + + + {isFieldTypeSymbol ? ( + } + onClick={() => this.selectButtonClickEvent(product.sku)} + aria-label="Select"> + Select + + ) : ( + + )} + + {product.sku} + {product.name} + + product + + + ); + })} + + ); + } +}