diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/base.css b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/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/packages/business-features/keyboard-shortcuts/coverage/lcov-report/block-navigation.js b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/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/packages/business-features/keyboard-shortcuts/coverage/lcov-report/favicon.png b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/favicon.png differ diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/feature.ts.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/feature.ts.html new file mode 100644 index 0000000000..26c268a02e --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/feature.ts.html @@ -0,0 +1,136 @@ + + + + + + Code coverage report for feature.ts + + + + + + + + + +
+
+

All files feature.ts

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

+ 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 +181x +1x +1x +1x +1x +1x +1x +1x +17x +17x +17x +17x +17x +17x +1x +1x +1x + 
import { getFeature } from "@k8slens/feature-core";
+import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { reactApplicationFeature } from "@k8slens/react-application";
+ 
+export const keyboardShortcutsFeature = getFeature({
+  id: "keyboard-shortcuts",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+ 
+  dependencies: [reactApplicationFeature],
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/index.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/index.html new file mode 100644 index 0000000000..99465e1b03 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/index.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 207/207 +
+ + +
+ 100% + Branches + 36/36 +
+ + +
+ 100% + Functions + 18/18 +
+ + +
+ 100% + Lines + 207/207 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%17/17100%3/3100%3/3100%17/17
invoke-shortcut.injectable.ts +
+
100%94/94100%22/22100%6/6100%94/94
keyboard-shortcut-injection-token.ts +
+
100%22/22100%1/1100%1/1100%22/22
keyboard-shortcut-listener-react-application-hoc.injectable.tsx +
+
100%10/10100%2/2100%2/2100%10/10
keyboard-shortcut-listener.tsx +
+
100%41/41100%5/5100%3/3100%41/41
keyboard-shortcut-scope.tsx +
+
100%12/12100%2/2100%2/2100%12/12
platform.injectable.ts +
+
100%11/11100%1/1100%1/1100%11/11
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/invoke-shortcut.injectable.ts.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/invoke-shortcut.injectable.ts.html new file mode 100644 index 0000000000..7507552496 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/invoke-shortcut.injectable.ts.html @@ -0,0 +1,367 @@ + + + + + + Code coverage report for invoke-shortcut.injectable.ts + + + + + + + + + +
+
+

All files invoke-shortcut.injectable.ts

+
+ +
+ 100% + Statements + 94/94 +
+ + +
+ 100% + Branches + 22/22 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 94/94 +
+ + +
+

+ 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 +951x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +18x +18x +18x +16x +16x +16x +16x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +122x +94x +94x +94x +94x +94x +94x +94x +94x +28x +28x +28x +28x +28x +28x +28x +1x +1x +1x +1x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +122x +22x +22x +21x +21x +122x +122x +1x +1x +1x +1x +1x +17x +17x +17x +17x +31x +31x +31x +31x +31x +31x +31x +12x +12x +31x +17x +1x +1x +1x + 
import { pipeline } from "@ogre-tools/fp";
+import { filter, isString } from "lodash/fp";
+import { getInjectable } from "@ogre-tools/injectable";
+import {
+  Binding,
+  KeyboardShortcut,
+  keyboardShortcutInjectionToken,
+} from "./keyboard-shortcut-injection-token";
+import platformInjectable from "./platform.injectable";
+ 
+export type InvokeShortcut = (event: KeyboardEvent) => void;
+ 
+const toShortcutsWithMatchingScope = (shortcut: KeyboardShortcut) => {
+  const activeScopeElement = document.activeElement?.closest("[data-keyboard-shortcut-scope]");
+ 
+  if (!activeScopeElement) {
+    const shortcutIsRootLevel = !shortcut.scope;
+ 
+    return shortcutIsRootLevel;
+  }
+ 
+  const castedActiveScopeElementHtml = activeScopeElement as HTMLDivElement;
+ 
+  // eslint-disable-next-line xss/no-mixed-html
+  const activeScope = castedActiveScopeElementHtml.dataset.keyboardShortcutScope;
+ 
+  return shortcut.scope === activeScope;
+};
+ 
+const toBindingWithDefaults = (binding: Binding) =>
+  isString(binding)
+    ? {
+        code: binding,
+        shift: false,
+        ctrl: false,
+        altOrOption: false,
+        meta: false,
+        ctrlOrCommand: false,
+      }
+    : {
+        ctrl: false,
+        shift: false,
+        altOrOption: false,
+        meta: false,
+        ctrlOrCommand: false,
+        ...binding,
+      };
+ 
+const toShortcutsWithMatchingBinding =
+  (event: KeyboardEvent, platform: string) => (shortcut: KeyboardShortcut) => {
+    const binding = toBindingWithDefaults(shortcut.binding);
+ 
+    const shiftModifierMatches = binding.shift === event.shiftKey;
+    const altModifierMatches = binding.altOrOption === event.altKey;
+ 
+    const isMac = platform === "darwin";
+ 
+    const ctrlModifierMatches =
+      binding.ctrl === event.ctrlKey || (!isMac && binding.ctrlOrCommand === event.ctrlKey);
+ 
+    const metaModifierMatches =
+      binding.meta === event.metaKey || (isMac && binding.ctrlOrCommand === event.metaKey);
+ 
+    return (
+      event.code === binding.code &&
+      shiftModifierMatches &&
+      ctrlModifierMatches &&
+      altModifierMatches &&
+      metaModifierMatches
+    );
+  };
+ 
+const invokeShortcutInjectable = getInjectable({
+  id: "invoke-shortcut",
+ 
+  instantiate: (di): InvokeShortcut => {
+    const getShortcuts = () => di.injectMany(keyboardShortcutInjectionToken);
+    const platform = di.inject(platformInjectable);
+ 
+    return (event) => {
+      const shortcutsToInvoke = pipeline(
+        getShortcuts(),
+        filter(toShortcutsWithMatchingBinding(event, platform)),
+        filter(toShortcutsWithMatchingScope),
+      );
+ 
+      if (shortcutsToInvoke.length) {
+        shortcutsToInvoke.forEach((shortcut) => shortcut.invoke());
+      }
+    };
+  },
+});
+ 
+export default invokeShortcutInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-injection-token.ts.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-injection-token.ts.html new file mode 100644 index 0000000000..f12f8bee01 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-injection-token.ts.html @@ -0,0 +1,151 @@ + + + + + + Code coverage report for keyboard-shortcut-injection-token.ts + + + + + + + + + +
+
+

All files keyboard-shortcut-injection-token.ts

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

+ 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 +231x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+ 
+export type Binding =
+  | string
+  | {
+      code: string;
+      shift?: boolean;
+      ctrl?: boolean;
+      altOrOption?: boolean;
+      meta?: boolean;
+      ctrlOrCommand?: boolean;
+    };
+ 
+export type KeyboardShortcut = {
+  binding: Binding;
+  invoke: () => void;
+  scope?: string;
+};
+ 
+export const keyboardShortcutInjectionToken = getInjectionToken<KeyboardShortcut>({
+  id: "keyboard-shortcut-injection-token",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener-react-application-hoc.injectable.tsx.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener-react-application-hoc.injectable.tsx.html new file mode 100644 index 0000000000..1fafa4ac82 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener-react-application-hoc.injectable.tsx.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for keyboard-shortcut-listener-react-application-hoc.injectable.tsx + + + + + + + + + +
+
+

All files keyboard-shortcut-listener-react-application-hoc.injectable.tsx

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { KeyboardShortcutListener } from "./keyboard-shortcut-listener";
+import { reactApplicationHigherOrderComponentInjectionToken } from "@k8slens/react-application";
+ 
+export const keyboardShortcutListenerReactApplicationHocInjectable = getInjectable({
+  id: "keyboard-shortcut-listener-react-application-hoc",
+  instantiate: () => KeyboardShortcutListener,
+ 
+  injectionToken: reactApplicationHigherOrderComponentInjectionToken,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener.tsx.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener.tsx.html new file mode 100644 index 0000000000..77c67d69b9 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-listener.tsx.html @@ -0,0 +1,208 @@ + + + + + + Code coverage report for keyboard-shortcut-listener.tsx + + + + + + + + + +
+
+

All files keyboard-shortcut-listener.tsx

+
+ +
+ 100% + Statements + 41/41 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 41/41 +
+ + +
+

+ 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 +421x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +1x +1x +1x +1x +1x +1x +1x +1x +1x +17x +17x +17x +1x +1x + 
import { withInjectables } from "@ogre-tools/injectable-react";
+import React, { useEffect } from "react";
+ 
+import invokeShortcutInjectable, { InvokeShortcut } from "./invoke-shortcut.injectable";
+ 
+export interface KeyboardShortcutListenerProps {
+  children: React.ReactNode;
+}
+ 
+interface Dependencies {
+  invokeShortcut: InvokeShortcut;
+}
+ 
+const NonInjectedKeyboardShortcutListener = ({
+  children,
+  invokeShortcut,
+}: KeyboardShortcutListenerProps & Dependencies) => {
+  useEffect(() => {
+    document.addEventListener("keydown", invokeShortcut);
+ 
+    return () => {
+      document.removeEventListener("keydown", invokeShortcut);
+    };
+  });
+ 
+  return <>{children}</>;
+};
+ 
+export const KeyboardShortcutListener = withInjectables<
+  Dependencies,
+  KeyboardShortcutListenerProps
+>(
+  NonInjectedKeyboardShortcutListener,
+ 
+  {
+    getProps: (di, props) => ({
+      invokeShortcut: di.inject(invokeShortcutInjectable),
+      ...props,
+    }),
+  },
+);
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-scope.tsx.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-scope.tsx.html new file mode 100644 index 0000000000..e58469923f --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/keyboard-shortcut-scope.tsx.html @@ -0,0 +1,121 @@ + + + + + + Code coverage report for keyboard-shortcut-scope.tsx + + + + + + + + + +
+
+

All files keyboard-shortcut-scope.tsx

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

+ 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 +131x +1x +1x +1x +1x +1x +1x +1x +17x +17x +1x +1x + 
import React from "react";
+ 
+export interface KeyboardShortcutScopeProps {
+  id: string;
+  children: React.ReactNode;
+}
+ 
+export const KeyboardShortcutScope = ({ id, children }: KeyboardShortcutScopeProps) => (
+  <div data-keyboard-shortcut-scope={id} data-keyboard-shortcut-scope-test={id} tabIndex={-1}>
+    {children}
+  </div>
+);
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/platform.injectable.ts.html b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/platform.injectable.ts.html new file mode 100644 index 0000000000..7890d91666 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/platform.injectable.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for platform.injectable.ts + + + + + + + + + +
+
+

All files platform.injectable.ts

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 11/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 +121x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+ 
+export const allPlatforms = ["win32", "darwin", "linux"] as const;
+ 
+const platformInjectable = getInjectable({
+  id: "platform",
+  instantiate: () => process.platform as (typeof allPlatforms)[number],
+  causesSideEffects: true,
+});
+ 
+export default platformInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/prettify.css b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/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/packages/business-features/keyboard-shortcuts/coverage/lcov-report/prettify.js b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/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/packages/business-features/keyboard-shortcuts/coverage/lcov-report/sort-arrow-sprite.png b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/business-features/keyboard-shortcuts/coverage/lcov-report/sorter.js b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov-report/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/packages/business-features/keyboard-shortcuts/coverage/lcov.info b/packages/business-features/keyboard-shortcuts/coverage/lcov.info new file mode 100644 index 0000000000..65148798d8 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/coverage/lcov.info @@ -0,0 +1,342 @@ +TN: +SF:src/feature.ts +FN:5,get +FN:8,register +FN:12,getRequireContexts +FNF:3 +FNH:3 +FNDA:17,get +FNDA:17,register +FNDA:17,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,17 +DA:10,17 +DA:11,17 +DA:12,17 +DA:13,17 +DA:14,17 +DA:15,1 +DA:16,1 +DA:17,1 +LF:17 +LH:17 +BRDA:5,0,0,17 +BRDA:8,1,0,17 +BRDA:12,2,0,17 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/invoke-shortcut.injectable.ts +FN:94,get +FN:13,toShortcutsWithMatchingScope +FN:30,toBindingWithDefaults +FN:50,toShortcutsWithMatchingBinding +FN:76,instantiate +FN:77,getShortcuts +FNF:6 +FNH:6 +FNDA:51,get +FNDA:18,toShortcutsWithMatchingScope +FNDA:122,toBindingWithDefaults +FNDA:31,toShortcutsWithMatchingBinding +FNDA:17,instantiate +FNDA:31,getShortcuts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,18 +DA:15,18 +DA:16,18 +DA:17,16 +DA:18,16 +DA:19,16 +DA:20,16 +DA:21,2 +DA:22,2 +DA:23,2 +DA:24,2 +DA:25,2 +DA:26,2 +DA:27,2 +DA:28,2 +DA:29,1 +DA:30,1 +DA:31,122 +DA:32,94 +DA:33,94 +DA:34,94 +DA:35,94 +DA:36,94 +DA:37,94 +DA:38,94 +DA:39,94 +DA:40,28 +DA:41,28 +DA:42,28 +DA:43,28 +DA:44,28 +DA:45,28 +DA:46,28 +DA:47,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,122 +DA:52,122 +DA:53,122 +DA:54,122 +DA:55,122 +DA:56,122 +DA:57,122 +DA:58,122 +DA:59,122 +DA:60,122 +DA:61,122 +DA:62,122 +DA:63,122 +DA:64,122 +DA:65,122 +DA:66,22 +DA:67,22 +DA:68,21 +DA:69,21 +DA:70,122 +DA:71,122 +DA:72,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,17 +DA:78,17 +DA:79,17 +DA:80,17 +DA:81,31 +DA:82,31 +DA:83,31 +DA:84,31 +DA:85,31 +DA:86,31 +DA:87,31 +DA:88,12 +DA:89,12 +DA:90,31 +DA:91,17 +DA:92,1 +DA:93,1 +DA:94,1 +LF:94 +LH:94 +BRDA:94,0,0,51 +BRDA:13,1,0,18 +BRDA:16,2,0,16 +BRDA:21,3,0,2 +BRDA:30,4,0,122 +BRDA:31,5,0,94 +BRDA:39,6,0,28 +BRDA:50,7,0,31 +BRDA:50,8,0,122 +BRDA:59,9,0,39 +BRDA:59,10,0,16 +BRDA:62,11,0,53 +BRDA:62,12,0,37 +BRDA:65,13,0,22 +BRDA:66,14,0,22 +BRDA:67,15,0,21 +BRDA:68,16,0,21 +BRDA:76,17,0,17 +BRDA:77,18,0,31 +BRDA:80,19,0,31 +BRDA:87,20,0,12 +BRDA:88,21,0,14 +BRF:22 +BRH:22 +end_of_record +TN: +SF:src/keyboard-shortcut-injection-token.ts +FN:20,get +FNF:1 +FNH:1 +FNDA:96,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +LF:22 +LH:22 +BRDA:20,0,0,96 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/keyboard-shortcut-listener-react-application-hoc.injectable.tsx +FN:5,get +FN:7,instantiate +FNF:2 +FNH:2 +FNDA:17,get +FNDA:17,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRDA:5,0,0,17 +BRDA:7,1,0,17 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/keyboard-shortcut-listener.tsx +FN:29,get +FN:14,NonInjectedKeyboardShortcutListener +FN:36,getProps +FNF:3 +FNH:3 +FNDA:17,get +FNDA:17,NonInjectedKeyboardShortcutListener +FNDA:17,getProps +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,17 +DA:16,17 +DA:17,17 +DA:18,17 +DA:19,17 +DA:20,17 +DA:21,17 +DA:22,17 +DA:23,17 +DA:24,17 +DA:25,17 +DA:26,17 +DA:27,17 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,17 +DA:38,17 +DA:39,17 +DA:40,1 +DA:41,1 +LF:41 +LH:41 +BRDA:29,0,0,17 +BRDA:14,1,0,17 +BRDA:18,2,0,17 +BRDA:21,3,0,17 +BRDA:36,4,0,17 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/keyboard-shortcut-scope.tsx +FN:8,get +FN:8,KeyboardShortcutScope +FNF:2 +FNH:2 +FNDA:17,get +FNDA:17,KeyboardShortcutScope +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,17 +DA:10,17 +DA:11,1 +DA:12,1 +LF:12 +LH:12 +BRDA:8,0,0,17 +BRDA:8,1,0,17 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/platform.injectable.ts +FN:7,instantiate +FNF:1 +FNH:1 +FNDA:11,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +LF:11 +LH:11 +BRDA:7,0,0,11 +BRF:1 +BRH:1 +end_of_record diff --git a/packages/business-features/keyboard-shortcuts/dist/index.d.ts b/packages/business-features/keyboard-shortcuts/dist/index.d.ts new file mode 100644 index 0000000000..1505ebbc23 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/dist/index.d.ts @@ -0,0 +1,5 @@ +export { KeyboardShortcutScope } from "./src/keyboard-shortcut-scope"; +export type { KeyboardShortcutScopeProps } from "./src/keyboard-shortcut-scope"; +export { keyboardShortcutInjectionToken } from "./src/keyboard-shortcut-injection-token"; +export type { Binding, KeyboardShortcut } from "./src/keyboard-shortcut-injection-token"; +export { keyboardShortcutsFeature } from "./src/feature"; diff --git a/packages/business-features/keyboard-shortcuts/dist/index.js b/packages/business-features/keyboard-shortcuts/dist/index.js new file mode 100644 index 0000000000..042992d048 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={940:(e,t,r)=>{"use strict";r.d(t,{n:()=>c});const o=require("@k8slens/feature-core"),n=require("@ogre-tools/injectable-extension-for-auto-registration");var a=r(132);e=r.hmd(e);const c=(0,o.getFeature)({id:"keyboard-shortcuts",register:t=>{(0,n.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[r(888)]})},dependencies:[a.reactApplicationFeature]})},70:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});const o=require("@ogre-tools/fp"),n=require("lodash/fp");var a=r(905),c=r(950),i=r(101);const s=e=>{var t;const r=null===(t=document.activeElement)||void 0===t?void 0:t.closest("[data-keyboard-shortcut-scope]");if(!r)return!e.scope;const o=r.dataset.keyboardShortcutScope;return e.scope===o},d=(0,a.getInjectable)({id:"invoke-shortcut",instantiate:e=>{const t=e.inject(i.default);return r=>{const a=(0,o.pipeline)(e.injectMany(c.M),(0,n.filter)(((e,t)=>r=>{const o=(e=>(0,n.isString)(e)?{code:e,shift:!1,ctrl:!1,altOrOption:!1,meta:!1,ctrlOrCommand:!1}:{ctrl:!1,shift:!1,altOrOption:!1,meta:!1,ctrlOrCommand:!1,...e})(r.binding),a=o.shift===e.shiftKey,c=o.altOrOption===e.altKey,i="darwin"===t,s=o.ctrl===e.ctrlKey||!i&&o.ctrlOrCommand===e.ctrlKey,d=o.meta===e.metaKey||i&&o.ctrlOrCommand===e.metaKey;return e.code===o.code&&a&&s&&c&&d})(r,t)),(0,n.filter)(s));a.length&&a.forEach((e=>e.invoke()))}}})},950:(e,t,r)=>{"use strict";r.d(t,{M:()=>o});const o=(0,r(905).getInjectionToken)({id:"keyboard-shortcut-injection-token"})},933:(e,t,r)=>{"use strict";r.r(t),r.d(t,{keyboardShortcutListenerReactApplicationHocInjectable:()=>l});var o=r(905);const n=require("@ogre-tools/injectable-react");var a=r(689),c=r.n(a),i=r(70);const s=(0,n.withInjectables)((({children:e,invokeShortcut:t})=>((0,a.useEffect)((()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}))),c().createElement(c().Fragment,null,e))),{getProps:(e,t)=>({invokeShortcut:e.inject(i.default),...t})});var d=r(132);const l=(0,o.getInjectable)({id:"keyboard-shortcut-listener-react-application-hoc",instantiate:()=>s,injectionToken:d.reactApplicationHigherOrderComponentInjectionToken})},101:(e,t,r)=>{"use strict";r.r(t),r.d(t,{allPlatforms:()=>n,default:()=>a});var o=r(905);const n=["win32","darwin","linux"],a=(0,o.getInjectable)({id:"platform",instantiate:()=>process.platform,causesSideEffects:!0})},888:(e,t,r)=>{var o={"./invoke-shortcut.injectable.ts":70,"./keyboard-shortcut-listener-react-application-hoc.injectable.tsx":933,"./platform.injectable.ts":101};function n(e){var t=a(e);return r(t)}function a(e){if(!r.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}n.keys=function(){return Object.keys(o)},n.resolve=a,e.exports=n,n.id=888},132:e=>{"use strict";e.exports=require("@k8slens/react-application")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")},689:e=>{"use strict";e.exports=require("react")}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={id:o,loaded:!1,exports:{}};return e[o](a,a.exports,r),a.loaded=!0,a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{"use strict";r.r(o),r.d(o,{KeyboardShortcutScope:()=>n,keyboardShortcutInjectionToken:()=>a.M,keyboardShortcutsFeature:()=>c.n});var e=r(689),t=r.n(e);const n=({id:e,children:r})=>t().createElement("div",{"data-keyboard-shortcut-scope":e,"data-keyboard-shortcut-scope-test":e,tabIndex:-1},r);var a=r(950),c=r(940)})(),module.exports=o})(); \ No newline at end of file diff --git a/packages/business-features/keyboard-shortcuts/dist/src/feature.d.ts b/packages/business-features/keyboard-shortcuts/dist/src/feature.d.ts new file mode 100644 index 0000000000..4c535bcfd7 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const keyboardShortcutsFeature: import("@k8slens/feature-core").Feature; diff --git a/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-injection-token.d.ts b/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-injection-token.d.ts new file mode 100644 index 0000000000..80a5cb6147 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-injection-token.d.ts @@ -0,0 +1,14 @@ +export type Binding = string | { + code: string; + shift?: boolean; + ctrl?: boolean; + altOrOption?: boolean; + meta?: boolean; + ctrlOrCommand?: boolean; +}; +export type KeyboardShortcut = { + binding: Binding; + invoke: () => void; + scope?: string; +}; +export declare const keyboardShortcutInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-scope.d.ts b/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-scope.d.ts new file mode 100644 index 0000000000..3ea8154ba4 --- /dev/null +++ b/packages/business-features/keyboard-shortcuts/dist/src/keyboard-shortcut-scope.d.ts @@ -0,0 +1,6 @@ +import React from "react"; +export interface KeyboardShortcutScopeProps { + id: string; + children: React.ReactNode; +} +export declare const KeyboardShortcutScope: ({ id, children }: KeyboardShortcutScopeProps) => JSX.Element; diff --git a/packages/cluster-settings/dist/index.d.ts b/packages/cluster-settings/dist/index.d.ts new file mode 100644 index 0000000000..029d0d9e82 --- /dev/null +++ b/packages/cluster-settings/dist/index.d.ts @@ -0,0 +1,22 @@ +/// +type ClusterPreferences = { + clusterName?: string; + icon?: string | null; +}; +export interface ClusterIconMenuItem { + id: string; + title: string; + disabled?: (preferences: ClusterPreferences) => boolean; + onClick: (preferences: ClusterPreferences) => void; +} +export interface ClusterIconSettingComponentProps { + preferences: ClusterPreferences; +} +export interface ClusterIconSettingsComponent { + id: string; + Component: React.ComponentType; +} +export declare const clusterIconSettingsMenuInjectionToken: import("@ogre-tools/injectable").InjectionToken; +export declare const clusterIconSettingsComponentInjectionToken: import("@ogre-tools/injectable").InjectionToken; +export {}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/cluster-settings/dist/index.d.ts.map b/packages/cluster-settings/dist/index.d.ts.map new file mode 100644 index 0000000000..2c12620038 --- /dev/null +++ b/packages/cluster-settings/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,KAAK,kBAAkB,GAAG;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,OAAO,CAAC;IACxD,OAAO,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,qCAAqC,4EAEhD,CAAC;AAEH,eAAO,MAAM,0CAA0C,qFAErD,CAAC"} \ No newline at end of file diff --git a/packages/cluster-settings/dist/index.js b/packages/cluster-settings/dist/index.js new file mode 100644 index 0000000000..cb20f097a6 --- /dev/null +++ b/packages/cluster-settings/dist/index.js @@ -0,0 +1,7 @@ +import { getInjectionToken } from "@ogre-tools/injectable"; +export const clusterIconSettingsMenuInjectionToken = getInjectionToken({ + id: "cluster-icon-settings-menu-injection-token" +}); +export const clusterIconSettingsComponentInjectionToken = getInjectionToken({ + id: "cluster-icon-settings-component-injection-token" +}); diff --git a/packages/core/src/jest.setup.ts b/packages/core/src/jest.setup.ts index 96a4b816d4..35097c3bee 100644 --- a/packages/core/src/jest.setup.ts +++ b/packages/core/src/jest.setup.ts @@ -53,8 +53,6 @@ global.ResizeObserver = class { }; jest.mock("./renderer/components/monaco-editor/monaco-editor"); -jest.mock("./renderer/components/tooltip/withTooltip"); - jest.mock("monaco-editor"); const getInjectables = (environment: "renderer" | "main", filePathGlob: string) => [ diff --git a/packages/core/src/renderer/components/+events/events.tsx b/packages/core/src/renderer/components/+events/events.tsx index d68bb21a53..51c03191fc 100644 --- a/packages/core/src/renderer/components/+events/events.tsx +++ b/packages/core/src/renderer/components/+events/events.tsx @@ -16,7 +16,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { KubeEvent, KubeEventApi, KubeEventData } from "../../../common/k8s-api/endpoints/events.api"; import type { TableSortCallbacks, TableSortParams } from "../table"; import type { HeaderCustomizer } from "../item-object-list"; -import { Tooltip } from "../tooltip"; +import { Tooltip } from "@k8slens/tooltip"; import { Link } from "react-router-dom"; import type { IClassName } from "../../utils"; import { cssNames, stopPropagation } from "../../utils"; diff --git a/packages/core/src/renderer/components/+extensions/install.tsx b/packages/core/src/renderer/components/+extensions/install.tsx index 7572063796..e418a0bf43 100644 --- a/packages/core/src/renderer/components/+extensions/install.tsx +++ b/packages/core/src/renderer/components/+extensions/install.tsx @@ -11,7 +11,7 @@ import { Icon } from "../icon"; import { observer } from "mobx-react"; import { Input, InputValidators } from "../input"; import { SubTitle } from "../layout/sub-title"; -import { TooltipPosition } from "../tooltip"; +import { TooltipPosition } from "@k8slens/tooltip"; import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store"; import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+namespaces/subnamespace-badge.tsx b/packages/core/src/renderer/components/+namespaces/subnamespace-badge.tsx index 4ae652acc6..2cf5bfe2a6 100644 --- a/packages/core/src/renderer/components/+namespaces/subnamespace-badge.tsx +++ b/packages/core/src/renderer/components/+namespaces/subnamespace-badge.tsx @@ -5,7 +5,7 @@ import styles from "./subnamespace-badge.module.scss"; import React from "react"; -import { Tooltip } from "../tooltip"; +import { Tooltip } from "@k8slens/tooltip"; import { cssNames } from "../../utils"; interface SubnamespaceBadgeProps extends React.HTMLAttributes { diff --git a/packages/core/src/renderer/components/+nodes/route.tsx b/packages/core/src/renderer/components/+nodes/route.tsx index a868dda39b..1a232151a6 100644 --- a/packages/core/src/renderer/components/+nodes/route.tsx +++ b/packages/core/src/renderer/components/+nodes/route.tsx @@ -13,7 +13,7 @@ import type { Node } from "../../../common/k8s-api/endpoints/node.api"; import { formatNodeTaint } from "../../../common/k8s-api/endpoints/node.api"; import { LineProgress } from "../line-progress"; import { bytesToUnits } from "../../../common/utils/convertMemory"; -import { Tooltip, TooltipPosition } from "../tooltip"; +import { Tooltip, TooltipPosition } from "@k8slens/tooltip"; import kebabCase from "lodash/kebabCase"; import upperFirst from "lodash/upperFirst"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; diff --git a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/dialog/view.tsx b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/dialog/view.tsx index 3dd8549ca1..60237b232c 100644 --- a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/dialog/view.tsx +++ b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/dialog/view.tsx @@ -20,7 +20,7 @@ import { onMultiSelectFor, Select } from "../../../select"; import { Wizard, WizardStep } from "../../../wizard"; import { ObservableHashSet, nFircate } from "../../../../utils"; import { Input } from "../../../input"; -import { TooltipPosition } from "../../../tooltip"; +import { TooltipPosition } from "@k8slens/tooltip"; import type { Subject } from "../../../../../common/k8s-api/endpoints/types/subject"; import type { ClusterRoleBindingDialogState } from "./state.injectable"; import type { ClusterRoleStore } from "../../+cluster-roles/store"; diff --git a/packages/core/src/renderer/components/+workloads-overview/overview.tsx b/packages/core/src/renderer/components/+workloads-overview/overview.tsx index 8b60676da2..ea0162b02a 100644 --- a/packages/core/src/renderer/components/+workloads-overview/overview.tsx +++ b/packages/core/src/renderer/components/+workloads-overview/overview.tsx @@ -15,7 +15,7 @@ import type { IComputedValue } from "mobx"; import { makeObservable, observable, reaction } from "mobx"; import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter"; import { Icon } from "../icon"; -import { TooltipPosition } from "../tooltip"; +import { TooltipPosition } from "@k8slens/tooltip"; import { withInjectables } from "@ogre-tools/injectable-react"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api"; diff --git a/packages/core/src/renderer/components/badge/badge.tsx b/packages/core/src/renderer/components/badge/badge.tsx index f0efb701bd..4f14be3909 100644 --- a/packages/core/src/renderer/components/badge/badge.tsx +++ b/packages/core/src/renderer/components/badge/badge.tsx @@ -9,7 +9,7 @@ import React, { useEffect, useRef, useState } from "react"; import { action, observable } from "mobx"; import { observer } from "mobx-react"; import { cssNames } from "../../utils/cssNames"; -import { withTooltip } from "../tooltip"; +import { withTooltip } from "@k8slens/tooltip"; export interface BadgeProps extends React.HTMLAttributes { small?: boolean; diff --git a/packages/core/src/renderer/components/button/button.tsx b/packages/core/src/renderer/components/button/button.tsx index 8168c2abf3..f3f008567b 100644 --- a/packages/core/src/renderer/components/button/button.tsx +++ b/packages/core/src/renderer/components/button/button.tsx @@ -7,7 +7,7 @@ import "./button.scss"; import type { ButtonHTMLAttributes } from "react"; import React from "react"; import { cssNames } from "../../utils"; -import { withTooltip } from "../tooltip"; +import { withTooltip } from "@k8slens/tooltip"; export interface ButtonProps extends ButtonHTMLAttributes { label?: React.ReactNode; diff --git a/packages/core/src/renderer/components/dock/dock-tab.tsx b/packages/core/src/renderer/components/dock/dock-tab.tsx index 5a672e2fb3..fb7c5321c1 100644 --- a/packages/core/src/renderer/components/dock/dock-tab.tsx +++ b/packages/core/src/renderer/components/dock/dock-tab.tsx @@ -16,7 +16,7 @@ import { Menu, MenuItem } from "../menu"; import { observable } from "mobx"; import { withInjectables } from "@ogre-tools/injectable-react"; import dockStoreInjectable from "./dock/store.injectable"; -import { Tooltip, TooltipPosition } from "../tooltip"; +import { Tooltip, TooltipPosition } from "@k8slens/tooltip"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; export interface DockTabProps extends TabProps { diff --git a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx index 3bbe644c88..c8229eb586 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx @@ -14,7 +14,7 @@ import { observer } from "mobx-react"; import type { AvatarProps } from "../avatar"; import { Avatar } from "../avatar"; import { Icon } from "../icon"; -import { Tooltip } from "../tooltip"; +import { Tooltip } from "@k8slens/tooltip"; import type { NormalizeCatalogEntityContextMenu } from "../../catalog/normalize-menu-item.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import normalizeCatalogEntityContextMenuInjectable from "../../catalog/normalize-menu-item.injectable"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx index 4d6104b5b3..f2ef242a22 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx @@ -9,7 +9,7 @@ import { Icon } from "../icon"; import { Badge } from "../badge"; import hotbarStoreInjectable from "../../../common/hotbars/store.injectable"; import { HotbarSwitchCommand } from "./hotbar-switch-command"; -import { Tooltip, TooltipPosition } from "../tooltip"; +import { Tooltip, TooltipPosition } from "@k8slens/tooltip"; import { observer } from "mobx-react"; import type { Hotbar } from "../../../common/hotbars/types"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/icon/icon.tsx b/packages/core/src/renderer/components/icon/icon.tsx index b51299ba15..aef52515a5 100644 --- a/packages/core/src/renderer/components/icon/icon.tsx +++ b/packages/core/src/renderer/components/icon/icon.tsx @@ -10,7 +10,7 @@ import React, { createRef } from "react"; import { NavLink } from "react-router-dom"; import type { LocationDescriptor } from "history"; import { cssNames } from "../../utils"; -import { withTooltip } from "../tooltip"; +import { withTooltip } from "@k8slens/tooltip"; import isNumber from "lodash/isNumber"; import Configuration from "./configuration.svg"; import Crane from "./crane.svg"; diff --git a/packages/core/src/renderer/components/input/input.tsx b/packages/core/src/renderer/components/input/input.tsx index bbbfa60a86..bf90ecc9ca 100644 --- a/packages/core/src/renderer/components/input/input.tsx +++ b/packages/core/src/renderer/components/input/input.tsx @@ -10,8 +10,8 @@ import React from "react"; import type { SingleOrMany } from "../../utils"; import { autoBind, cssNames, debouncePromise, getRandId, isPromiseSettledFulfilled } from "../../utils"; import { Icon } from "../icon"; -import type { TooltipProps } from "../tooltip"; -import { Tooltip } from "../tooltip"; +import type { TooltipProps } from "@k8slens/tooltip"; +import { Tooltip } from "@k8slens/tooltip"; import * as Validators from "./input_validators"; import type { InputValidator, InputValidation, InputValidationResult, SyncValidationMessage } from "./input_validators"; import uniqueId from "lodash/uniqueId"; diff --git a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx index 4394902072..d13e79ec00 100644 --- a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx +++ b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx @@ -18,7 +18,7 @@ import { KubeObjectMenu } from "../kube-object-menu"; import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter"; import { ResourceKindMap, ResourceNames } from "../../utils/rbac"; import { Icon } from "../icon"; -import { TooltipPosition } from "../tooltip"; +import { TooltipPosition } from "@k8slens/tooltip"; import { withInjectables } from "@ogre-tools/injectable-react"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; import type { SubscribableStore, SubscribeStores } from "../../kube-watch-api/kube-watch-api"; diff --git a/packages/core/src/renderer/components/layout/sidebar-cluster.tsx b/packages/core/src/renderer/components/layout/sidebar-cluster.tsx index 24b0622a85..a4afcf47b8 100644 --- a/packages/core/src/renderer/components/layout/sidebar-cluster.tsx +++ b/packages/core/src/renderer/components/layout/sidebar-cluster.tsx @@ -12,7 +12,7 @@ import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-even import { Avatar } from "../avatar"; import { Icon } from "../icon"; import { Menu, MenuItem } from "../menu"; -import { Tooltip } from "../tooltip"; +import { Tooltip } from "@k8slens/tooltip"; import { withInjectables } from "@ogre-tools/injectable-react"; import hotbarStoreInjectable from "../../../common/hotbars/store.injectable"; import type { HotbarStore } from "../../../common/hotbars/store"; diff --git a/packages/core/src/renderer/components/line-progress/line-progress.tsx b/packages/core/src/renderer/components/line-progress/line-progress.tsx index 24ef169176..fca3aade39 100644 --- a/packages/core/src/renderer/components/line-progress/line-progress.tsx +++ b/packages/core/src/renderer/components/line-progress/line-progress.tsx @@ -6,7 +6,7 @@ import "./line-progress.scss"; import React from "react"; import { cssNames } from "../../utils"; -import { withTooltip } from "../tooltip"; +import { withTooltip } from "@k8slens/tooltip"; export interface LineProgressProps extends React.HTMLProps { value: number; diff --git a/packages/core/src/renderer/components/menu/menu-actions.tsx b/packages/core/src/renderer/components/menu/menu-actions.tsx index 0e77446caf..13d5762758 100644 --- a/packages/core/src/renderer/components/menu/menu-actions.tsx +++ b/packages/core/src/renderer/components/menu/menu-actions.tsx @@ -14,7 +14,7 @@ import { Icon } from "../icon"; import type { MenuProps } from "./menu"; import { Menu, MenuItem } from "./menu"; import isString from "lodash/isString"; -import type { TooltipDecoratorProps } from "../tooltip"; +import type { TooltipDecoratorProps } from "@k8slens/tooltip"; import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import openConfirmDialogInjectable from "../confirm-dialog/open.injectable"; diff --git a/packages/core/src/renderer/components/status-brick/status-brick.tsx b/packages/core/src/renderer/components/status-brick/status-brick.tsx index a9cc89fed2..2a6b34a61a 100644 --- a/packages/core/src/renderer/components/status-brick/status-brick.tsx +++ b/packages/core/src/renderer/components/status-brick/status-brick.tsx @@ -7,7 +7,7 @@ import "./status-brick.scss"; import React from "react"; import { cssNames } from "../../utils"; -import { withTooltip } from "../tooltip"; +import { withTooltip } from "@k8slens/tooltip"; export interface StatusBrickProps extends React.HTMLAttributes { } diff --git a/packages/infrastructure/webpack/coverage/lcov-report/base.css b/packages/infrastructure/webpack/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/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/packages/infrastructure/webpack/coverage/lcov-report/block-navigation.js b/packages/infrastructure/webpack/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/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/packages/infrastructure/webpack/coverage/lcov-report/favicon.png b/packages/infrastructure/webpack/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/infrastructure/webpack/coverage/lcov-report/favicon.png differ diff --git a/packages/infrastructure/webpack/coverage/lcov-report/index.html b/packages/infrastructure/webpack/coverage/lcov-report/index.html new file mode 100644 index 0000000000..7d6671a5a0 --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/index.html @@ -0,0 +1,101 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/infrastructure/webpack/coverage/lcov-report/prettify.css b/packages/infrastructure/webpack/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/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/packages/infrastructure/webpack/coverage/lcov-report/prettify.js b/packages/infrastructure/webpack/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/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/packages/infrastructure/webpack/coverage/lcov-report/sort-arrow-sprite.png b/packages/infrastructure/webpack/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/infrastructure/webpack/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/infrastructure/webpack/coverage/lcov-report/sorter.js b/packages/infrastructure/webpack/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/infrastructure/webpack/coverage/lcov-report/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/packages/infrastructure/webpack/coverage/lcov.info b/packages/infrastructure/webpack/coverage/lcov.info new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/legacy-extension-example/dist/main.js b/packages/legacy-extension-example/dist/main.js new file mode 100644 index 0000000000..aa1ac2c19b --- /dev/null +++ b/packages/legacy-extension-example/dist/main.js @@ -0,0 +1,46 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +const noMainExtension = null; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (noMainExtension); + +module.exports = __webpack_exports__; +/******/ })() +; \ No newline at end of file diff --git a/packages/legacy-extension-example/dist/renderer.js b/packages/legacy-extension-example/dist/renderer.js new file mode 100644 index 0000000000..896469c61b --- /dev/null +++ b/packages/legacy-extension-example/dist/renderer.js @@ -0,0 +1,60 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": () => (/* binding */ ExampleLensExtension) +}); + +;// CONCATENATED MODULE: external "global.LensExtensions" +const external_global_LensExtensions_namespaceObject = global.LensExtensions; +;// CONCATENATED MODULE: ./renderer.tsx + +class ExampleLensExtension extends external_global_LensExtensions_namespaceObject.Renderer.LensExtension { + onActivate() { + external_global_LensExtensions_namespaceObject.Common.logger.info("Activating bundled extension example"); + } + onDeactivate() { + external_global_LensExtensions_namespaceObject.Common.logger.info("Deactivating bundled extension example"); + } +} + +module.exports = __webpack_exports__; +/******/ })() +; \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/base.css b/packages/technical-features/application/agnostic/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/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/packages/technical-features/application/agnostic/coverage/lcov-report/block-navigation.js b/packages/technical-features/application/agnostic/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/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/packages/technical-features/application/agnostic/coverage/lcov-report/favicon.png b/packages/technical-features/application/agnostic/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/application/agnostic/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/index.html b/packages/technical-features/application/agnostic/coverage/lcov-report/index.html new file mode 100644 index 0000000000..bb8171295d --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 61/61 +
+ + +
+ 100% + Branches + 8/8 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 61/61 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%15/15100%3/3100%3/3100%15/15
src/start-application +
+
100%46/46100%5/5100%1/1100%46/46
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/prettify.css b/packages/technical-features/application/agnostic/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/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/packages/technical-features/application/agnostic/coverage/lcov-report/prettify.js b/packages/technical-features/application/agnostic/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/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/packages/technical-features/application/agnostic/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/application/agnostic/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/application/agnostic/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/sorter.js b/packages/technical-features/application/agnostic/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/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/packages/technical-features/application/agnostic/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/application/agnostic/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..e0354a452c --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

+
+ +
+ 100% + Statements + 15/15 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 15/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 +161x +1x +1x +1x +1x +1x +1x +5x +5x +5x +5x +5x +5x +5x +1x + 
import { getFeature } from "@k8slens/feature-core";
+import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+ 
+export const applicationFeature = getFeature({
+  id: "application",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/src/index.html b/packages/technical-features/application/agnostic/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..17f3eb2f8a --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/src/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 100% + Statements + 15/15 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 15/15 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%15/15100%3/3100%3/3100%15/15
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/index.html b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/index.html new file mode 100644 index 0000000000..c77536e48b --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/start-application + + + + + + + + + +
+
+

All files src/start-application

+
+ +
+ 100% + Statements + 46/46 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 46/46 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
start-application.injectable.ts +
+
100%32/32100%5/5100%1/1100%32/32
time-slots.ts +
+
100%14/14100%0/0100%0/0100%14/14
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/start-application.injectable.ts.html b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/start-application.injectable.ts.html new file mode 100644 index 0000000000..29bd4e9011 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/start-application.injectable.ts.html @@ -0,0 +1,181 @@ + + + + + + Code coverage report for src/start-application/start-application.injectable.ts + + + + + + + + + +
+
+

All files / src/start-application start-application.injectable.ts

+
+ +
+ 100% + Statements + 32/32 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 32/32 +
+ + +
+

+ 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 +331x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +5x +5x +5x +5x +5x +5x +5x +5x +5x +4x +3x +1x +5x +1x +1x +1x +1x +1x + 
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+import { runManyFor } from "@k8slens/run-many";
+import * as timeSlots from "./time-slots";
+ 
+export type StartApplication = () => Promise<void>;
+ 
+export const startApplicationInjectionToken = getInjectionToken<StartApplication>({
+  id: "start-application-injection-token",
+});
+ 
+const startApplicationInjectable = getInjectable({
+  id: "start-application",
+ 
+  instantiate: (di): StartApplication => {
+    const runManyAsync = runManyFor(di);
+    const beforeApplicationIsLoading = runManyAsync(
+      timeSlots.beforeApplicationIsLoadingInjectionToken,
+    );
+    const onLoadOfApplication = runManyAsync(timeSlots.onLoadOfApplicationInjectionToken);
+    const afterApplicationIsLoaded = runManyAsync(timeSlots.afterApplicationIsLoadedInjectionToken);
+ 
+    return async () => {
+      await beforeApplicationIsLoading();
+      await onLoadOfApplication();
+      await afterApplicationIsLoaded();
+    };
+  },
+ 
+  injectionToken: startApplicationInjectionToken,
+});
+ 
+export default startApplicationInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/time-slots.ts.html b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/time-slots.ts.html new file mode 100644 index 0000000000..05fb7a8d99 --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov-report/src/start-application/time-slots.ts.html @@ -0,0 +1,127 @@ + + + + + + Code coverage report for src/start-application/time-slots.ts + + + + + + + + + +
+
+

All files / src/start-application time-slots.ts

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

+ 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 +151x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type { Runnable } from "@k8slens/run-many";
+ 
+export const beforeApplicationIsLoadingInjectionToken = getInjectionToken<Runnable>({
+  id: "before-application-is-loading-injection-token",
+});
+ 
+export const onLoadOfApplicationInjectionToken = getInjectionToken<Runnable>({
+  id: "on-load-of-application",
+});
+ 
+export const afterApplicationIsLoadedInjectionToken = getInjectionToken<Runnable>({
+  id: "after-application-is-loaded-injection-token",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/coverage/lcov.info b/packages/technical-features/application/agnostic/coverage/lcov.info new file mode 100644 index 0000000000..e1260a5b2f --- /dev/null +++ b/packages/technical-features/application/agnostic/coverage/lcov.info @@ -0,0 +1,104 @@ +TN: +SF:src/feature.ts +FN:4,get +FN:7,register +FN:12,getRequireContexts +FNF:3 +FNH:3 +FNDA:5,get +FNDA:5,register +FNDA:5,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,5 +DA:9,5 +DA:10,5 +DA:11,5 +DA:12,5 +DA:13,5 +DA:14,5 +DA:15,1 +LF:15 +LH:15 +BRDA:4,0,0,5 +BRDA:7,1,0,5 +BRDA:12,2,0,5 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/start-application/start-application.injectable.ts +FN:14,instantiate +FNF:1 +FNH:1 +FNDA:5,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,5 +DA:16,5 +DA:17,5 +DA:18,5 +DA:19,5 +DA:20,5 +DA:21,5 +DA:22,5 +DA:23,5 +DA:24,4 +DA:25,3 +DA:26,1 +DA:27,5 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +LF:32 +LH:32 +BRDA:14,0,0,5 +BRDA:22,1,0,5 +BRDA:23,2,0,4 +BRDA:24,3,0,3 +BRDA:25,4,0,1 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/start-application/time-slots.ts +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +LF:14 +LH:14 +BRF:0 +BRH:0 +end_of_record diff --git a/packages/technical-features/application/agnostic/dist/index.d.ts b/packages/technical-features/application/agnostic/dist/index.d.ts new file mode 100644 index 0000000000..edffd1f0fb --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/index.d.ts @@ -0,0 +1,6 @@ +export { applicationFeature } from "./src/feature"; +export * from "./src/start-application/time-slots"; +export type { StartApplication } from "./src/start-application/start-application.injectable"; +export { startApplicationInjectionToken } from "./src/start-application/start-application.injectable"; +export { applicationInformationToken } from "./src/application-information-token.no-coverage"; +export type { ApplicationInformation } from "./src/application-information-token.no-coverage"; diff --git a/packages/technical-features/application/agnostic/dist/index.js b/packages/technical-features/application/agnostic/dist/index.js new file mode 100644 index 0000000000..ba958dfbd9 --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={828:(e,t,n)=>{"use strict";n.d(t,{$:()=>r});const o=require("@k8slens/feature-core"),i=require("@ogre-tools/injectable-extension-for-auto-registration");e=n.hmd(e);const r=(0,o.getFeature)({id:"application",register:t=>{(0,i.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[n(888)]})}})},30:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c,startApplicationInjectionToken:()=>a});var o=n(905);const i=require("@k8slens/run-many");var r=n(560);const a=(0,o.getInjectionToken)({id:"start-application-injection-token"}),c=(0,o.getInjectable)({id:"start-application",instantiate:e=>{const t=(0,i.runManyFor)(e),n=t(r.lq),o=t(r.nj),a=t(r.E$);return async()=>{await n(),await o(),await a()}},injectionToken:a})},560:(e,t,n)=>{"use strict";n.d(t,{E$:()=>a,lq:()=>i,nj:()=>r});var o=n(905);const i=(0,o.getInjectionToken)({id:"before-application-is-loading-injection-token"}),r=(0,o.getInjectionToken)({id:"on-load-of-application"}),a=(0,o.getInjectionToken)({id:"after-application-is-loaded-injection-token"})},888:(e,t,n)=>{var o={"./start-application/start-application.injectable.ts":30};function i(e){var t=r(e);return n(t)}function r(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}i.keys=function(){return Object.keys(o)},i.resolve=r,e.exports=i,i.id=888},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var r=t[o]={id:o,loaded:!1,exports:{}};return e[o](r,r.exports,n),r.loaded=!0,r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{"use strict";n.r(o),n.d(o,{afterApplicationIsLoadedInjectionToken:()=>t.E$,applicationFeature:()=>e.$,applicationInformationToken:()=>r,beforeApplicationIsLoadingInjectionToken:()=>t.lq,onLoadOfApplicationInjectionToken:()=>t.nj,startApplicationInjectionToken:()=>i.startApplicationInjectionToken});var e=n(828),t=n(560),i=n(30);const r=(0,n(905).getInjectionToken)({id:"application-information-token"})})(),module.exports=o})(); \ No newline at end of file diff --git a/packages/technical-features/application/agnostic/dist/src/application-information-token.no-coverage.d.ts b/packages/technical-features/application/agnostic/dist/src/application-information-token.no-coverage.d.ts new file mode 100644 index 0000000000..7e7288703a --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/src/application-information-token.no-coverage.d.ts @@ -0,0 +1,16 @@ +export type ApplicationInformation = { + name: string; + version: string; + productName: string; + copyright: string; + description: string; + k8sProxyVersion: string; + bundledKubectlVersion: string; + bundledHelmVersion: string; + sentryDsn: string; + contentSecurityPolicy: string; + welcomeRoute: string; + updatingIsEnabled: boolean; + dependencies: Partial>; +}; +export declare const applicationInformationToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/application/agnostic/dist/src/feature.d.ts b/packages/technical-features/application/agnostic/dist/src/feature.d.ts new file mode 100644 index 0000000000..84a83e9d3f --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const applicationFeature: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/application/agnostic/dist/src/start-application/start-application.injectable.d.ts b/packages/technical-features/application/agnostic/dist/src/start-application/start-application.injectable.d.ts new file mode 100644 index 0000000000..f21b635375 --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/src/start-application/start-application.injectable.d.ts @@ -0,0 +1,4 @@ +export type StartApplication = () => Promise; +export declare const startApplicationInjectionToken: import("@ogre-tools/injectable").InjectionToken; +declare const startApplicationInjectable: import("@ogre-tools/injectable").Injectable; +export default startApplicationInjectable; diff --git a/packages/technical-features/application/agnostic/dist/src/start-application/time-slots.d.ts b/packages/technical-features/application/agnostic/dist/src/start-application/time-slots.d.ts new file mode 100644 index 0000000000..6d1b527fbc --- /dev/null +++ b/packages/technical-features/application/agnostic/dist/src/start-application/time-slots.d.ts @@ -0,0 +1,4 @@ +import type { Runnable } from "@k8slens/run-many"; +export declare const beforeApplicationIsLoadingInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; +export declare const onLoadOfApplicationInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; +export declare const afterApplicationIsLoadedInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/base.css b/packages/technical-features/application/electron-main/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/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/packages/technical-features/application/electron-main/coverage/lcov-report/block-navigation.js b/packages/technical-features/application/electron-main/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/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/packages/technical-features/application/electron-main/coverage/lcov-report/favicon.png b/packages/technical-features/application/electron-main/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/application/electron-main/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/index.html b/packages/technical-features/application/electron-main/coverage/lcov-report/index.html new file mode 100644 index 0000000000..6316f89ff7 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 107/107 +
+ + +
+ 100% + Branches + 14/14 +
+ + +
+ 100% + Functions + 10/10 +
+ + +
+ 100% + Lines + 107/107 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%18/18100%3/3100%3/3100%18/18
src/electron +
+
100%14/14100%2/2100%2/2100%14/14
src/start-application +
+
100%75/75100%9/9100%5/5100%75/75
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/prettify.css b/packages/technical-features/application/electron-main/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/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/packages/technical-features/application/electron-main/coverage/lcov-report/prettify.js b/packages/technical-features/application/electron-main/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/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/packages/technical-features/application/electron-main/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/application/electron-main/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/application/electron-main/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/sorter.js b/packages/technical-features/application/electron-main/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/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/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/electron-app.injectable.ts.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/electron-app.injectable.ts.html new file mode 100644 index 0000000000..ea967725e5 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/electron-app.injectable.ts.html @@ -0,0 +1,127 @@ + + + + + + Code coverage report for src/electron/electron-app.injectable.ts + + + + + + + + + +
+
+

All files / src/electron electron-app.injectable.ts

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

+ 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 +151x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import { getInjectable } from "@ogre-tools/injectable";
+import { app } from "electron";
+ 
+const electronAppInjectable = getInjectable({
+  id: "electron-app",
+  instantiate: () => app,
+  causesSideEffects: true,
+});
+ 
+export default electronAppInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/index.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/index.html new file mode 100644 index 0000000000..ea0cf6c4a4 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/electron/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/electron + + + + + + + + + +
+
+

All files src/electron

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
electron-app.injectable.ts +
+
100%14/14100%2/2100%2/2100%14/14
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..08f2bbf187 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +8x +8x +8x +8x +8x +8x +8x +1x +1x +1x + 
import { getFeature } from "@k8slens/feature-core";
+import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { applicationFeature } from "@k8slens/application";
+ 
+export const applicationFeatureForElectronMain = getFeature({
+  id: "application-for-electron-main",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+ 
+  dependencies: [applicationFeature],
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/index.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..e7f115563d --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/index.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/index.html new file mode 100644 index 0000000000..ca88dc0bc1 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for src/start-application + + + + + + + + + +
+
+

All files src/start-application

+
+ +
+ 100% + Statements + 75/75 +
+ + +
+ 100% + Branches + 9/9 +
+ + +
+ 100% + Functions + 5/5 +
+ + +
+ 100% + Lines + 75/75 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
start-electron-application.injectable.ts +
+
100%49/49100%6/6100%3/3100%49/49
time-slots.ts +
+
100%10/10100%0/0100%0/0100%10/10
when-app-is-ready.injectable.ts +
+
100%16/16100%3/3100%2/2100%16/16
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/start-electron-application.injectable.ts.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/start-electron-application.injectable.ts.html new file mode 100644 index 0000000000..2f4e87ff70 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/start-electron-application.injectable.ts.html @@ -0,0 +1,232 @@ + + + + + + Code coverage report for src/start-application/start-electron-application.injectable.ts + + + + + + + + + +
+
+

All files / src/start-application start-electron-application.injectable.ts

+
+ +
+ 100% + Statements + 49/49 +
+ + +
+ 100% + Branches + 6/6 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 49/49 +
+ + +
+

+ 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 +501x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +5x +5x +5x +5x +5x +5x +5x +5x +5x +5x +5x +5x +1x +1x +1x +5x +5x +1x +1x +1x +1x +1x +8x +8x +8x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import {
+  DiContainer,
+  getInjectable,
+  instantiationDecoratorToken,
+  lifecycleEnum,
+} from "@ogre-tools/injectable";
+import { startApplicationInjectionToken } from "@k8slens/application";
+import whenAppIsReadyInjectable from "./when-app-is-ready.injectable";
+import { beforeAnythingInjectionToken, beforeElectronIsReadyInjectionToken } from "./time-slots";
+import { runManySyncFor } from "@k8slens/run-many";
+import { curry } from "lodash";
+ 
+type ToBeDecorated = (di: DiContainer, ...args: unknown[]) => (...args: unknown[]) => unknown;
+ 
+const decorator = (toBeDecorated: unknown, di: DiContainer, ...args: unknown[]) => {
+  const whenAppIsReady = di.inject(whenAppIsReadyInjectable);
+  const runManySync = runManySyncFor(di);
+  const beforeAnything = runManySync(beforeAnythingInjectionToken);
+  const beforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
+  const startApplication = (toBeDecorated as ToBeDecorated)(di, ...args);
+ 
+  return (...startApplicationArgs: unknown[]) => {
+    beforeAnything();
+    beforeElectronIsReady();
+ 
+    return (async () => {
+      await whenAppIsReady();
+ 
+      return startApplication(...startApplicationArgs);
+    })();
+  };
+};
+ 
+const startElectronApplicationInjectable = getInjectable({
+  id: "start-electron-application",
+ 
+  instantiate: () => ({
+    decorate: curry(decorator),
+    target: startApplicationInjectionToken,
+  }),
+ 
+  decorable: false,
+ 
+  injectionToken: instantiationDecoratorToken,
+ 
+  lifecycle: lifecycleEnum.singleton,
+});
+ 
+export default startElectronApplicationInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/time-slots.ts.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/time-slots.ts.html new file mode 100644 index 0000000000..6efadb44a5 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/time-slots.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/start-application/time-slots.ts + + + + + + + + + +
+
+

All files / src/start-application time-slots.ts

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type { RunnableSync } from "@k8slens/run-many";
+ 
+export const beforeAnythingInjectionToken = getInjectionToken<RunnableSync>({
+  id: "before-anything",
+});
+ 
+export const beforeElectronIsReadyInjectionToken = getInjectionToken<RunnableSync>({
+  id: "before-electron-is-ready-injection-token",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/when-app-is-ready.injectable.ts.html b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/when-app-is-ready.injectable.ts.html new file mode 100644 index 0000000000..210dc3d4a2 --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov-report/src/start-application/when-app-is-ready.injectable.ts.html @@ -0,0 +1,133 @@ + + + + + + Code coverage report for src/start-application/when-app-is-ready.injectable.ts + + + + + + + + + +
+
+

All files / src/start-application when-app-is-ready.injectable.ts

+
+ +
+ 100% + Statements + 16/16 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 16/16 +
+ + +
+

+ 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 +171x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import electronAppInjectable from "../electron/electron-app.injectable";
+ 
+const whenAppIsReadyInjectable = getInjectable({
+  id: "when-app-is-ready",
+ 
+  instantiate: (di) => {
+    const electronApp = di.inject(electronAppInjectable);
+ 
+    return () => electronApp.whenReady();
+  },
+ 
+  decorable: false,
+});
+ 
+export default whenAppIsReadyInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/coverage/lcov.info b/packages/technical-features/application/electron-main/coverage/lcov.info new file mode 100644 index 0000000000..03e67223ea --- /dev/null +++ b/packages/technical-features/application/electron-main/coverage/lcov.info @@ -0,0 +1,186 @@ +TN: +SF:src/feature.ts +FN:5,get +FN:8,register +FN:13,getRequireContexts +FNF:3 +FNH:3 +FNDA:8,get +FNDA:8,register +FNDA:8,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,8 +DA:10,8 +DA:11,8 +DA:12,8 +DA:13,8 +DA:14,8 +DA:15,8 +DA:16,1 +DA:17,1 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,8 +BRDA:8,1,0,8 +BRDA:13,2,0,8 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/electron/electron-app.injectable.ts +FN:14,get +FN:10,instantiate +FNF:2 +FNH:2 +FNDA:21,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +LF:14 +LH:14 +BRDA:14,0,0,21 +BRDA:10,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/start-application/start-electron-application.injectable.ts +FN:49,get +FN:15,decorator +FN:37,instantiate +FNF:3 +FNH:3 +FNDA:8,get +FNDA:5,decorator +FNDA:8,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,5 +DA:17,5 +DA:18,5 +DA:19,5 +DA:20,5 +DA:21,5 +DA:22,5 +DA:23,5 +DA:24,5 +DA:25,5 +DA:26,5 +DA:27,5 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,5 +DA:32,5 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,8 +DA:39,8 +DA:40,8 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:49,1 +LF:49 +LH:49 +BRDA:49,0,0,8 +BRDA:15,1,0,5 +BRDA:22,2,0,5 +BRDA:26,3,0,5 +BRDA:27,4,0,1 +BRDA:37,5,0,8 +BRF:6 +BRH:6 +end_of_record +TN: +SF:src/start-application/time-slots.ts +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/start-application/when-app-is-ready.injectable.ts +FN:16,get +FN:7,instantiate +FNF:2 +FNH:2 +FNDA:20,get +FNDA:2,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,2 +DA:9,2 +DA:10,2 +DA:11,2 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +LF:16 +LH:16 +BRDA:16,0,0,20 +BRDA:7,1,0,2 +BRDA:10,2,0,2 +BRF:3 +BRH:3 +end_of_record diff --git a/packages/technical-features/application/electron-main/dist/index.d.ts b/packages/technical-features/application/electron-main/dist/index.d.ts new file mode 100644 index 0000000000..34d74230d3 --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/index.d.ts @@ -0,0 +1,5 @@ +export * from "./src/start-application/time-slots"; +export { applicationFeatureForElectronMain } from "./src/feature"; +export declare const testUtils: { + overrideSideEffectsWithFakes: (di: import("@ogre-tools/injectable").DiContainer) => void; +}; diff --git a/packages/technical-features/application/electron-main/dist/index.js b/packages/technical-features/application/electron-main/dist/index.js new file mode 100644 index 0000000000..ecba4a6494 --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={984:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(905);const o=require("electron"),i=(0,n.getInjectable)({id:"electron-app",instantiate:()=>o.app,causesSideEffects:!0})},828:(e,t,r)=>{"use strict";r.d(t,{G:()=>a});const n=require("@k8slens/feature-core"),o=require("@ogre-tools/injectable-extension-for-auto-registration");var i=r(290);e=r.hmd(e);const a=(0,n.getFeature)({id:"application-for-electron-main",register:t=>{(0,o.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[r(888)]})},dependencies:[i.applicationFeature]})},382:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var n=r(905),o=r(290),i=r(917),a=r(560);const s=require("@k8slens/run-many"),c=require("lodash"),l=(e,t,...r)=>{const n=t.inject(i.default),o=(0,s.runManySyncFor)(t),c=o(a.t),l=o(a.U),d=e(t,...r);return(...e)=>(c(),l(),(async()=>(await n(),d(...e)))())},d=(0,n.getInjectable)({id:"start-electron-application",instantiate:()=>({decorate:(0,c.curry)(l),target:o.startApplicationInjectionToken}),decorable:!1,injectionToken:n.instantiationDecoratorToken,lifecycle:n.lifecycleEnum.singleton})},560:(e,t,r)=>{"use strict";r.d(t,{U:()=>i,t:()=>o});var n=r(905);const o=(0,n.getInjectionToken)({id:"before-anything"}),i=(0,n.getInjectionToken)({id:"before-electron-is-ready-injection-token"})},917:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(905),o=r(984);const i=(0,n.getInjectable)({id:"when-app-is-ready",instantiate:e=>{const t=e.inject(o.default);return()=>t.whenReady()},decorable:!1})},888:(e,t,r)=>{var n={"./electron/electron-app.injectable.ts":984,"./start-application/start-electron-application.injectable.ts":382,"./start-application/when-app-is-ready.injectable.ts":917};function o(e){var t=i(e);return r(t)}function i(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=i,e.exports=o,o.id=888},290:e=>{"use strict";e.exports=require("@k8slens/application")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n](i,i.exports,r),i.loaded=!0,i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";r.r(n),r.d(n,{applicationFeatureForElectronMain:()=>o.G,beforeAnythingInjectionToken:()=>t.t,beforeElectronIsReadyInjectionToken:()=>t.U,testUtils:()=>i});var e=r(917),t=r(560),o=r(828);const i={overrideSideEffectsWithFakes:t=>{t.override(e.default,(()=>()=>Promise.resolve()))}}})(),module.exports=n})(); \ No newline at end of file diff --git a/packages/technical-features/application/electron-main/dist/src/electron/electron-app.injectable.d.ts b/packages/technical-features/application/electron-main/dist/src/electron/electron-app.injectable.d.ts new file mode 100644 index 0000000000..9783a0c1f4 --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/src/electron/electron-app.injectable.d.ts @@ -0,0 +1,2 @@ +declare const electronAppInjectable: import("@ogre-tools/injectable").Injectable; +export default electronAppInjectable; diff --git a/packages/technical-features/application/electron-main/dist/src/feature.d.ts b/packages/technical-features/application/electron-main/dist/src/feature.d.ts new file mode 100644 index 0000000000..9f95ebfebf --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const applicationFeatureForElectronMain: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/application/electron-main/dist/src/start-application/time-slots.d.ts b/packages/technical-features/application/electron-main/dist/src/start-application/time-slots.d.ts new file mode 100644 index 0000000000..6347430d2e --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/src/start-application/time-slots.d.ts @@ -0,0 +1,3 @@ +import type { RunnableSync } from "@k8slens/run-many"; +export declare const beforeAnythingInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; +export declare const beforeElectronIsReadyInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; diff --git a/packages/technical-features/application/electron-main/dist/src/start-application/when-app-is-ready.injectable.d.ts b/packages/technical-features/application/electron-main/dist/src/start-application/when-app-is-ready.injectable.d.ts new file mode 100644 index 0000000000..385deaa8db --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/src/start-application/when-app-is-ready.injectable.d.ts @@ -0,0 +1,2 @@ +declare const whenAppIsReadyInjectable: import("@ogre-tools/injectable").Injectable<() => Promise, unknown, void>; +export default whenAppIsReadyInjectable; diff --git a/packages/technical-features/application/electron-main/dist/src/test-utils/override-side-effects-with-fakes.d.ts b/packages/technical-features/application/electron-main/dist/src/test-utils/override-side-effects-with-fakes.d.ts new file mode 100644 index 0000000000..21e62a11ea --- /dev/null +++ b/packages/technical-features/application/electron-main/dist/src/test-utils/override-side-effects-with-fakes.d.ts @@ -0,0 +1,2 @@ +import type { DiContainer } from "@ogre-tools/injectable"; +export declare const overrideSideEffectsWithFakes: (di: DiContainer) => void; diff --git a/packages/technical-features/application/legacy-extensions/dist/index.d.ts b/packages/technical-features/application/legacy-extensions/dist/index.d.ts new file mode 100644 index 0000000000..f50cef0f32 --- /dev/null +++ b/packages/technical-features/application/legacy-extensions/dist/index.d.ts @@ -0,0 +1,2 @@ +export * from "./src/bundled-extension"; +export * from "./src/lens-extension"; diff --git a/packages/technical-features/application/legacy-extensions/dist/index.js b/packages/technical-features/application/legacy-extensions/dist/index.js new file mode 100644 index 0000000000..79cd0eebfd --- /dev/null +++ b/packages/technical-features/application/legacy-extensions/dist/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(o,t)=>{for(var n in t)e.o(t,n)&&!e.o(o,n)&&Object.defineProperty(o,n,{enumerable:!0,get:t[n]})},o:(e,o)=>Object.prototype.hasOwnProperty.call(e,o),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},o={};e.r(o),e.d(o,{bundledExtensionInjectionToken:()=>t});const t=(0,require("@ogre-tools/injectable").getInjectionToken)({id:"bundled-extension-path"});module.exports=o})(); \ No newline at end of file diff --git a/packages/technical-features/application/legacy-extensions/dist/src/bundled-extension.d.ts b/packages/technical-features/application/legacy-extensions/dist/src/bundled-extension.d.ts new file mode 100644 index 0000000000..623a5fcd43 --- /dev/null +++ b/packages/technical-features/application/legacy-extensions/dist/src/bundled-extension.d.ts @@ -0,0 +1,7 @@ +import type { LensExtensionConstructor, LensExtensionManifest } from "./lens-extension"; +export interface BundledExtension { + readonly manifest: LensExtensionManifest; + main: () => LensExtensionConstructor | null; + renderer: () => LensExtensionConstructor | null; +} +export declare const bundledExtensionInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/application/legacy-extensions/dist/src/lens-extension.d.ts b/packages/technical-features/application/legacy-extensions/dist/src/lens-extension.d.ts new file mode 100644 index 0000000000..a389848354 --- /dev/null +++ b/packages/technical-features/application/legacy-extensions/dist/src/lens-extension.d.ts @@ -0,0 +1,50 @@ +export type LensExtensionId = string; +export type LensExtensionConstructor = new (ext: InstalledExtension) => LegacyLensExtension; +export interface InstalledExtension { + id: LensExtensionId; + readonly manifest: LensExtensionManifest; + readonly absolutePath: string; + /** + * Absolute to the symlinked package.json file + */ + readonly manifestPath: string; + readonly isBundled: boolean; + readonly isCompatible: boolean; + isEnabled: boolean; +} +export interface LegacyLensExtension { + readonly id: LensExtensionId; + readonly manifest: LensExtensionManifest; + readonly manifestPath: string; + readonly isBundled: boolean; + readonly sanitizedExtensionId: string; + readonly name: string; + readonly version: string; + readonly description: string | undefined; + readonly storeName: string; + getExtensionFileFolder(): Promise; + enable(): Promise; + disable(): Promise; + activate(): Promise; +} +export interface LensExtensionManifest { + name: string; + version: string; + description?: string; + main?: string; + renderer?: string; + /** + * Supported Lens version engine by extension could be defined in `manifest.engines.lens` + * Only MAJOR.MINOR version is taken in consideration. + */ + engines: { + lens: string; + npm?: string; + node?: string; + }; + /** + * Specify extension name used for persisting data. + * Useful if extension is renamed but the data should not be lost. + */ + storeName?: string; +} diff --git a/packages/technical-features/feature-core/coverage/lcov-report/base.css b/packages/technical-features/feature-core/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/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/packages/technical-features/feature-core/coverage/lcov-report/block-navigation.js b/packages/technical-features/feature-core/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/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/packages/technical-features/feature-core/coverage/lcov-report/deregister-feature.ts.html b/packages/technical-features/feature-core/coverage/lcov-report/deregister-feature.ts.html new file mode 100644 index 0000000000..2bc90a437f --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/deregister-feature.ts.html @@ -0,0 +1,304 @@ + + + + + + Code coverage report for deregister-feature.ts + + + + + + + + + +
+
+

All files deregister-feature.ts

+
+ +
+ 100% + Statements + 73/73 +
+ + +
+ 100% + Branches + 26/26 +
+ + +
+ 100% + Functions + 5/5 +
+ + +
+ 100% + Lines + 73/73 +
+ + +
+

+ 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 +741x +1x +1x +1x +1x +40x +40x +40x +77x +77x +77x +30x +37x +30x +30x +47x +77x +77x +40x +40x +40x +1x +1x +42x +42x +42x +42x +42x +2x +2x +40x +40x +40x +40x +40x +40x +40x +42x +4x +4x +4x +4x +4x +4x +36x +42x +19x +19x +19x +19x +19x +19x +19x +14x +14x +19x +36x +41x +23x +23x +23x +23x +36x +42x +19x +19x +42x +1x +1x +19x +23x +23x +19x + 
import type { DiContainer } from "@ogre-tools/injectable";
+import type { Feature } from "./feature";
+import { featureContextMapInjectable } from "./feature-context-map-injectable";
+ 
+const getDependingFeaturesFor = (
+  featureContextMap: Map<Feature, { dependedBy: Map<Feature, number> }>,
+) => {
+  const getDependingFeaturesForRecursion = (feature: Feature, atRoot = true): string[] => {
+    const context = featureContextMap.get(feature);
+ 
+    if (context?.dependedBy.size) {
+      return [...context?.dependedBy.entries()].flatMap(([dependant]) =>
+        getDependingFeaturesForRecursion(dependant, false),
+      );
+    }
+ 
+    return atRoot ? [] : [feature.id];
+  };
+ 
+  return getDependingFeaturesForRecursion;
+};
+ 
+const deregisterFeatureRecursed = (di: DiContainer, feature: Feature, dependedBy?: Feature) => {
+  const featureContextMap = di.inject(featureContextMapInjectable);
+ 
+  const featureContext = featureContextMap.get(feature);
+ 
+  if (!featureContext) {
+    throw new Error(`Tried to deregister feature "${feature.id}", but it was not registered.`);
+  }
+ 
+  featureContext.numberOfRegistrations--;
+ 
+  const getDependingFeatures = getDependingFeaturesFor(featureContextMap);
+ 
+  const dependingFeatures = getDependingFeatures(feature);
+ 
+  if (!dependedBy && dependingFeatures.length) {
+    throw new Error(
+      `Tried to deregister Feature "${
+        feature.id
+      }", but it is the dependency of Features "${dependingFeatures.join(", ")}"`,
+    );
+  }
+ 
+  if (dependedBy) {
+    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+    const oldNumberOfDependents = featureContext.dependedBy.get(dependedBy)!;
+    const newNumberOfDependants = oldNumberOfDependents - 1;
+ 
+    featureContext.dependedBy.set(dependedBy, newNumberOfDependants);
+ 
+    if (newNumberOfDependants === 0) {
+      featureContext.dependedBy.delete(dependedBy);
+    }
+  }
+ 
+  if (featureContext.numberOfRegistrations === 0) {
+    featureContextMap.delete(feature);
+ 
+    featureContext.deregister();
+  }
+ 
+  feature.dependencies?.forEach((dependency) => {
+    deregisterFeatureRecursed(di, dependency, feature);
+  });
+};
+ 
+export const deregisterFeature = (di: DiContainer, ...features: Feature[]) => {
+  features.forEach((feature) => {
+    deregisterFeatureRecursed(di, feature);
+  });
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/feature-core/coverage/lcov-report/favicon.png b/packages/technical-features/feature-core/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/feature-core/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/feature-core/coverage/lcov-report/feature-context-map-injectable.ts.html b/packages/technical-features/feature-core/coverage/lcov-report/feature-context-map-injectable.ts.html new file mode 100644 index 0000000000..fccf8bfcb8 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/feature-context-map-injectable.ts.html @@ -0,0 +1,163 @@ + + + + + + Code coverage report for feature-context-map-injectable.ts + + + + + + + + + +
+
+

All files feature-context-map-injectable.ts

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

+ 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 +271x +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 { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+import type { Feature } from "./feature";
+ 
+export type FeatureContextMap = Map<
+  Feature,
+  {
+    register: () => void;
+    deregister: () => void;
+    dependedBy: Map<Feature, number>;
+    numberOfRegistrations: number;
+  }
+>;
+ 
+export const featureContextMapInjectionToken = getInjectionToken<FeatureContextMap>({
+  id: "feature-context-map-injection-token",
+});
+ 
+const featureContextMapInjectable = getInjectable({
+  id: "feature-store",
+ 
+  instantiate: (): FeatureContextMap => new Map(),
+ 
+  injectionToken: featureContextMapInjectionToken,
+});
+ 
+export { featureContextMapInjectable };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/feature-core/coverage/lcov-report/feature.ts.html b/packages/technical-features/feature-core/coverage/lcov-report/feature.ts.html new file mode 100644 index 0000000000..3c7cfb0e21 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/feature.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for feature.ts + + + + + + + + + +
+
+

All files feature.ts

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 11/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 +121x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import type { DiContainerForInjection } from "@ogre-tools/injectable";
+ 
+export interface Feature {
+  id: string;
+  register: (di: DiContainerForInjection) => void;
+  dependencies?: Feature[];
+}
+ 
+export interface GetFeatureArgs extends Feature {}
+ 
+export const getFeature = (getFeatureArgs: GetFeatureArgs): Feature => getFeatureArgs;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/feature-core/coverage/lcov-report/index.html b/packages/technical-features/feature-core/coverage/lcov-report/index.html new file mode 100644 index 0000000000..402a5aee37 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 190/190 +
+ + +
+ 100% + Branches + 49/49 +
+ + +
+ 100% + Functions + 15/15 +
+ + +
+ 100% + Lines + 190/190 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
deregister-feature.ts +
+
100%73/73100%26/26100%5/5100%73/73
feature-context-map-injectable.ts +
+
100%26/26100%1/1100%1/1100%26/26
feature.ts +
+
100%11/11100%2/2100%2/2100%11/11
register-feature.ts +
+
100%80/80100%20/20100%7/7100%80/80
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/feature-core/coverage/lcov-report/prettify.css b/packages/technical-features/feature-core/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/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/packages/technical-features/feature-core/coverage/lcov-report/prettify.js b/packages/technical-features/feature-core/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/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/packages/technical-features/feature-core/coverage/lcov-report/register-feature.ts.html b/packages/technical-features/feature-core/coverage/lcov-report/register-feature.ts.html new file mode 100644 index 0000000000..7f7c6088ef --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/register-feature.ts.html @@ -0,0 +1,325 @@ + + + + + + Code coverage report for register-feature.ts + + + + + + + + + +
+
+

All files register-feature.ts

+
+ +
+ 100% + Statements + 80/80 +
+ + +
+ 100% + Branches + 20/20 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 80/80 +
+ + +
+

+ 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 +811x +1x +1x +1x +1x +1x +1x +1x +1x +58x +58x +58x +58x +58x +58x +58x +58x +58x +23x +23x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +58x +1x +1x +79x +79x +79x +21x +21x +79x +79x +79x +79x +79x +79x +1x +1x +78x +78x +79x +79x +79x +79x +34x +34x +34x +34x +34x +34x +78x +78x +58x +58x +78x +79x +34x +34x +79x +1x +1x +31x +45x +45x +31x + 
import type { DiContainer } from "@ogre-tools/injectable";
+import { getInjectable } from "@ogre-tools/injectable";
+import type { Feature } from "./feature";
+import {
+  featureContextMapInjectable,
+  featureContextMapInjectionToken,
+} from "./feature-context-map-injectable";
+ 
+const createFeatureContext = (feature: Feature, di: DiContainer) => {
+  const featureContextInjectable = getInjectable({
+    id: feature.id,
+ 
+    instantiate: (diForContextOfFeature) => ({
+      register: () => {
+        feature.register(diForContextOfFeature);
+      },
+ 
+      deregister: () => {
+        diForContextOfFeature.deregister(featureContextInjectable);
+      },
+ 
+      dependedBy: new Map<Feature, number>(),
+ 
+      numberOfRegistrations: 0,
+    }),
+ 
+    scope: true,
+  });
+ 
+  di.register(featureContextInjectable);
+ 
+  const featureContextMap = di.inject(featureContextMapInjectable);
+  const featureContext = di.inject(featureContextInjectable);
+ 
+  featureContextMap.set(feature, featureContext);
+ 
+  return featureContext;
+};
+ 
+const registerFeatureRecursed = (di: DiContainer, feature: Feature, dependedBy?: Feature) => {
+  const featureContextMaps = di.injectMany(featureContextMapInjectionToken);
+ 
+  if (featureContextMaps.length === 0) {
+    di.register(featureContextMapInjectable);
+  }
+ 
+  const featureContextMap = di.inject(featureContextMapInjectable);
+ 
+  const existingFeatureContext = featureContextMap.get(feature);
+ 
+  if (!dependedBy && existingFeatureContext && existingFeatureContext.dependedBy.size === 0) {
+    throw new Error(`Tried to register feature "${feature.id}", but it was already registered.`);
+  }
+ 
+  const featureContext = existingFeatureContext || createFeatureContext(feature, di);
+ 
+  featureContext.numberOfRegistrations++;
+ 
+  if (dependedBy) {
+    const oldNumberOfDependents = featureContext.dependedBy.get(dependedBy) || 0;
+ 
+    const newNumberOfDependants = oldNumberOfDependents + 1;
+ 
+    featureContext.dependedBy.set(dependedBy, newNumberOfDependants);
+  }
+ 
+  if (!existingFeatureContext) {
+    featureContext.register();
+  }
+ 
+  feature.dependencies?.forEach((dependency) => {
+    registerFeatureRecursed(di, dependency, feature);
+  });
+};
+ 
+export const registerFeature = (di: DiContainer, ...features: Feature[]) => {
+  features.forEach((feature) => {
+    registerFeatureRecursed(di, feature);
+  });
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/feature-core/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/feature-core/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/feature-core/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/feature-core/coverage/lcov-report/sorter.js b/packages/technical-features/feature-core/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov-report/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/packages/technical-features/feature-core/coverage/lcov.info b/packages/technical-features/feature-core/coverage/lcov.info new file mode 100644 index 0000000000..b827fb1640 --- /dev/null +++ b/packages/technical-features/feature-core/coverage/lcov.info @@ -0,0 +1,305 @@ +TN: +SF:src/deregister-feature.ts +FN:69,get +FN:5,getDependingFeaturesFor +FN:8,getDependingFeaturesForRecursion +FN:23,deregisterFeatureRecursed +FN:69,deregisterFeature +FNF:5 +FNH:5 +FNDA:19,get +FNDA:40,getDependingFeaturesFor +FNDA:77,getDependingFeaturesForRecursion +FNDA:42,deregisterFeatureRecursed +FNDA:19,deregisterFeature +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,40 +DA:7,40 +DA:8,40 +DA:9,77 +DA:10,77 +DA:11,77 +DA:12,30 +DA:13,37 +DA:14,30 +DA:15,30 +DA:16,47 +DA:17,77 +DA:18,77 +DA:19,40 +DA:20,40 +DA:21,40 +DA:22,1 +DA:23,1 +DA:24,42 +DA:25,42 +DA:26,42 +DA:27,42 +DA:28,42 +DA:29,2 +DA:30,2 +DA:31,40 +DA:32,40 +DA:33,40 +DA:34,40 +DA:35,40 +DA:36,40 +DA:37,40 +DA:38,42 +DA:39,4 +DA:40,4 +DA:41,4 +DA:42,4 +DA:43,4 +DA:44,4 +DA:45,36 +DA:46,42 +DA:47,19 +DA:48,19 +DA:49,19 +DA:50,19 +DA:51,19 +DA:52,19 +DA:53,19 +DA:54,14 +DA:55,14 +DA:56,19 +DA:57,36 +DA:58,41 +DA:59,23 +DA:60,23 +DA:61,23 +DA:62,23 +DA:63,36 +DA:64,42 +DA:65,19 +DA:66,19 +DA:67,42 +DA:68,1 +DA:69,1 +DA:70,19 +DA:71,23 +DA:72,23 +DA:73,19 +LF:73 +LH:73 +BRDA:69,0,0,19 +BRDA:5,1,0,40 +BRDA:8,2,0,77 +BRDA:11,3,0,63 +BRDA:11,4,0,30 +BRDA:16,5,0,47 +BRDA:17,6,0,17 +BRDA:17,7,0,30 +BRDA:12,8,0,37 +BRDA:23,9,0,42 +BRDA:28,10,0,2 +BRDA:31,11,0,41 +BRDA:31,12,0,40 +BRDA:38,13,0,21 +BRDA:38,14,0,4 +BRDA:45,15,0,36 +BRDA:46,16,0,19 +BRDA:53,17,0,14 +BRDA:57,18,0,41 +BRDA:57,19,0,36 +BRDA:58,20,0,23 +BRDA:63,21,0,36 +BRDA:64,22,0,19 +BRDA:64,23,0,19 +BRDA:69,24,0,19 +BRDA:70,25,0,23 +BRF:26 +BRH:26 +end_of_record +TN: +SF:src/feature-context-map-injectable.ts +FN:21,instantiate +FNF:1 +FNH:1 +FNDA:21,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +LF:26 +LH:26 +BRDA:21,0,0,21 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/feature.ts +FN:11,get +FN:11,getFeature +FNF:2 +FNH:2 +FNDA:56,get +FNDA:56,getFeature +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +LF:11 +LH:11 +BRDA:11,0,0,56 +BRDA:11,1,0,56 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/register-feature.ts +FN:76,get +FN:9,createFeatureContext +FN:13,instantiate +FN:14,register +FN:18,deregister +FN:40,registerFeatureRecursed +FN:76,registerFeature +FNF:7 +FNH:7 +FNDA:31,get +FNDA:58,createFeatureContext +FNDA:58,instantiate +FNDA:58,register +FNDA:23,deregister +FNDA:79,registerFeatureRecursed +FNDA:31,registerFeature +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,58 +DA:11,58 +DA:12,58 +DA:13,58 +DA:14,58 +DA:15,58 +DA:16,58 +DA:17,58 +DA:18,58 +DA:19,23 +DA:20,23 +DA:21,58 +DA:22,58 +DA:23,58 +DA:24,58 +DA:25,58 +DA:26,58 +DA:27,58 +DA:28,58 +DA:29,58 +DA:30,58 +DA:31,58 +DA:32,58 +DA:33,58 +DA:34,58 +DA:35,58 +DA:36,58 +DA:37,58 +DA:38,58 +DA:39,1 +DA:40,1 +DA:41,79 +DA:42,79 +DA:43,79 +DA:44,21 +DA:45,21 +DA:46,79 +DA:47,79 +DA:48,79 +DA:49,79 +DA:50,79 +DA:51,79 +DA:52,1 +DA:53,1 +DA:54,78 +DA:55,78 +DA:56,79 +DA:57,79 +DA:58,79 +DA:59,79 +DA:60,34 +DA:61,34 +DA:62,34 +DA:63,34 +DA:64,34 +DA:65,34 +DA:66,78 +DA:67,78 +DA:68,58 +DA:69,58 +DA:70,78 +DA:71,79 +DA:72,34 +DA:73,34 +DA:74,79 +DA:75,1 +DA:76,1 +DA:77,31 +DA:78,45 +DA:79,45 +DA:80,31 +LF:80 +LH:80 +BRDA:76,0,0,31 +BRDA:9,1,0,58 +BRDA:13,2,0,58 +BRDA:14,3,0,58 +BRDA:18,4,0,23 +BRDA:40,5,0,79 +BRDA:43,6,0,21 +BRDA:51,7,0,45 +BRDA:51,8,0,5 +BRDA:51,9,0,1 +BRDA:54,10,0,78 +BRDA:55,11,0,58 +BRDA:59,12,0,34 +BRDA:60,13,0,27 +BRDA:66,14,0,78 +BRDA:67,15,0,58 +BRDA:71,16,0,34 +BRDA:71,17,0,34 +BRDA:76,18,0,31 +BRDA:77,19,0,45 +BRF:20 +BRH:20 +end_of_record diff --git a/packages/technical-features/feature-core/dist/index.d.ts b/packages/technical-features/feature-core/dist/index.d.ts new file mode 100644 index 0000000000..13f6306665 --- /dev/null +++ b/packages/technical-features/feature-core/dist/index.d.ts @@ -0,0 +1,3 @@ +export { getFeature } from "./src/feature"; +export { registerFeature } from "./src/register-feature"; +export type { Feature, GetFeatureArgs } from "./src/feature"; diff --git a/packages/technical-features/feature-core/dist/index.js b/packages/technical-features/feature-core/dist/index.js new file mode 100644 index 0000000000..2ef1a69d50 --- /dev/null +++ b/packages/technical-features/feature-core/dist/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{getFeature:()=>r,registerFeature:()=>s});const r=e=>e,n=require("@ogre-tools/injectable"),i=(0,n.getInjectionToken)({id:"feature-context-map-injection-token"}),o=(0,n.getInjectable)({id:"feature-store",instantiate:()=>new Map,injectionToken:i}),d=(e,t,r)=>{var s;0===e.injectMany(i).length&&e.register(o);const a=e.inject(o).get(t);if(!r&&a&&0===a.dependedBy.size)throw new Error(`Tried to register feature "${t.id}", but it was already registered.`);const c=a||((e,t)=>{const r=(0,n.getInjectable)({id:e.id,instantiate:t=>({register:()=>{e.register(t)},deregister:()=>{t.deregister(r)},dependedBy:new Map,numberOfRegistrations:0}),scope:!0});t.register(r);const i=t.inject(o),d=t.inject(r);return i.set(e,d),d})(t,e);if(c.numberOfRegistrations++,r){const e=(c.dependedBy.get(r)||0)+1;c.dependedBy.set(r,e)}a||c.register(),null===(s=t.dependencies)||void 0===s||s.forEach((r=>{d(e,r,t)}))},s=(e,...t)=>{t.forEach((t=>{d(e,t)}))};module.exports=t})(); \ No newline at end of file diff --git a/packages/technical-features/feature-core/dist/src/feature-context-map-injectable.d.ts b/packages/technical-features/feature-core/dist/src/feature-context-map-injectable.d.ts new file mode 100644 index 0000000000..01dffc89b9 --- /dev/null +++ b/packages/technical-features/feature-core/dist/src/feature-context-map-injectable.d.ts @@ -0,0 +1,10 @@ +import type { Feature } from "./feature"; +export type FeatureContextMap = Map void; + deregister: () => void; + dependedBy: Map; + numberOfRegistrations: number; +}>; +export declare const featureContextMapInjectionToken: import("@ogre-tools/injectable").InjectionToken; +declare const featureContextMapInjectable: import("@ogre-tools/injectable").Injectable; +export { featureContextMapInjectable }; diff --git a/packages/technical-features/feature-core/dist/src/feature.d.ts b/packages/technical-features/feature-core/dist/src/feature.d.ts new file mode 100644 index 0000000000..0a458b86a7 --- /dev/null +++ b/packages/technical-features/feature-core/dist/src/feature.d.ts @@ -0,0 +1,9 @@ +import type { DiContainerForInjection } from "@ogre-tools/injectable"; +export interface Feature { + id: string; + register: (di: DiContainerForInjection) => void; + dependencies?: Feature[]; +} +export interface GetFeatureArgs extends Feature { +} +export declare const getFeature: (getFeatureArgs: GetFeatureArgs) => Feature; diff --git a/packages/technical-features/feature-core/dist/src/register-feature.d.ts b/packages/technical-features/feature-core/dist/src/register-feature.d.ts new file mode 100644 index 0000000000..7a53428241 --- /dev/null +++ b/packages/technical-features/feature-core/dist/src/register-feature.d.ts @@ -0,0 +1,3 @@ +import type { DiContainer } from "@ogre-tools/injectable"; +import type { Feature } from "./feature"; +export declare const registerFeature: (di: DiContainer, ...features: Feature[]) => void; diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/feature.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/feature.ts.html new file mode 100644 index 0000000000..e3d959916c --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for actual/feature.ts + + + + + + + + + +
+
+

All files / actual feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +1x +1x +13x +13x +13x +13x +13x +13x +13x +1x + 
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { applicationFeature } from "@k8slens/application";
+import { getFeature } from "@k8slens/feature-core";
+ 
+export const messagingFeature = getFeature({
+  id: "messaging",
+ 
+  dependencies: [applicationFeature],
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/index.html new file mode 100644 index 0000000000..802b5dcb29 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for actual + + + + + + + + + +
+
+

All files actual

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/index.html new file mode 100644 index 0000000000..e6306d82ef --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for actual/listening-of-channels + + + + + + + + + +
+
+

All files actual/listening-of-channels

+
+ +
+ 100% + Statements + 134/134 +
+ + +
+ 100% + Branches + 21/21 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 134/134 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
listening-of-channels.injectable.ts +
+
100%113/113100%18/18100%4/4100%113/113
start-listening-of-channels.injectable.ts +
+
100%21/21100%3/3100%3/3100%21/21
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/listening-of-channels.injectable.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/listening-of-channels.injectable.ts.html new file mode 100644 index 0000000000..8bcde98f69 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/listening-of-channels.injectable.ts.html @@ -0,0 +1,424 @@ + + + + + + Code coverage report for actual/listening-of-channels/listening-of-channels.injectable.ts + + + + + + + + + +
+
+

All files / actual/listening-of-channels listening-of-channels.injectable.ts

+
+ +
+ 100% + Statements + 113/113 +
+ + +
+ 100% + Branches + 18/18 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 113/113 +
+ + +
+

+ 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 +1141x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +45x +45x +45x +45x +45x +45x +45x +45x +45x +24x +24x +24x +1x +1x +1x +1x +23x +23x +23x +23x +23x +45x +45x +8x +8x +8x +8x +8x +8x +45x +26x +26x +26x +26x +26x +8x +8x +8x +26x +1x +1x +1x +1x +1x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +4x +4x +4x +13x +13x +1x +1x +1x +1x +1x + 
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+import { enlistMessageChannelListenerInjectionToken } from "../message/enlist-message-channel-listener-injection-token";
+ 
+import { getStartableStoppable, StartableStoppable } from "@k8slens/startable-stoppable";
+ 
+import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
+import { IComputedValue, reaction } from "mobx";
+ 
+import {
+  MessageChannel,
+  messageChannelListenerInjectionToken,
+} from "../message/message-channel-listener-injection-token";
+import {
+  RequestChannel,
+  requestChannelListenerInjectionToken,
+} from "../request/request-channel-listener-injection-token";
+import { enlistRequestChannelListenerInjectionToken } from "../request/enlist-request-channel-listener-injection-token";
+ 
+export type ListeningOfChannels = StartableStoppable;
+export const listeningOfChannelsInjectionToken = getInjectionToken<ListeningOfChannels>({
+  id: "listening-of-channels-injection-token",
+});
+ 
+const listening = <
+  T extends { id: string; channel: MessageChannel<any> | RequestChannel<any, any> },
+>(
+  channelListeners: IComputedValue<T[]>,
+  enlistChannelListener: (listener: T) => () => void,
+  getId: (listener: T) => string,
+) => {
+  const listenerDisposers = new Map<string, () => void>();
+ 
+  const reactionDisposer = reaction(
+    () => channelListeners.get(),
+    (newValues, oldValues = []) => {
+      const addedListeners = newValues.filter(
+        (newValue) => !oldValues.some((oldValue) => oldValue.id === newValue.id),
+      );
+ 
+      const removedListeners = oldValues.filter(
+        (oldValue) => !newValues.some((newValue) => newValue.id === oldValue.id),
+      );
+ 
+      addedListeners.forEach((listener) => {
+        const id = getId(listener);
+ 
+        if (listenerDisposers.has(id)) {
+          throw new Error(
+            `Tried to add listener for channel "${listener.channel.id}" but listener already exists.`,
+          );
+        }
+ 
+        const disposer = enlistChannelListener(listener);
+ 
+        listenerDisposers.set(id, disposer);
+      });
+ 
+      removedListeners.forEach((listener) => {
+        const dispose = listenerDisposers.get(getId(listener));
+ 
+        dispose?.();
+ 
+        listenerDisposers.delete(getId(listener));
+      });
+    },
+ 
+    { fireImmediately: true },
+  );
+ 
+  return () => {
+    reactionDisposer();
+    listenerDisposers.forEach((dispose) => dispose());
+  };
+};
+ 
+const listeningOfChannelsInjectable = getInjectable({
+  id: "listening-of-channels",
+ 
+  instantiate: (di) => {
+    const enlistMessageChannelListener = di.inject(enlistMessageChannelListenerInjectionToken);
+ 
+    const enlistRequestChannelListener = di.inject(enlistRequestChannelListenerInjectionToken);
+ 
+    const computedInjectMany = di.inject(computedInjectManyInjectable);
+ 
+    const messageChannelListeners = computedInjectMany(messageChannelListenerInjectionToken);
+ 
+    const requestChannelListeners = computedInjectMany(requestChannelListenerInjectionToken);
+ 
+    return getStartableStoppable("listening-of-channels", () => {
+      const stopListeningOfMessageChannels = listening(
+        messageChannelListeners,
+        enlistMessageChannelListener,
+        (x) => x.id,
+      );
+ 
+      const stopListeningOfRequestChannels = listening(
+        requestChannelListeners,
+        enlistRequestChannelListener,
+        (x) => x.channel.id,
+      );
+ 
+      return () => {
+        stopListeningOfMessageChannels();
+        stopListeningOfRequestChannels();
+      };
+    });
+  },
+ 
+  injectionToken: listeningOfChannelsInjectionToken,
+});
+ 
+export default listeningOfChannelsInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/start-listening-of-channels.injectable.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/start-listening-of-channels.injectable.ts.html new file mode 100644 index 0000000000..f4250a57b4 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/listening-of-channels/start-listening-of-channels.injectable.ts.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for actual/listening-of-channels/start-listening-of-channels.injectable.ts + + + + + + + + + +
+
+

All files / actual/listening-of-channels start-listening-of-channels.injectable.ts

+
+ +
+ 100% + Statements + 21/21 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 21/21 +
+ + +
+

+ 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 +221x +1x +1x +1x +1x +1x +1x +1x +13x +13x +13x +13x +13x +13x +13x +13x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { onLoadOfApplicationInjectionToken } from "@k8slens/application";
+import { listeningOfChannelsInjectionToken } from "./listening-of-channels.injectable";
+ 
+const startListeningOfChannelsInjectable = getInjectable({
+  id: "start-listening-of-channels",
+ 
+  instantiate: (di) => {
+    const listeningOfChannels = di.inject(listeningOfChannelsInjectionToken);
+ 
+    return {
+      run: async () => {
+        await listeningOfChannels.start();
+      },
+    };
+  },
+ 
+  injectionToken: onLoadOfApplicationInjectionToken,
+});
+ 
+export default startListeningOfChannelsInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/enlist-message-channel-listener-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/enlist-message-channel-listener-injection-token.ts.html new file mode 100644 index 0000000000..0d306ba74b --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/enlist-message-channel-listener-injection-token.ts.html @@ -0,0 +1,133 @@ + + + + + + Code coverage report for actual/message/enlist-message-channel-listener-injection-token.ts + + + + + + + + + +
+
+

All files / actual/message enlist-message-channel-listener-injection-token.ts

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

+ 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 +171x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import type { Disposer } from "@k8slens/utilities";
+import { getInjectionToken } from "@ogre-tools/injectable";
+ 
+import type {
+  MessageChannel,
+  MessageChannelListener,
+} from "./message-channel-listener-injection-token";
+ 
+export type EnlistMessageChannelListener = <T>(
+  listener: MessageChannelListener<MessageChannel<T>>,
+) => Disposer;
+ 
+export const enlistMessageChannelListenerInjectionToken =
+  getInjectionToken<EnlistMessageChannelListener>({
+    id: "listening-to-a-message-channel",
+  });
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/get-message-channel.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/get-message-channel.ts.html new file mode 100644 index 0000000000..753b59dea7 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/get-message-channel.ts.html @@ -0,0 +1,100 @@ + + + + + + Code coverage report for actual/message/get-message-channel.ts + + + + + + + + + +
+
+

All files / actual/message get-message-channel.ts

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 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 +61x +1x +1x +6x +6x + 
import type { MessageChannel } from "./message-channel-listener-injection-token";
+ 
+export const getMessageChannel = <Request>(id: string): MessageChannel<Request> => ({
+  id,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/index.html new file mode 100644 index 0000000000..1039d63d3b --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for actual/message + + + + + + + + + +
+
+

All files actual/message

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
enlist-message-channel-listener-injection-token.ts +
+
100%16/16100%1/1100%1/1100%16/16
get-message-channel.ts +
+
100%5/5100%2/2100%2/2100%5/5
message-channel-listener-injection-token.ts +
+
100%51/51100%2/2100%2/2100%51/51
message-to-channel-injection-token.ts +
+
100%11/11100%1/1100%1/1100%11/11
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-channel-listener-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-channel-listener-injection-token.ts.html new file mode 100644 index 0000000000..f9c566b5e7 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-channel-listener-injection-token.ts.html @@ -0,0 +1,238 @@ + + + + + + Code coverage report for actual/message/message-channel-listener-injection-token.ts + + + + + + + + + +
+
+

All files / actual/message message-channel-listener-injection-token.ts

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

+ 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 +521x +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 +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x +11x + 
import type { DiContainerForInjection } from "@ogre-tools/injectable";
+import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+ 
+export interface MessageChannel<Message> {
+  id: string;
+  _messageSignature?: Message;
+}
+ 
+export type ExtraData = { processId: number; frameId: number };
+ 
+export type MessageChannelHandler<Channel> = Channel extends MessageChannel<infer Message>
+  ? (message: Message, data?: ExtraData) => void
+  : never;
+ 
+export interface MessageChannelListener<Channel> {
+  id: string;
+  channel: Channel;
+  handler: MessageChannelHandler<Channel>;
+}
+ 
+export const messageChannelListenerInjectionToken = getInjectionToken<
+  MessageChannelListener<MessageChannel<unknown>>
+>({
+  id: "message-channel-listener",
+});
+ 
+export interface GetMessageChannelListenerInfo<Channel extends MessageChannel<Message>, Message> {
+  id: string;
+  channel: Channel;
+  getHandler: (di: DiContainerForInjection) => MessageChannelHandler<Channel>;
+  causesSideEffects?: boolean;
+}
+ 
+export const getMessageChannelListenerInjectable = <
+  Channel extends MessageChannel<Message>,
+  Message,
+>(
+  info: GetMessageChannelListenerInfo<Channel, Message>,
+) =>
+  getInjectable({
+    id: `${info.channel.id}-message-listener-${info.id}`,
+ 
+    instantiate: (di): MessageChannelListener<Channel> => ({
+      id: `${info.channel.id}-message-listener-${info.id}`,
+      channel: info.channel,
+      handler: info.getHandler(di),
+    }),
+ 
+    injectionToken: messageChannelListenerInjectionToken,
+    causesSideEffects: info.causesSideEffects,
+  });
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-to-channel-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-to-channel-injection-token.ts.html new file mode 100644 index 0000000000..53e256e2c9 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/message/message-to-channel-injection-token.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for actual/message/message-to-channel-injection-token.ts + + + + + + + + + +
+
+

All files / actual/message message-to-channel-injection-token.ts

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 11/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 +121x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type { MessageChannel } from "./message-channel-listener-injection-token";
+ 
+export interface SendMessageToChannel {
+  (channel: MessageChannel<void>): void;
+  <Message>(channel: MessageChannel<Message>, message: Message): void;
+}
+ 
+export const sendMessageToChannelInjectionToken = getInjectionToken<SendMessageToChannel>({
+  id: "send-message-to-message-channel",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/enlist-request-channel-listener-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/enlist-request-channel-listener-injection-token.ts.html new file mode 100644 index 0000000000..02df68b7f5 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/enlist-request-channel-listener-injection-token.ts.html @@ -0,0 +1,133 @@ + + + + + + Code coverage report for actual/request/enlist-request-channel-listener-injection-token.ts + + + + + + + + + +
+
+

All files / actual/request enlist-request-channel-listener-injection-token.ts

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

+ 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 +171x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import type { Disposer } from "@k8slens/utilities/index";
+import { getInjectionToken } from "@ogre-tools/injectable";
+ 
+import type {
+  RequestChannel,
+  RequestChannelListener,
+} from "./request-channel-listener-injection-token";
+ 
+export type EnlistRequestChannelListener = <Request, Response>(
+  listener: RequestChannelListener<RequestChannel<Request, Response>>,
+) => Disposer;
+ 
+export const enlistRequestChannelListenerInjectionToken =
+  getInjectionToken<EnlistRequestChannelListener>({
+    id: "listening-to-a-request-channel",
+  });
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/get-request-channel.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/get-request-channel.ts.html new file mode 100644 index 0000000000..a22944afdf --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/get-request-channel.ts.html @@ -0,0 +1,106 @@ + + + + + + Code coverage report for actual/request/get-request-channel.ts + + + + + + + + + +
+
+

All files / actual/request get-request-channel.ts

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

+ 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 +81x +1x +1x +14x +14x +14x +14x + 
import type { RequestChannel } from "./request-channel-listener-injection-token";
+ 
+export const getRequestChannel = <Request, Response>(
+  id: string,
+): RequestChannel<Request, Response> => ({
+  id,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/index.html new file mode 100644 index 0000000000..a27a5f662c --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for actual/request + + + + + + + + + +
+
+

All files actual/request

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
enlist-request-channel-listener-injection-token.ts +
+
100%16/16100%1/1100%1/1100%16/16
get-request-channel.ts +
+
100%7/7100%2/2100%2/2100%7/7
request-channel-listener-injection-token.ts +
+
100%56/56100%2/2100%2/2100%56/56
request-from-channel-injection-token.ts +
+
100%21/21100%1/1100%1/1100%21/21
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-channel-listener-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-channel-listener-injection-token.ts.html new file mode 100644 index 0000000000..d3e61a1754 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-channel-listener-injection-token.ts.html @@ -0,0 +1,253 @@ + + + + + + Code coverage report for actual/request/request-channel-listener-injection-token.ts + + + + + + + + + +
+
+

All files / actual/request request-channel-listener-injection-token.ts

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

+ 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 +571x +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 +1x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x +13x + 
import type { DiContainerForInjection } from "@ogre-tools/injectable";
+import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+ 
+export interface RequestChannel<Request, Response> {
+  id: string;
+  _requestSignature?: Request;
+  _responseSignature?: Response;
+}
+ 
+export type RequestChannelHandler<Channel> = Channel extends RequestChannel<
+  infer Request,
+  infer Response
+>
+  ? (req: Request) => Promise<Response> | Response
+  : never;
+ 
+export interface RequestChannelListener<Channel> {
+  id: string;
+  channel: Channel;
+  handler: RequestChannelHandler<Channel>;
+}
+ 
+export const requestChannelListenerInjectionToken = getInjectionToken<
+  RequestChannelListener<RequestChannel<unknown, unknown>>
+>({
+  id: "request-channel-listener",
+});
+ 
+export interface GetRequestChannelListenerInjectableInfo<
+  Channel extends RequestChannel<Request, Response>,
+  Request,
+  Response,
+> {
+  id: string;
+  channel: Channel;
+  getHandler: (di: DiContainerForInjection) => RequestChannelHandler<Channel>;
+}
+ 
+export const getRequestChannelListenerInjectable = <
+  Channel extends RequestChannel<Request, Response>,
+  Request,
+  Response,
+>(
+  info: GetRequestChannelListenerInjectableInfo<Channel, Request, Response>,
+) =>
+  getInjectable({
+    id: `${info.channel.id}-request-listener-${info.id}`,
+ 
+    instantiate: (di) => ({
+      id: `${info.channel.id}-request-listener-${info.id}`,
+      channel: info.channel,
+      handler: info.getHandler(di),
+    }),
+ 
+    injectionToken: requestChannelListenerInjectionToken,
+  });
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-from-channel-injection-token.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-from-channel-injection-token.ts.html new file mode 100644 index 0000000000..8b0e799032 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/actual/request/request-from-channel-injection-token.ts.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for actual/request/request-from-channel-injection-token.ts + + + + + + + + + +
+
+

All files / actual/request request-from-channel-injection-token.ts

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

+ 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 +221x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type { RequestChannel } from "./request-channel-listener-injection-token";
+ 
+export interface RequestFromChannel {
+  <Request, Response>(
+    channel: RequestChannel<Request, Response>,
+    request: Request,
+  ): Promise<Response>;
+  <Response>(channel: RequestChannel<void, Response>): Promise<Response>;
+}
+ 
+export type ChannelRequester<Channel> = Channel extends RequestChannel<
+  infer Request,
+  infer Response
+>
+  ? (req: Request) => Promise<Awaited<Response>>
+  : never;
+ 
+export const requestFromChannelInjectionToken = getInjectionToken<RequestFromChannel>({
+  id: "request-from-request-channel",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/base.css b/packages/technical-features/messaging/agnostic/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/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/packages/technical-features/messaging/agnostic/coverage/lcov-report/block-navigation.js b/packages/technical-features/messaging/agnostic/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/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/packages/technical-features/messaging/agnostic/coverage/lcov-report/favicon.png b/packages/technical-features/messaging/agnostic/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/messaging/agnostic/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/index.html new file mode 100644 index 0000000000..dde67d3657 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 384/384 +
+ + +
+ 100% + Branches + 41/41 +
+ + +
+ 100% + Functions + 29/29 +
+ + +
+ 100% + Lines + 384/384 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
actual +
+
100%18/18100%3/3100%3/3100%18/18
actual/listening-of-channels +
+
100%134/134100%21/21100%7/7100%134/134
actual/message +
+
100%83/83100%6/6100%6/6100%83/83
actual/request +
+
100%100/100100%6/6100%6/6100%100/100
unit-testing +
+
100%49/49100%5/5100%7/7100%49/49
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/prettify.css b/packages/technical-features/messaging/agnostic/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/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/packages/technical-features/messaging/agnostic/coverage/lcov-report/prettify.js b/packages/technical-features/messaging/agnostic/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/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/packages/technical-features/messaging/agnostic/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/messaging/agnostic/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/messaging/agnostic/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/sorter.js b/packages/technical-features/messaging/agnostic/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/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/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/feature.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/feature.ts.html new file mode 100644 index 0000000000..39d47d436c --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for unit-testing/feature.ts + + + + + + + + + +
+
+

All files / unit-testing feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +1x +1x +13x +13x +13x +13x +13x +13x +13x +1x + 
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { getFeature } from "@k8slens/feature-core";
+import { messagingFeature } from "../actual/feature";
+ 
+export const messagingFeatureForUnitTesting = getFeature({
+  id: "messaging-for-unit-testing",
+ 
+  dependencies: [messagingFeature],
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/index.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/index.html new file mode 100644 index 0000000000..d5775d8fda --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for unit-testing + + + + + + + + + +
+
+

All files unit-testing

+
+ +
+ 100% + Statements + 49/49 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 49/49 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
test-doubles.injectable.ts +
+
100%31/31100%2/2100%4/4100%31/31
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/test-doubles.injectable.ts.html b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/test-doubles.injectable.ts.html new file mode 100644 index 0000000000..4a77f137e9 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov-report/unit-testing/test-doubles.injectable.ts.html @@ -0,0 +1,178 @@ + + + + + + Code coverage report for unit-testing/test-doubles.injectable.ts + + + + + + + + + +
+
+

All files / unit-testing test-doubles.injectable.ts

+
+ +
+ 100% + Statements + 31/31 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 31/31 +
+ + +
+

+ 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 +321x +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 { sendMessageToChannelInjectionToken } from "../actual/message/message-to-channel-injection-token";
+import { enlistMessageChannelListenerInjectionToken } from "../actual/message/enlist-message-channel-listener-injection-token";
+import { requestFromChannelInjectionToken } from "../actual/request/request-from-channel-injection-token";
+import { enlistRequestChannelListenerInjectionToken } from "../actual/request/enlist-request-channel-listener-injection-token";
+import { getInjectable } from "@ogre-tools/injectable";
+ 
+export const sendMessageToChannelStubInjectable = getInjectable({
+  id: "send-message-to-channel-stub",
+  /* c8 ignore next */
+  instantiate: () => () => {},
+  injectionToken: sendMessageToChannelInjectionToken,
+});
+ 
+export const enlistMessageChannelListenerStubInjectable = getInjectable({
+  id: "enlist-message-channel-listener-stub",
+  instantiate: () => () => () => {},
+  injectionToken: enlistMessageChannelListenerInjectionToken,
+});
+ 
+export const requestFromChannelStubInjectable = getInjectable({
+  id: "request-from-channel-stub",
+  /* c8 ignore next */
+  instantiate: () => () => Promise.resolve(),
+  injectionToken: requestFromChannelInjectionToken,
+});
+ 
+export const enlistRequestChannelListenerStubInjectable = getInjectable({
+  id: "enlist-request-channel-listener-stub",
+  instantiate: () => () => () => {},
+  injectionToken: enlistRequestChannelListenerInjectionToken,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/coverage/lcov.info b/packages/technical-features/messaging/agnostic/coverage/lcov.info new file mode 100644 index 0000000000..4da528a474 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/coverage/lcov.info @@ -0,0 +1,600 @@ +TN: +SF:src/features/actual/feature.ts +FN:5,get +FN:10,register +FN:15,getRequireContexts +FNF:3 +FNH:3 +FNDA:2,get +FNDA:13,register +FNDA:13,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,13 +DA:12,13 +DA:13,13 +DA:14,13 +DA:15,13 +DA:16,13 +DA:17,13 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,2 +BRDA:10,1,0,13 +BRDA:15,2,0,13 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/features/actual/listening-of-channels/listening-of-channels.injectable.ts +FN:24,listening +FN:34,oldValues +FN:35,reactionDisposer.fireImmediately +FN:79,instantiate +FNF:4 +FNH:4 +FNDA:26,listening +FNDA:45,oldValues +FNDA:45,reactionDisposer.fireImmediately +FNDA:13,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,26 +DA:26,26 +DA:27,26 +DA:28,26 +DA:29,26 +DA:30,26 +DA:31,26 +DA:32,26 +DA:33,26 +DA:34,26 +DA:35,26 +DA:36,45 +DA:37,45 +DA:38,45 +DA:39,45 +DA:40,45 +DA:41,45 +DA:42,45 +DA:43,45 +DA:44,45 +DA:45,24 +DA:46,24 +DA:47,24 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,23 +DA:53,23 +DA:54,23 +DA:55,23 +DA:56,23 +DA:57,45 +DA:58,45 +DA:59,8 +DA:60,8 +DA:61,8 +DA:62,8 +DA:63,8 +DA:64,8 +DA:65,45 +DA:66,26 +DA:67,26 +DA:68,26 +DA:69,26 +DA:70,26 +DA:71,8 +DA:72,8 +DA:73,8 +DA:74,26 +DA:75,1 +DA:76,1 +DA:77,1 +DA:78,1 +DA:79,1 +DA:80,13 +DA:81,13 +DA:82,13 +DA:83,13 +DA:84,13 +DA:85,13 +DA:86,13 +DA:87,13 +DA:88,13 +DA:89,13 +DA:90,13 +DA:91,13 +DA:92,13 +DA:93,13 +DA:94,13 +DA:95,13 +DA:96,13 +DA:97,13 +DA:98,13 +DA:99,13 +DA:100,13 +DA:101,13 +DA:102,13 +DA:103,13 +DA:104,4 +DA:105,4 +DA:106,4 +DA:107,13 +DA:108,13 +DA:109,1 +DA:110,1 +DA:111,1 +DA:112,1 +DA:113,1 +LF:113 +LH:113 +BRDA:24,0,0,26 +BRDA:34,1,0,45 +BRDA:35,2,0,45 +BRDA:37,3,0,43 +BRDA:37,4,0,38 +BRDA:41,5,0,27 +BRDA:41,6,0,27 +BRDA:44,7,0,24 +BRDA:47,8,0,1 +BRDA:52,9,0,23 +BRDA:58,10,0,8 +BRDA:70,11,0,8 +BRDA:72,12,0,4 +BRDA:79,13,0,13 +BRDA:90,14,0,13 +BRDA:94,15,0,19 +BRDA:100,16,0,21 +BRDA:103,17,0,4 +BRF:18 +BRH:18 +end_of_record +TN: +SF:src/features/actual/listening-of-channels/start-listening-of-channels.injectable.ts +FN:21,get +FN:8,instantiate +FN:12,run +FNF:3 +FNH:3 +FNDA:13,get +FNDA:13,instantiate +FNDA:13,run +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,13 +DA:10,13 +DA:11,13 +DA:12,13 +DA:13,13 +DA:14,13 +DA:15,13 +DA:16,13 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +LF:21 +LH:21 +BRDA:21,0,0,13 +BRDA:8,1,0,13 +BRDA:12,2,0,13 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/features/actual/message/enlist-message-channel-listener-injection-token.ts +FN:13,get +FNF:1 +FNH:1 +FNDA:21,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +LF:16 +LH:16 +BRDA:13,0,0,21 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/features/actual/message/get-message-channel.ts +FN:3,get +FN:3,getMessageChannel +FNF:2 +FNH:2 +FNDA:6,get +FNDA:6,getMessageChannel +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,6 +DA:5,6 +LF:5 +LH:5 +BRDA:3,0,0,6 +BRDA:3,1,0,6 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/features/actual/message/message-channel-listener-injection-token.ts +FN:34,getMessageChannelListenerInjectable +FN:43,instantiate +FNF:2 +FNH:2 +FNDA:11,getMessageChannelListenerInjectable +FNDA:11,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,11 +DA:36,11 +DA:37,11 +DA:38,11 +DA:39,11 +DA:40,11 +DA:41,11 +DA:42,11 +DA:43,11 +DA:44,11 +DA:45,11 +DA:46,11 +DA:47,11 +DA:48,11 +DA:49,11 +DA:50,11 +DA:51,11 +LF:51 +LH:51 +BRDA:34,0,0,11 +BRDA:43,1,0,11 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/features/actual/message/message-to-channel-injection-token.ts +FN:9,get +FNF:1 +FNH:1 +FNDA:2,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +LF:11 +LH:11 +BRDA:9,0,0,2 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/features/actual/request/enlist-request-channel-listener-injection-token.ts +FN:13,get +FNF:1 +FNH:1 +FNDA:22,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +LF:16 +LH:16 +BRDA:13,0,0,22 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/features/actual/request/get-request-channel.ts +FN:3,get +FN:3,getRequestChannel +FNF:2 +FNH:2 +FNDA:14,get +FNDA:14,getRequestChannel +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,14 +DA:5,14 +DA:6,14 +DA:7,14 +LF:7 +LH:7 +BRDA:3,0,0,14 +BRDA:3,1,0,14 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/features/actual/request/request-channel-listener-injection-token.ts +FN:39,getRequestChannelListenerInjectable +FN:49,instantiate +FNF:2 +FNH:2 +FNDA:13,getRequestChannelListenerInjectable +FNDA:13,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,13 +DA:41,13 +DA:42,13 +DA:43,13 +DA:44,13 +DA:45,13 +DA:46,13 +DA:47,13 +DA:48,13 +DA:49,13 +DA:50,13 +DA:51,13 +DA:52,13 +DA:53,13 +DA:54,13 +DA:55,13 +DA:56,13 +LF:56 +LH:56 +BRDA:39,0,0,13 +BRDA:49,1,0,13 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/features/actual/request/request-from-channel-injection-token.ts +FN:19,get +FNF:1 +FNH:1 +FNDA:2,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +LF:21 +LH:21 +BRDA:19,0,0,2 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/features/unit-testing/feature.ts +FN:5,get +FN:10,register +FN:15,getRequireContexts +FNF:3 +FNH:3 +FNDA:13,get +FNDA:13,register +FNDA:13,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,13 +DA:12,13 +DA:13,13 +DA:14,13 +DA:15,13 +DA:16,13 +DA:17,13 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,13 +BRDA:10,1,0,13 +BRDA:15,2,0,13 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/features/unit-testing/test-doubles.injectable.ts +FN:10,instantiate +FN:16,instantiate +FN:23,instantiate +FN:29,instantiate +FNF:4 +FNH:4 +FNDA:1,instantiate +FNDA:7,instantiate +FNDA:1,instantiate +FNDA:6,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +LF:31 +LH:31 +BRDA:16,0,0,7 +BRDA:29,1,0,6 +BRF:2 +BRH:2 +end_of_record diff --git a/packages/technical-features/messaging/agnostic/dist/index.d.ts b/packages/technical-features/messaging/agnostic/dist/index.d.ts new file mode 100644 index 0000000000..75b20812f1 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/index.d.ts @@ -0,0 +1,2 @@ +export * from "./src/features/actual"; +export * as testUtils from "./src/features/unit-testing"; diff --git a/packages/technical-features/messaging/agnostic/dist/index.js b/packages/technical-features/messaging/agnostic/dist/index.js new file mode 100644 index 0000000000..6d23d4be89 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={417:(e,n,t)=>{"use strict";t.d(n,{w:()=>o});var s=t(610),i=t(290),r=t(344);e=t.hmd(e);const o=(0,r.getFeature)({id:"messaging",dependencies:[i.applicationFeature],register:n=>{(0,s.autoRegister)({di:n,targetModule:e,getRequireContexts:()=>[t(418)]})}})},275:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>h,listeningOfChannelsInjectionToken:()=>u});var s=t(905),i=t(470);const r=require("@k8slens/startable-stoppable"),o=require("@ogre-tools/injectable-extension-for-mobx"),a=require("mobx");var c=t(588),l=t(928),d=t(160);const u=(0,s.getInjectionToken)({id:"listening-of-channels-injection-token"}),g=(e,n,t)=>{const s=new Map,i=(0,a.reaction)((()=>e.get()),((e,i=[])=>{const r=e.filter((e=>!i.some((n=>n.id===e.id)))),o=i.filter((n=>!e.some((e=>e.id===n.id))));r.forEach((e=>{const i=t(e);if(s.has(i))throw new Error(`Tried to add listener for channel "${e.channel.id}" but listener already exists.`);const r=n(e);s.set(i,r)})),o.forEach((e=>{const n=s.get(t(e));null==n||n(),s.delete(t(e))}))}),{fireImmediately:!0});return()=>{i(),s.forEach((e=>e()))}},h=(0,s.getInjectable)({id:"listening-of-channels",instantiate:e=>{const n=e.inject(i.G),t=e.inject(d.f),s=e.inject(o.computedInjectManyInjectable),a=s(c.k),u=s(l.C);return(0,r.getStartableStoppable)("listening-of-channels",(()=>{const e=g(a,n,(e=>e.id)),s=g(u,t,(e=>e.channel.id));return()=>{e(),s()}}))},injectionToken:u})},653:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>o});var s=t(905),i=t(290),r=t(275);const o=(0,s.getInjectable)({id:"start-listening-of-channels",instantiate:e=>{const n=e.inject(r.listeningOfChannelsInjectionToken);return{run:async()=>{await n.start()}}},injectionToken:i.onLoadOfApplicationInjectionToken})},470:(e,n,t)=>{"use strict";t.d(n,{G:()=>s});const s=(0,t(905).getInjectionToken)({id:"listening-to-a-message-channel"})},588:(e,n,t)=>{"use strict";t.d(n,{A:()=>r,k:()=>i});var s=t(905);const i=(0,s.getInjectionToken)({id:"message-channel-listener"}),r=e=>(0,s.getInjectable)({id:`${e.channel.id}-message-listener-${e.id}`,instantiate:n=>({id:`${e.channel.id}-message-listener-${e.id}`,channel:e.channel,handler:e.getHandler(n)}),injectionToken:i,causesSideEffects:e.causesSideEffects})},778:(e,n,t)=>{"use strict";t.d(n,{v:()=>s});const s=(0,t(905).getInjectionToken)({id:"send-message-to-message-channel"})},160:(e,n,t)=>{"use strict";t.d(n,{f:()=>s});const s=(0,t(905).getInjectionToken)({id:"listening-to-a-request-channel"})},928:(e,n,t)=>{"use strict";t.d(n,{C:()=>i,K:()=>r});var s=t(905);const i=(0,s.getInjectionToken)({id:"request-channel-listener"}),r=e=>(0,s.getInjectable)({id:`${e.channel.id}-request-listener-${e.id}`,instantiate:n=>({id:`${e.channel.id}-request-listener-${e.id}`,channel:e.channel,handler:e.getHandler(n)}),injectionToken:i})},323:(e,n,t)=>{"use strict";t.d(n,{H:()=>s});const s=(0,t(905).getInjectionToken)({id:"request-from-request-channel"})},980:(e,n,t)=>{"use strict";t.d(n,{z:()=>o});var s=t(610),i=t(344),r=t(417);e=t.hmd(e);const o=(0,i.getFeature)({id:"messaging-for-unit-testing",dependencies:[r.w],register:n=>{(0,s.autoRegister)({di:n,targetModule:e,getRequireContexts:()=>[t(451)]})}})},829:(e,n,t)=>{"use strict";t.r(n),t.d(n,{enlistMessageChannelListenerStubInjectable:()=>l,enlistRequestChannelListenerStubInjectable:()=>u,requestFromChannelStubInjectable:()=>d,sendMessageToChannelStubInjectable:()=>c});var s=t(778),i=t(470),r=t(323),o=t(160),a=t(905);const c=(0,a.getInjectable)({id:"send-message-to-channel-stub",instantiate:()=>()=>{},injectionToken:s.v}),l=(0,a.getInjectable)({id:"enlist-message-channel-listener-stub",instantiate:()=>()=>()=>{},injectionToken:i.G}),d=(0,a.getInjectable)({id:"request-from-channel-stub",instantiate:()=>()=>Promise.resolve(),injectionToken:r.H}),u=(0,a.getInjectable)({id:"enlist-request-channel-listener-stub",instantiate:()=>()=>()=>{},injectionToken:o.f})},418:(e,n,t)=>{var s={"./listening-of-channels/listening-of-channels.injectable.ts":275,"./listening-of-channels/start-listening-of-channels.injectable.ts":653};function i(e){var n=r(e);return t(n)}function r(e){if(!t.o(s,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return s[e]}i.keys=function(){return Object.keys(s)},i.resolve=r,e.exports=i,i.id=418},451:(e,n,t)=>{var s={"./test-doubles.injectable.ts":829};function i(e){var n=r(e);return t(n)}function r(e){if(!t.o(s,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return s[e]}i.keys=function(){return Object.keys(s)},i.resolve=r,e.exports=i,i.id=451},290:e=>{"use strict";e.exports=require("@k8slens/application")},344:e=>{"use strict";e.exports=require("@k8slens/feature-core")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")},610:e=>{"use strict";e.exports=require("@ogre-tools/injectable-extension-for-auto-registration")}},n={};function t(s){var i=n[s];if(void 0!==i)return i.exports;var r=n[s]={id:s,loaded:!1,exports:{}};return e[s](r,r.exports,t),r.loaded=!0,r.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var s in n)t.o(n,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:n[s]})},t.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};(()=>{"use strict";t.r(s),t.d(s,{enlistMessageChannelListenerInjectionToken:()=>l.G,enlistRequestChannelListenerInjectionToken:()=>d.f,getMessageChannel:()=>r,getMessageChannelListenerInjectable:()=>c.A,getRequestChannel:()=>i,getRequestChannelListenerInjectable:()=>g.K,listeningOfChannelsInjectionToken:()=>u.listeningOfChannelsInjectionToken,messageChannelListenerInjectionToken:()=>c.k,messagingFeature:()=>n.w,requestChannelListenerInjectionToken:()=>g.C,requestFromChannelInjectionToken:()=>o.H,sendMessageToChannelInjectionToken:()=>a.v,testUtils:()=>e});var e={};t.r(e),t.d(e,{messagingFeatureForUnitTesting:()=>h.z});var n=t(417);const i=e=>({id:e}),r=e=>({id:e});var o=t(323),a=t(778),c=t(588),l=t(470),d=t(160),u=t(275),g=t(928),h=t(980)})(),module.exports=s})(); \ No newline at end of file diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/feature.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/feature.d.ts new file mode 100644 index 0000000000..a1c91ccb60 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/feature.d.ts @@ -0,0 +1 @@ +export declare const messagingFeature: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/index.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/index.d.ts new file mode 100644 index 0000000000..476af6e6a3 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/index.d.ts @@ -0,0 +1,18 @@ +export { messagingFeature } from "./feature"; +export { getRequestChannel } from "./request/get-request-channel"; +export { getMessageChannel } from "./message/get-message-channel"; +export { requestFromChannelInjectionToken } from "./request/request-from-channel-injection-token"; +export { sendMessageToChannelInjectionToken } from "./message/message-to-channel-injection-token"; +export type { SendMessageToChannel } from "./message/message-to-channel-injection-token"; +export type { GetMessageChannelListenerInfo, MessageChannel, MessageChannelHandler, MessageChannelListener, } from "./message/message-channel-listener-injection-token"; +export { messageChannelListenerInjectionToken, getMessageChannelListenerInjectable, } from "./message/message-channel-listener-injection-token"; +export type { RequestChannel, RequestChannelHandler, } from "./request/request-channel-listener-injection-token"; +export type { RequestFromChannel, ChannelRequester, } from "./request/request-from-channel-injection-token"; +export type { EnlistMessageChannelListener } from "./message/enlist-message-channel-listener-injection-token"; +export { enlistMessageChannelListenerInjectionToken } from "./message/enlist-message-channel-listener-injection-token"; +export type { EnlistRequestChannelListener } from "./request/enlist-request-channel-listener-injection-token"; +export { enlistRequestChannelListenerInjectionToken } from "./request/enlist-request-channel-listener-injection-token"; +export type { ListeningOfChannels } from "./listening-of-channels/listening-of-channels.injectable"; +export { listeningOfChannelsInjectionToken } from "./listening-of-channels/listening-of-channels.injectable"; +export type { GetRequestChannelListenerInjectableInfo, RequestChannelListener, } from "./request/request-channel-listener-injection-token"; +export { getRequestChannelListenerInjectable, requestChannelListenerInjectionToken, } from "./request/request-channel-listener-injection-token"; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/listening-of-channels/listening-of-channels.injectable.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/listening-of-channels/listening-of-channels.injectable.d.ts new file mode 100644 index 0000000000..49d7a6688e --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/listening-of-channels/listening-of-channels.injectable.d.ts @@ -0,0 +1,5 @@ +import { StartableStoppable } from "@k8slens/startable-stoppable"; +export type ListeningOfChannels = StartableStoppable; +export declare const listeningOfChannelsInjectionToken: import("@ogre-tools/injectable").InjectionToken; +declare const listeningOfChannelsInjectable: import("@ogre-tools/injectable").Injectable; +export default listeningOfChannelsInjectable; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/enlist-message-channel-listener-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/enlist-message-channel-listener-injection-token.d.ts new file mode 100644 index 0000000000..4e2306ec13 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/enlist-message-channel-listener-injection-token.d.ts @@ -0,0 +1,4 @@ +import type { Disposer } from "@k8slens/utilities"; +import type { MessageChannel, MessageChannelListener } from "./message-channel-listener-injection-token"; +export type EnlistMessageChannelListener = (listener: MessageChannelListener>) => Disposer; +export declare const enlistMessageChannelListenerInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/get-message-channel.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/get-message-channel.d.ts new file mode 100644 index 0000000000..4a8a920d63 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/get-message-channel.d.ts @@ -0,0 +1,2 @@ +import type { MessageChannel } from "./message-channel-listener-injection-token"; +export declare const getMessageChannel: (id: string) => MessageChannel; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-channel-listener-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-channel-listener-injection-token.d.ts new file mode 100644 index 0000000000..5cfbd8715b --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-channel-listener-injection-token.d.ts @@ -0,0 +1,23 @@ +import type { DiContainerForInjection } from "@ogre-tools/injectable"; +export interface MessageChannel { + id: string; + _messageSignature?: Message; +} +export type ExtraData = { + processId: number; + frameId: number; +}; +export type MessageChannelHandler = Channel extends MessageChannel ? (message: Message, data?: ExtraData) => void : never; +export interface MessageChannelListener { + id: string; + channel: Channel; + handler: MessageChannelHandler; +} +export declare const messageChannelListenerInjectionToken: import("@ogre-tools/injectable").InjectionToken>, void>; +export interface GetMessageChannelListenerInfo, Message> { + id: string; + channel: Channel; + getHandler: (di: DiContainerForInjection) => MessageChannelHandler; + causesSideEffects?: boolean; +} +export declare const getMessageChannelListenerInjectable: , Message>(info: GetMessageChannelListenerInfo) => import("@ogre-tools/injectable").Injectable, MessageChannelListener>, void>; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-to-channel-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-to-channel-injection-token.d.ts new file mode 100644 index 0000000000..d349da3f01 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/message/message-to-channel-injection-token.d.ts @@ -0,0 +1,6 @@ +import type { MessageChannel } from "./message-channel-listener-injection-token"; +export interface SendMessageToChannel { + (channel: MessageChannel): void; + (channel: MessageChannel, message: Message): void; +} +export declare const sendMessageToChannelInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/enlist-request-channel-listener-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/enlist-request-channel-listener-injection-token.d.ts new file mode 100644 index 0000000000..358fd15891 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/enlist-request-channel-listener-injection-token.d.ts @@ -0,0 +1,4 @@ +import type { Disposer } from "@k8slens/utilities/index"; +import type { RequestChannel, RequestChannelListener } from "./request-channel-listener-injection-token"; +export type EnlistRequestChannelListener = (listener: RequestChannelListener>) => Disposer; +export declare const enlistRequestChannelListenerInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/get-request-channel.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/get-request-channel.d.ts new file mode 100644 index 0000000000..9128ff1e68 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/get-request-channel.d.ts @@ -0,0 +1,2 @@ +import type { RequestChannel } from "./request-channel-listener-injection-token"; +export declare const getRequestChannel: (id: string) => RequestChannel; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-channel-listener-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-channel-listener-injection-token.d.ts new file mode 100644 index 0000000000..8315a705e4 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-channel-listener-injection-token.d.ts @@ -0,0 +1,23 @@ +import type { DiContainerForInjection } from "@ogre-tools/injectable"; +export interface RequestChannel { + id: string; + _requestSignature?: Request; + _responseSignature?: Response; +} +export type RequestChannelHandler = Channel extends RequestChannel ? (req: Request) => Promise | Response : never; +export interface RequestChannelListener { + id: string; + channel: Channel; + handler: RequestChannelHandler; +} +export declare const requestChannelListenerInjectionToken: import("@ogre-tools/injectable").InjectionToken>, void>; +export interface GetRequestChannelListenerInjectableInfo, Request, Response> { + id: string; + channel: Channel; + getHandler: (di: DiContainerForInjection) => RequestChannelHandler; +} +export declare const getRequestChannelListenerInjectable: , Request_1, Response_1>(info: GetRequestChannelListenerInjectableInfo) => import("@ogre-tools/injectable").Injectable<{ + id: string; + channel: Channel; + handler: RequestChannelHandler; +}, RequestChannelListener>, void>; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-from-channel-injection-token.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-from-channel-injection-token.d.ts new file mode 100644 index 0000000000..168cbd986a --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/actual/request/request-from-channel-injection-token.d.ts @@ -0,0 +1,7 @@ +import type { RequestChannel } from "./request-channel-listener-injection-token"; +export interface RequestFromChannel { + (channel: RequestChannel, request: Request): Promise; + (channel: RequestChannel): Promise; +} +export type ChannelRequester = Channel extends RequestChannel ? (req: Request) => Promise> : never; +export declare const requestFromChannelInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/feature.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/feature.d.ts new file mode 100644 index 0000000000..f55f3f7002 --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/feature.d.ts @@ -0,0 +1 @@ +export declare const messagingFeatureForUnitTesting: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/index.d.ts b/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/index.d.ts new file mode 100644 index 0000000000..e0ee8eb25b --- /dev/null +++ b/packages/technical-features/messaging/agnostic/dist/src/features/unit-testing/index.d.ts @@ -0,0 +1 @@ +export { messagingFeatureForUnitTesting } from "./feature"; diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/base.css b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/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/packages/technical-features/messaging/computed-channel/coverage/lcov-report/block-navigation.js b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/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/packages/technical-features/messaging/computed-channel/coverage/lcov-report/favicon.png b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/index.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/index.html new file mode 100644 index 0000000000..f068a9a366 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 208/208 +
+ + +
+ 100% + Branches + 31/31 +
+ + +
+ 100% + Functions + 11/11 +
+ + +
+ 100% + Lines + 208/208 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%18/18100%3/3100%3/3100%18/18
src/computed-channel +
+
100%190/190100%28/28100%8/8100%190/190
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/prettify.css b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/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/packages/technical-features/messaging/computed-channel/coverage/lcov-report/prettify.js b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/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/packages/technical-features/messaging/computed-channel/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/sorter.js b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/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/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel-administration-channel.injectable.ts.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel-administration-channel.injectable.ts.html new file mode 100644 index 0000000000..f6cf88ba64 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel-administration-channel.injectable.ts.html @@ -0,0 +1,259 @@ + + + + + + Code coverage report for src/computed-channel/computed-channel-administration-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/computed-channel computed-channel-administration-channel.injectable.ts

+
+ +
+ 100% + Statements + 58/58 +
+ + +
+ 100% + Branches + 9/9 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 58/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 +591x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +90x +90x +90x +90x +90x +65x +48x +48x +48x +48x +48x +1x +1x +47x +47x +47x +47x +53x +53x +53x +53x +53x +53x +47x +47x +47x +47x +47x +47x +47x +65x +17x +17x +17x +17x +65x +90x +1x + 
import { reaction } from "mobx";
+import { getMessageChannelListenerInjectable } from "@k8slens/messaging";
+import { sendMessageToChannelInjectionToken } from "@k8slens/messaging";
+import { computedChannelObserverInjectionToken } from "./computed-channel.injectable";
+import { getMessageChannel } from "@k8slens/messaging";
+ 
+export type ComputedChannelAdminMessage = {
+  channelId: string;
+  status: "became-observed" | "became-unobserved";
+};
+ 
+export const computedChannelAdministrationChannel = getMessageChannel<ComputedChannelAdminMessage>(
+  "computed-channel-administration-channel",
+);
+ 
+export const computedChannelAdministrationListenerInjectable = getMessageChannelListenerInjectable({
+  id: "computed-channel-administration",
+  channel: computedChannelAdministrationChannel,
+ 
+  getHandler: (di) => {
+    const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken);
+ 
+    const disposersByChannelId = new Map<string, () => void>();
+ 
+    return (message) => {
+      if (message.status === "became-observed") {
+        const result = di
+          .injectMany(computedChannelObserverInjectionToken)
+          .find((channelObserver) => channelObserver.channel.id === message.channelId);
+ 
+        if (result === undefined) {
+          return;
+        }
+ 
+        const disposer = reaction(
+          () => result.observer.get(),
+          (observed) =>
+            sendMessageToChannel(
+              {
+                id: message.channelId,
+              },
+ 
+              observed,
+            ),
+          {
+            fireImmediately: true,
+          },
+        );
+ 
+        disposersByChannelId.set(message.channelId, disposer);
+      } else {
+        const disposer = disposersByChannelId.get(message.channelId);
+ 
+        disposer?.();
+      }
+    };
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel.injectable.ts.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel.injectable.ts.html new file mode 100644 index 0000000000..caedd10f8c --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/computed-channel.injectable.ts.html @@ -0,0 +1,355 @@ + + + + + + Code coverage report for src/computed-channel/computed-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/computed-channel computed-channel.injectable.ts

+
+ +
+ 100% + Statements + 90/90 +
+ + +
+ 100% + Branches + 11/11 +
+ + +
+ 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 +911x +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 +45x +45x +45x +47x +47x +47x +47x +47x +47x +47x +47x +47x +50x +50x +50x +50x +47x +47x +47x +47x +47x +47x +47x +51x +51x +51x +51x +51x +51x +51x +51x +51x +47x +47x +18x +18x +18x +18x +18x +18x +18x +18x +18x +47x +47x +47x +45x +1x +1x +1x +1x +1x + 
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+ 
+import {
+  computed,
+  IComputedValue,
+  observable,
+  onBecomeObserved,
+  onBecomeUnobserved,
+  runInAction,
+} from "mobx";
+ 
+import type { MessageChannel } from "@k8slens/messaging";
+import { getMessageChannelListenerInjectable } from "@k8slens/messaging";
+import { sendMessageToChannelInjectionToken } from "@k8slens/messaging";
+import { computedChannelAdministrationChannel } from "./computed-channel-administration-channel.injectable";
+ 
+export type ComputedChannelFactory = <T>(
+  channel: MessageChannel<T>,
+  pendingValue: T,
+) => IComputedValue<T>;
+ 
+export const computedChannelInjectionToken = getInjectionToken<ComputedChannelFactory>({
+  id: "computed-channel-injection-token",
+});
+ 
+export type ChannelObserver<T> = {
+  channel: MessageChannel<T>;
+  observer: IComputedValue<T>;
+};
+ 
+export const computedChannelObserverInjectionToken = getInjectionToken<ChannelObserver<unknown>>({
+  id: "computed-channel-observer",
+});
+ 
+const computedChannelInjectable = getInjectable({
+  id: "computed-channel",
+ 
+  instantiate: (di) => {
+    const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken);
+ 
+    return ((channel, pendingValue) => {
+      const observableValue = observable.box(pendingValue);
+ 
+      const computedValue = computed(() => observableValue.get());
+ 
+      const valueReceiverInjectable = getMessageChannelListenerInjectable({
+        id: `computed-channel-value-receiver-for-${channel.id}`,
+        channel,
+ 
+        getHandler: () => (message) => {
+          runInAction(() => {
+            observableValue.set(message);
+          });
+        },
+      });
+ 
+      runInAction(() => {
+        di.register(valueReceiverInjectable);
+      });
+ 
+      onBecomeObserved(computedValue, () => {
+        runInAction(() => {
+          observableValue.set(pendingValue);
+        });
+ 
+        sendMessageToChannel(computedChannelAdministrationChannel, {
+          channelId: channel.id,
+          status: "became-observed",
+        });
+      });
+ 
+      onBecomeUnobserved(computedValue, () => {
+        runInAction(() => {
+          observableValue.set(pendingValue);
+        });
+ 
+        sendMessageToChannel(computedChannelAdministrationChannel, {
+          channelId: channel.id,
+          status: "became-unobserved",
+        });
+      });
+ 
+      return computedValue;
+    }) as ComputedChannelFactory;
+  },
+ 
+  injectionToken: computedChannelInjectionToken,
+});
+ 
+export default computedChannelInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/duplicate-channel-observer-guard.injectable.ts.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/duplicate-channel-observer-guard.injectable.ts.html new file mode 100644 index 0000000000..ddc212b5f1 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/duplicate-channel-observer-guard.injectable.ts.html @@ -0,0 +1,211 @@ + + + + + + Code coverage report for src/computed-channel/duplicate-channel-observer-guard.injectable.ts + + + + + + + + + +
+
+

All files / src/computed-channel duplicate-channel-observer-guard.injectable.ts

+
+ +
+ 100% + Statements + 42/42 +
+ + +
+ 100% + Branches + 8/8 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 42/42 +
+ + +
+

+ 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 +431x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +90x +90x +90x +90x +90x +90x +90x +47x +47x +47x +47x +47x +47x +47x +47x +47x +2x +2x +2x +2x +2x +2x +47x +90x +90x +90x +90x +1x +1x +1x + 
import { onLoadOfApplicationInjectionToken } from "@k8slens/application";
+import { pipeline } from "@ogre-tools/fp";
+import { getInjectable } from "@ogre-tools/injectable";
+import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
+import { filter, groupBy, nth, map, toPairs } from "lodash/fp";
+import { reaction } from "mobx";
+import { computedChannelObserverInjectionToken } from "./computed-channel.injectable";
+ 
+export const duplicateChannelObserverGuardInjectable = getInjectable({
+  id: "duplicate-channel-observer-guard",
+ 
+  instantiate: (di) => {
+    const computedInjectMany = di.inject(computedInjectManyInjectable);
+ 
+    return {
+      run: () => {
+        reaction(
+          () => computedInjectMany(computedChannelObserverInjectionToken).get(),
+          (observers) => {
+            const duplicateObserverChannelIds = pipeline(
+              observers,
+              groupBy((observer) => observer.channel.id),
+              toPairs,
+              filter(([, channelObservers]) => channelObservers.length > 1),
+              map(nth(0)),
+            );
+ 
+            if (duplicateObserverChannelIds.length) {
+              throw new Error(
+                `Tried to register duplicate channel observer for channels "${duplicateObserverChannelIds.join(
+                  '", "',
+                )}"`,
+              );
+            }
+          },
+        );
+      },
+    };
+  },
+ 
+  injectionToken: onLoadOfApplicationInjectionToken,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/index.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/index.html new file mode 100644 index 0000000000..fb54a002e3 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/computed-channel/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for src/computed-channel + + + + + + + + + +
+
+

All files src/computed-channel

+
+ +
+ 100% + Statements + 190/190 +
+ + +
+ 100% + Branches + 28/28 +
+ + +
+ 100% + Functions + 8/8 +
+ + +
+ 100% + Lines + 190/190 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
computed-channel-administration-channel.injectable.ts +
+
100%58/58100%9/9100%3/3100%58/58
computed-channel.injectable.ts +
+
100%90/90100%11/11100%2/2100%90/90
duplicate-channel-observer-guard.injectable.ts +
+
100%42/42100%8/8100%3/3100%42/42
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..868dd05213 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +1x +1x +90x +90x +90x +90x +90x +90x +90x +1x + 
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { getFeature } from "@k8slens/feature-core";
+import { messagingFeature } from "@k8slens/messaging";
+ 
+export const computedChannelFeature = getFeature({
+  id: "computed-channel",
+ 
+  dependencies: [messagingFeature],
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/index.html b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..27f47e7c9f --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov-report/src/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/coverage/lcov.info b/packages/technical-features/messaging/computed-channel/coverage/lcov.info new file mode 100644 index 0000000000..40a44c4caa --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/coverage/lcov.info @@ -0,0 +1,297 @@ +TN: +SF:src/feature.ts +FN:5,get +FN:10,register +FN:15,getRequireContexts +FNF:3 +FNH:3 +FNDA:90,get +FNDA:90,register +FNDA:90,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,90 +DA:12,90 +DA:13,90 +DA:14,90 +DA:15,90 +DA:16,90 +DA:17,90 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,90 +BRDA:10,1,0,90 +BRDA:15,2,0,90 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/computed-channel/computed-channel-administration-channel.injectable.ts +FN:20,getHandler +FN:36,sendMessageToChannel.id +FN:37,disposer.fireImmediately +FNF:3 +FNH:3 +FNDA:90,getHandler +FNDA:53,sendMessageToChannel.id +FNDA:53,disposer.fireImmediately +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,90 +DA:22,90 +DA:23,90 +DA:24,90 +DA:25,90 +DA:26,65 +DA:27,48 +DA:28,48 +DA:29,48 +DA:30,48 +DA:31,48 +DA:32,1 +DA:33,1 +DA:34,47 +DA:35,47 +DA:36,47 +DA:37,47 +DA:38,53 +DA:39,53 +DA:40,53 +DA:41,53 +DA:42,53 +DA:43,53 +DA:44,47 +DA:45,47 +DA:46,47 +DA:47,47 +DA:48,47 +DA:49,47 +DA:50,47 +DA:51,65 +DA:52,17 +DA:53,17 +DA:54,17 +DA:55,17 +DA:56,65 +DA:57,90 +DA:58,1 +LF:58 +LH:58 +BRDA:20,0,0,90 +BRDA:25,1,0,65 +BRDA:26,2,0,48 +BRDA:31,3,0,1 +BRDA:34,4,0,47 +BRDA:51,5,0,17 +BRDA:29,6,0,49 +BRDA:36,7,0,53 +BRDA:37,8,0,53 +BRF:9 +BRH:9 +end_of_record +TN: +SF:src/computed-channel/computed-channel.injectable.ts +FN:38,instantiate +FN:50,getHandler +FNF:2 +FNH:2 +FNDA:45,instantiate +FNDA:47,getHandler +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,45 +DA:40,45 +DA:41,45 +DA:42,47 +DA:43,47 +DA:44,47 +DA:45,47 +DA:46,47 +DA:47,47 +DA:48,47 +DA:49,47 +DA:50,47 +DA:51,50 +DA:52,50 +DA:53,50 +DA:54,50 +DA:55,47 +DA:56,47 +DA:57,47 +DA:58,47 +DA:59,47 +DA:60,47 +DA:61,47 +DA:62,51 +DA:63,51 +DA:64,51 +DA:65,51 +DA:66,51 +DA:67,51 +DA:68,51 +DA:69,51 +DA:70,51 +DA:71,47 +DA:72,47 +DA:73,18 +DA:74,18 +DA:75,18 +DA:76,18 +DA:77,18 +DA:78,18 +DA:79,18 +DA:80,18 +DA:81,18 +DA:82,47 +DA:83,47 +DA:84,47 +DA:85,45 +DA:86,1 +DA:87,1 +DA:88,1 +DA:89,1 +DA:90,1 +LF:90 +LH:90 +BRDA:38,0,0,45 +BRDA:41,1,0,47 +BRDA:44,2,0,101 +BRDA:50,3,0,47 +BRDA:50,4,0,50 +BRDA:51,5,0,50 +BRDA:57,6,0,47 +BRDA:61,7,0,51 +BRDA:62,8,0,51 +BRDA:72,9,0,18 +BRDA:73,10,0,18 +BRF:11 +BRH:11 +end_of_record +TN: +SF:src/computed-channel/duplicate-channel-observer-guard.injectable.ts +FN:9,get +FN:12,instantiate +FN:16,run +FNF:3 +FNH:3 +FNDA:90,get +FNDA:90,instantiate +FNDA:90,run +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,90 +DA:14,90 +DA:15,90 +DA:16,90 +DA:17,90 +DA:18,90 +DA:19,90 +DA:20,47 +DA:21,47 +DA:22,47 +DA:23,47 +DA:24,47 +DA:25,47 +DA:26,47 +DA:27,47 +DA:28,47 +DA:29,2 +DA:30,2 +DA:31,2 +DA:32,2 +DA:33,2 +DA:34,2 +DA:35,47 +DA:36,90 +DA:37,90 +DA:38,90 +DA:39,90 +DA:40,1 +DA:41,1 +DA:42,1 +LF:42 +LH:42 +BRDA:9,0,0,90 +BRDA:12,1,0,90 +BRDA:16,2,0,90 +BRDA:18,3,0,137 +BRDA:19,4,0,47 +BRDA:28,5,0,2 +BRDA:22,6,0,51 +BRDA:24,7,0,49 +BRF:8 +BRH:8 +end_of_record diff --git a/packages/technical-features/messaging/computed-channel/dist/index.d.ts b/packages/technical-features/messaging/computed-channel/dist/index.d.ts new file mode 100644 index 0000000000..cb405c6d66 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/dist/index.d.ts @@ -0,0 +1,2 @@ +export { computedChannelInjectionToken, computedChannelObserverInjectionToken, } from "./src/computed-channel/computed-channel.injectable"; +export type { ChannelObserver, ComputedChannelFactory, } from "./src/computed-channel/computed-channel.injectable"; diff --git a/packages/technical-features/messaging/computed-channel/dist/index.js b/packages/technical-features/messaging/computed-channel/dist/index.js new file mode 100644 index 0000000000..ca0981bf7c --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/dist/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(n,t)=>{for(var o in t)e.o(t,o)&&!e.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:t[o]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{computedChannelInjectionToken:()=>a,computedChannelObserverInjectionToken:()=>i});const t=require("@ogre-tools/injectable"),o=require("mobx"),c=require("@k8slens/messaging"),r=(0,c.getMessageChannel)("computed-channel-administration-channel"),a=((0,c.getMessageChannelListenerInjectable)({id:"computed-channel-administration",channel:r,getHandler:e=>{const n=e.inject(c.sendMessageToChannelInjectionToken),t=new Map;return c=>{if("became-observed"===c.status){const r=e.injectMany(i).find((e=>e.channel.id===c.channelId));if(void 0===r)return;const a=(0,o.reaction)((()=>r.observer.get()),(e=>n({id:c.channelId},e)),{fireImmediately:!0});t.set(c.channelId,a)}else{const e=t.get(c.channelId);null==e||e()}}}}),(0,t.getInjectionToken)({id:"computed-channel-injection-token"})),i=(0,t.getInjectionToken)({id:"computed-channel-observer"});(0,t.getInjectable)({id:"computed-channel",instantiate:e=>{const n=e.inject(c.sendMessageToChannelInjectionToken);return(t,a)=>{const i=o.observable.box(a),s=(0,o.computed)((()=>i.get())),d=(0,c.getMessageChannelListenerInjectable)({id:`computed-channel-value-receiver-for-${t.id}`,channel:t,getHandler:()=>e=>{(0,o.runInAction)((()=>{i.set(e)}))}});return(0,o.runInAction)((()=>{e.register(d)})),(0,o.onBecomeObserved)(s,(()=>{(0,o.runInAction)((()=>{i.set(a)})),n(r,{channelId:t.id,status:"became-observed"})})),(0,o.onBecomeUnobserved)(s,(()=>{(0,o.runInAction)((()=>{i.set(a)})),n(r,{channelId:t.id,status:"became-unobserved"})})),s}},injectionToken:a}),module.exports=n})(); \ No newline at end of file diff --git a/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel-administration-channel.injectable.d.ts b/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel-administration-channel.injectable.d.ts new file mode 100644 index 0000000000..ce47f357c8 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel-administration-channel.injectable.d.ts @@ -0,0 +1,6 @@ +export type ComputedChannelAdminMessage = { + channelId: string; + status: "became-observed" | "became-unobserved"; +}; +export declare const computedChannelAdministrationChannel: import("@k8slens/messaging").MessageChannel; +export declare const computedChannelAdministrationListenerInjectable: import("@ogre-tools/injectable").Injectable>, import("@k8slens/messaging").MessageChannelListener>, void>; diff --git a/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel.injectable.d.ts b/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel.injectable.d.ts new file mode 100644 index 0000000000..01d7b2a0a4 --- /dev/null +++ b/packages/technical-features/messaging/computed-channel/dist/src/computed-channel/computed-channel.injectable.d.ts @@ -0,0 +1,11 @@ +import { IComputedValue } from "mobx"; +import type { MessageChannel } from "@k8slens/messaging"; +export type ComputedChannelFactory = (channel: MessageChannel, pendingValue: T) => IComputedValue; +export declare const computedChannelInjectionToken: import("@ogre-tools/injectable").InjectionToken; +export type ChannelObserver = { + channel: MessageChannel; + observer: IComputedValue; +}; +export declare const computedChannelObserverInjectionToken: import("@ogre-tools/injectable").InjectionToken, void>; +declare const computedChannelInjectable: import("@ogre-tools/injectable").Injectable; +export default computedChannelInjectable; diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/base.css b/packages/technical-features/messaging/electron/main/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/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/packages/technical-features/messaging/electron/main/coverage/lcov-report/block-navigation.js b/packages/technical-features/messaging/electron/main/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/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/packages/technical-features/messaging/electron/main/coverage/lcov-report/favicon.png b/packages/technical-features/messaging/electron/main/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/messaging/electron/main/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/index.html new file mode 100644 index 0000000000..7d074b03c2 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 199/199 +
+ + +
+ 100% + Branches + 34/34 +
+ + +
+ 100% + Functions + 25/25 +
+ + +
+ 100% + Lines + 199/199 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%18/18100%3/3100%3/3100%18/18
src/channel-listeners +
+
100%59/59100%10/10100%6/6100%59/59
src/ipc-main +
+
100%10/10100%2/2100%2/2100%10/10
src/request-from-channel +
+
100%23/23100%1/1100%2/2100%23/23
src/send-message-to-channel +
+
100%89/89100%18/18100%12/12100%89/89
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/prettify.css b/packages/technical-features/messaging/electron/main/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/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/packages/technical-features/messaging/electron/main/coverage/lcov-report/prettify.js b/packages/technical-features/messaging/electron/main/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/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/packages/technical-features/messaging/electron/main/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/messaging/electron/main/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/messaging/electron/main/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/sorter.js b/packages/technical-features/messaging/electron/main/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/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/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-message-channel-listener.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-message-channel-listener.injectable.ts.html new file mode 100644 index 0000000000..84a6b33808 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-message-channel-listener.injectable.ts.html @@ -0,0 +1,169 @@ + + + + + + Code coverage report for src/channel-listeners/enlist-message-channel-listener.injectable.ts + + + + + + + + + +
+
+

All files / src/channel-listeners enlist-message-channel-listener.injectable.ts

+
+ +
+ 100% + Statements + 28/28 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 28/28 +
+ + +
+

+ 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 +291x +1x +1x +1x +1x +1x +1x +1x +1x +8x +8x +8x +8x +5x +5x +8x +8x +8x +8x +1x +1x +8x +8x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import type { IpcMainEvent } from "electron";
+import ipcMainInjectable from "../ipc-main/ipc-main.injectable";
+import { enlistMessageChannelListenerInjectionToken } from "@k8slens/messaging";
+ 
+const enlistMessageChannelListenerInjectable = getInjectable({
+  id: "enlist-message-channel-listener",
+ 
+  instantiate: (di) => {
+    const ipcMain = di.inject(ipcMainInjectable);
+ 
+    return ({ channel, handler }) => {
+      const nativeOnCallback = (nativeEvent: IpcMainEvent, message: any) => {
+        handler(message, { frameId: nativeEvent.frameId, processId: nativeEvent.processId });
+      };
+ 
+      ipcMain.on(channel.id, nativeOnCallback);
+ 
+      return () => {
+        ipcMain.off(channel.id, nativeOnCallback);
+      };
+    };
+  },
+ 
+  injectionToken: enlistMessageChannelListenerInjectionToken,
+});
+ 
+export default enlistMessageChannelListenerInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-request-channel-listener.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-request-channel-listener.injectable.ts.html new file mode 100644 index 0000000000..b3298041d3 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/enlist-request-channel-listener.injectable.ts.html @@ -0,0 +1,178 @@ + + + + + + Code coverage report for src/channel-listeners/enlist-request-channel-listener.injectable.ts + + + + + + + + + +
+
+

All files / src/channel-listeners enlist-request-channel-listener.injectable.ts

+
+ +
+ 100% + Statements + 31/31 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 31/31 +
+ + +
+

+ 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 +321x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +13x +13x +13x +13x +13x +13x +13x +13x +1x +1x +13x +13x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import type { IpcMainInvokeEvent } from "electron";
+import ipcMainInjectable from "../ipc-main/ipc-main.injectable";
+import type { RequestChannel, RequestChannelListener } from "@k8slens/messaging";
+import { enlistRequestChannelListenerInjectionToken } from "@k8slens/messaging";
+ 
+export type EnlistRequestChannelListener = <TChannel extends RequestChannel<unknown, unknown>>(
+  listener: RequestChannelListener<TChannel>,
+) => () => void;
+ 
+const enlistRequestChannelListenerInjectable = getInjectable({
+  id: "enlist-request-channel-listener-for-main",
+ 
+  instantiate: (di): EnlistRequestChannelListener => {
+    const ipcMain = di.inject(ipcMainInjectable);
+ 
+    return ({ channel, handler }) => {
+      const nativeHandleCallback = (_: IpcMainInvokeEvent, request: unknown) => handler(request);
+ 
+      ipcMain.handle(channel.id, nativeHandleCallback);
+ 
+      return () => {
+        ipcMain.off(channel.id, nativeHandleCallback);
+      };
+    };
+  },
+ 
+  injectionToken: enlistRequestChannelListenerInjectionToken,
+});
+ 
+export default enlistRequestChannelListenerInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/index.html new file mode 100644 index 0000000000..3a2edd920f --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/channel-listeners/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/channel-listeners + + + + + + + + + +
+
+

All files src/channel-listeners

+
+ +
+ 100% + Statements + 59/59 +
+ + +
+ 100% + Branches + 10/10 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 59/59 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
enlist-message-channel-listener.injectable.ts +
+
100%28/28100%5/5100%3/3100%28/28
enlist-request-channel-listener.injectable.ts +
+
100%31/31100%5/5100%3/3100%31/31
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..c54dd57121 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +27x +27x +27x +27x +27x +27x +27x +1x +1x +1x + 
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { getFeature } from "@k8slens/feature-core";
+import { messagingFeature } from "@k8slens/messaging";
+ 
+export const messagingFeatureForMain = getFeature({
+  id: "messaging-for-main",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+ 
+  dependencies: [messagingFeature],
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..199c48ddfe --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/index.html new file mode 100644 index 0000000000..15297c3d57 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/ipc-main + + + + + + + + + +
+
+

All files src/ipc-main

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ipc-main.injectable.ts +
+
100%10/10100%2/2100%2/2100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/ipc-main.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/ipc-main.injectable.ts.html new file mode 100644 index 0000000000..b383e01cf8 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/ipc-main/ipc-main.injectable.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/ipc-main/ipc-main.injectable.ts + + + + + + + + + +
+
+

All files / src/ipc-main ipc-main.injectable.ts

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { ipcMain } from "electron";
+ 
+const ipcMainInjectable = getInjectable({
+  id: "ipc-main",
+  instantiate: () => ipcMain,
+  causesSideEffects: true,
+});
+ 
+export default ipcMainInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/index.html new file mode 100644 index 0000000000..a08306c901 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/request-from-channel + + + + + + + + + +
+
+

All files src/request-from-channel

+
+ +
+ 100% + Statements + 23/23 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 23/23 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
request-from-channel.injectable.ts +
+
100%23/23100%1/1100%2/2100%23/23
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/request-from-channel.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/request-from-channel.injectable.ts.html new file mode 100644 index 0000000000..acfa8411a3 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/request-from-channel/request-from-channel.injectable.ts.html @@ -0,0 +1,154 @@ + + + + + + Code coverage report for src/request-from-channel/request-from-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/request-from-channel request-from-channel.injectable.ts

+
+ +
+ 100% + Statements + 23/23 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 23/23 +
+ + +
+

+ 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 +241x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
/* c8 ignore start */
+import { getInjectable } from "@ogre-tools/injectable";
+import {
+  RequestChannel,
+  RequestFromChannel,
+  requestFromChannelInjectionToken,
+} from "@k8slens/messaging";
+ 
+const requestFromChannelInjectable = getInjectable({
+  id: "request-from-channel",
+ 
+  instantiate: () =>
+    ((channel: RequestChannel<any, any>) => {
+      throw new Error(
+        `Tried to request from channel "${channel.id}" but requesting in "main" it's not supported yet`,
+      );
+    }) as unknown as RequestFromChannel,
+ 
+  injectionToken: requestFromChannelInjectionToken,
+});
+ 
+export default requestFromChannelInjectable;
+/* c8 ignore stop */
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/allow-communication-listener.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/allow-communication-listener.injectable.ts.html new file mode 100644 index 0000000000..81b152b8ba --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/allow-communication-listener.injectable.ts.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for src/send-message-to-channel/allow-communication-listener.injectable.ts + + + + + + + + + +
+
+

All files / src/send-message-to-channel allow-communication-listener.injectable.ts

+
+ +
+ 100% + Statements + 21/21 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 21/21 +
+ + +
+

+ 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 +221x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +4x +4x +2x +1x +1x +1x + 
import { getMessageChannel, getMessageChannelListenerInjectable } from "@k8slens/messaging";
+import frameIdsInjectable from "./frameIds.injectable";
+ 
+const frameCommunicationAdminChannel = getMessageChannel<undefined>(
+  "frame-communication-admin-channel",
+);
+ 
+const allowCommunicationListenerInjectable = getMessageChannelListenerInjectable({
+  id: "allow-communication",
+  channel: frameCommunicationAdminChannel,
+ 
+  getHandler: (di) => {
+    const frameIds = di.inject(frameIdsInjectable);
+ 
+    return (_, { frameId, processId }) => {
+      frameIds.add({ frameId, processId });
+    };
+  },
+});
+ 
+export default allowCommunicationListenerInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/frameIds.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/frameIds.injectable.ts.html new file mode 100644 index 0000000000..1de691189a --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/frameIds.injectable.ts.html @@ -0,0 +1,109 @@ + + + + + + Code coverage report for src/send-message-to-channel/frameIds.injectable.ts + + + + + + + + + +
+
+

All files / src/send-message-to-channel frameIds.injectable.ts

+
+ +
+ 100% + Statements + 8/8 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 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 + 
import { getInjectable } from "@ogre-tools/injectable";
+ 
+const frameIdsInjectable = getInjectable({
+  id: "frame-ids",
+  instantiate: () => new Set<{ frameId: number; processId: number }>(),
+});
+ 
+export default frameIdsInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/get-web-contents.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/get-web-contents.injectable.ts.html new file mode 100644 index 0000000000..c5edbea047 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/get-web-contents.injectable.ts.html @@ -0,0 +1,121 @@ + + + + + + Code coverage report for src/send-message-to-channel/get-web-contents.injectable.ts + + + + + + + + + +
+
+

All files / src/send-message-to-channel get-web-contents.injectable.ts

+
+ +
+ 100% + Statements + 12/12 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 12/12 +
+ + +
+

+ 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 +131x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
/* c8 ignore start */
+import { getInjectable } from "@ogre-tools/injectable";
+import { webContents } from "electron";
+ 
+const getWebContentsInjectable = getInjectable({
+  id: "web-contents",
+  instantiate: () => () => webContents.getAllWebContents(),
+  causesSideEffects: true,
+});
+ 
+export default getWebContentsInjectable;
+/* c8 ignore stop */
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/index.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/index.html new file mode 100644 index 0000000000..ca6178afc6 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for src/send-message-to-channel + + + + + + + + + +
+
+

All files src/send-message-to-channel

+
+ +
+ 100% + Statements + 89/89 +
+ + +
+ 100% + Branches + 18/18 +
+ + +
+ 100% + Functions + 12/12 +
+ + +
+ 100% + Lines + 89/89 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
allow-communication-listener.injectable.ts +
+
100%21/21100%3/3100%2/2100%21/21
frameIds.injectable.ts +
+
100%8/8100%2/2100%2/2100%8/8
get-web-contents.injectable.ts +
+
100%12/12100%1/1100%2/2100%12/12
send-message-to-channel.injectable.ts +
+
100%48/48100%12/12100%6/6100%48/48
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/send-message-to-channel.injectable.ts.html b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/send-message-to-channel.injectable.ts.html new file mode 100644 index 0000000000..312d4148e6 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov-report/src/send-message-to-channel/send-message-to-channel.injectable.ts.html @@ -0,0 +1,229 @@ + + + + + + Code coverage report for src/send-message-to-channel/send-message-to-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/send-message-to-channel send-message-to-channel.injectable.ts

+
+ +
+ 100% + Statements + 48/48 +
+ + +
+ 100% + Branches + 12/12 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 48/48 +
+ + +
+

+ 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 +491x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +5x +5x +1x +1x +1x +1x +1x +5x +5x +5x +5x +5x +5x +5x +5x +5x +5x +6x +6x +6x +8x +8x +6x +5x +5x +14x +14x +5x +5x +5x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { pipeline } from "@ogre-tools/fp";
+import { SendMessageToChannel, sendMessageToChannelInjectionToken } from "@k8slens/messaging";
+import getWebContentsInjectable from "./get-web-contents.injectable";
+import { flatMap, reject } from "lodash/fp";
+import type { WebContents } from "electron";
+import frameIdsInjectable from "./frameIds.injectable";
+ 
+const isDestroyed = (webContent: WebContents) => webContent.isDestroyed();
+const isCrashed = (webContent: WebContents) => webContent.isCrashed();
+ 
+const forEach =
+  <T>(predicate: (item: T) => void) =>
+  (items: T[]) =>
+    items.forEach(predicate);
+ 
+const sendMessageToChannelInjectable = getInjectable({
+  id: "send-message-to-channel",
+ 
+  instantiate: (di) => {
+    const getWebContents = di.inject(getWebContentsInjectable);
+    const frameIds = di.inject(frameIdsInjectable);
+ 
+    return ((channel, message) => {
+      pipeline(
+        getWebContents(),
+        reject(isDestroyed),
+        reject(isCrashed),
+ 
+        flatMap((webContent) => [
+          (channelId: string, ...args: any[]) => webContent.send(channelId, ...args),
+ 
+          ...[...frameIds].map(({ frameId, processId }) => (channelId: string, ...args: any[]) => {
+            webContent.sendToFrame([frameId, processId], channelId, ...args);
+          }),
+        ]),
+ 
+        forEach((send) => {
+          send(channel.id, message);
+        }),
+      );
+    }) as SendMessageToChannel;
+  },
+ 
+  injectionToken: sendMessageToChannelInjectionToken,
+});
+ 
+export default sendMessageToChannelInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/coverage/lcov.info b/packages/technical-features/messaging/electron/main/coverage/lcov.info new file mode 100644 index 0000000000..f470cddc98 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/coverage/lcov.info @@ -0,0 +1,364 @@ +TN: +SF:src/feature.ts +FN:5,get +FN:8,register +FN:13,getRequireContexts +FNF:3 +FNH:3 +FNDA:27,get +FNDA:27,register +FNDA:27,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,27 +DA:10,27 +DA:11,27 +DA:12,27 +DA:13,27 +DA:14,27 +DA:15,27 +DA:16,1 +DA:17,1 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,27 +BRDA:8,1,0,27 +BRDA:13,2,0,27 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/channel-listeners/enlist-message-channel-listener.injectable.ts +FN:28,get +FN:9,instantiate +FN:13,nativeOnCallback +FNF:3 +FNH:3 +FNDA:54,get +FNDA:8,instantiate +FNDA:5,nativeOnCallback +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,8 +DA:11,8 +DA:12,8 +DA:13,8 +DA:14,5 +DA:15,5 +DA:16,8 +DA:17,8 +DA:18,8 +DA:19,8 +DA:20,1 +DA:21,1 +DA:22,8 +DA:23,8 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +LF:28 +LH:28 +BRDA:28,0,0,54 +BRDA:9,1,0,8 +BRDA:12,2,0,8 +BRDA:13,3,0,5 +BRDA:19,4,0,1 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/channel-listeners/enlist-request-channel-listener.injectable.ts +FN:31,get +FN:14,instantiate +FN:18,nativeHandleCallback +FNF:3 +FNH:3 +FNDA:40,get +FNDA:13,instantiate +FNDA:10,nativeHandleCallback +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,13 +DA:16,13 +DA:17,13 +DA:18,13 +DA:19,13 +DA:20,13 +DA:21,13 +DA:22,13 +DA:23,1 +DA:24,1 +DA:25,13 +DA:26,13 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +LF:31 +LH:31 +BRDA:31,0,0,40 +BRDA:14,1,0,13 +BRDA:17,2,0,13 +BRDA:18,3,0,10 +BRDA:22,4,0,1 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/ipc-main/ipc-main.injectable.ts +FN:10,get +FN:6,instantiate +FNF:2 +FNH:2 +FNDA:70,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRDA:10,0,0,70 +BRDA:6,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/request-from-channel/request-from-channel.injectable.ts +FN:22,get +FN:12,instantiate +FNF:2 +FNH:2 +FNDA:1,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +LF:23 +LH:23 +BRDA:22,0,0,1 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/send-message-to-channel/allow-communication-listener.injectable.ts +FN:21,get +FN:12,getHandler +FNF:2 +FNH:2 +FNDA:29,get +FNDA:2,getHandler +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,2 +DA:14,2 +DA:15,2 +DA:16,4 +DA:17,4 +DA:18,2 +DA:19,1 +DA:20,1 +DA:21,1 +LF:21 +LH:21 +BRDA:21,0,0,29 +BRDA:12,1,0,2 +BRDA:15,2,0,4 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/send-message-to-channel/frameIds.injectable.ts +FN:8,get +FN:5,instantiate +FNF:2 +FNH:2 +FNDA:34,get +FNDA:5,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +LF:8 +LH:8 +BRDA:8,0,0,34 +BRDA:5,1,0,5 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/send-message-to-channel/get-web-contents.injectable.ts +FN:11,get +FN:7,instantiate +FNF:2 +FNH:2 +FNDA:1,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +LF:12 +LH:12 +BRDA:11,0,0,1 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/send-message-to-channel/send-message-to-channel.injectable.ts +FN:48,get +FN:9,isDestroyed +FN:10,isCrashed +FN:13,forEach +FN:20,instantiate +FN:31,map.frameId.frameId +FNF:6 +FNH:6 +FNDA:27,get +FNDA:8,isDestroyed +FNDA:7,isCrashed +FNDA:5,forEach +FNDA:5,instantiate +FNDA:6,map.frameId.frameId +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,5 +DA:15,5 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,5 +DA:22,5 +DA:23,5 +DA:24,5 +DA:25,5 +DA:26,5 +DA:27,5 +DA:28,5 +DA:29,5 +DA:30,5 +DA:31,6 +DA:32,6 +DA:33,6 +DA:34,8 +DA:35,8 +DA:36,6 +DA:37,5 +DA:38,5 +DA:39,14 +DA:40,14 +DA:41,5 +DA:42,5 +DA:43,5 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +LF:48 +LH:48 +BRDA:48,0,0,27 +BRDA:9,1,0,8 +BRDA:10,2,0,7 +BRDA:13,3,0,5 +BRDA:14,4,0,5 +BRDA:20,5,0,5 +BRDA:24,6,0,5 +BRDA:30,7,0,6 +BRDA:31,8,0,6 +BRDA:33,9,0,8 +BRDA:33,10,0,8 +BRDA:38,11,0,14 +BRF:12 +BRH:12 +end_of_record diff --git a/packages/technical-features/messaging/electron/main/dist/index.d.ts b/packages/technical-features/messaging/electron/main/dist/index.d.ts new file mode 100644 index 0000000000..1ff9afff0d --- /dev/null +++ b/packages/technical-features/messaging/electron/main/dist/index.d.ts @@ -0,0 +1 @@ +export { messagingFeatureForMain } from "./src/feature"; diff --git a/packages/technical-features/messaging/electron/main/dist/index.js b/packages/technical-features/messaging/electron/main/dist/index.js new file mode 100644 index 0000000000..522bce4952 --- /dev/null +++ b/packages/technical-features/messaging/electron/main/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={421:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905),s=n(73),a=n(49);const i=(0,r.getInjectable)({id:"enlist-message-channel-listener",instantiate:e=>{const t=e.inject(s.default);return({channel:e,handler:n})=>{const r=(e,t)=>{n(t,{frameId:e.frameId,processId:e.processId})};return t.on(e.id,r),()=>{t.off(e.id,r)}}},injectionToken:a.enlistMessageChannelListenerInjectionToken})},989:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905),s=n(73),a=n(49);const i=(0,r.getInjectable)({id:"enlist-request-channel-listener-for-main",instantiate:e=>{const t=e.inject(s.default);return({channel:e,handler:n})=>{const r=(e,t)=>n(t);return t.handle(e.id,r),()=>{t.off(e.id,r)}}},injectionToken:a.enlistRequestChannelListenerInjectionToken})},692:(e,t,n)=>{"use strict";n.d(t,{v:()=>i});const r=require("@ogre-tools/injectable-extension-for-auto-registration"),s=require("@k8slens/feature-core");var a=n(49);e=n.hmd(e);const i=(0,s.getFeature)({id:"messaging-for-main",register:t=>{(0,r.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[n(888)]})},dependencies:[a.messagingFeature]})},73:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(905),s=n(496);const a=(0,r.getInjectable)({id:"ipc-main",instantiate:()=>s.ipcMain,causesSideEffects:!0})},459:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(905),s=n(49);const a=(0,r.getInjectable)({id:"request-from-channel",instantiate:()=>e=>{throw new Error(`Tried to request from channel "${e.id}" but requesting in "main" it's not supported yet`)},injectionToken:s.requestFromChannelInjectionToken})},13:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(49),s=n(121);const a=(0,r.getMessageChannel)("frame-communication-admin-channel"),i=(0,r.getMessageChannelListenerInjectable)({id:"allow-communication",channel:a,getHandler:e=>{const t=e.inject(s.default);return(e,{frameId:n,processId:r})=>{t.add({frameId:n,processId:r})}}})},121:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r=(0,n(905).getInjectable)({id:"frame-ids",instantiate:()=>new Set})},374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(905),s=n(496);const a=(0,r.getInjectable)({id:"web-contents",instantiate:()=>()=>s.webContents.getAllWebContents(),causesSideEffects:!0})},104:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(905);const s=require("@ogre-tools/fp");var a=n(49),i=n(374);const o=require("lodash/fp");var c=n(121);const l=e=>e.isDestroyed(),d=e=>e.isCrashed(),u=(0,r.getInjectable)({id:"send-message-to-channel",instantiate:e=>{const t=e.inject(i.default),n=e.inject(c.default);return(e,r)=>{var a;(0,s.pipeline)(t(),(0,o.reject)(l),(0,o.reject)(d),(0,o.flatMap)((e=>[(t,...n)=>e.send(t,...n),...[...n].map((({frameId:t,processId:n})=>(r,...s)=>{e.sendToFrame([t,n],r,...s)}))])),(a=t=>{t(e.id,r)},e=>e.forEach(a)))}},injectionToken:a.sendMessageToChannelInjectionToken})},888:(e,t,n)=>{var r={"./channel-listeners/enlist-message-channel-listener.injectable.ts":421,"./channel-listeners/enlist-request-channel-listener.injectable.ts":989,"./ipc-main/ipc-main.injectable.ts":73,"./request-from-channel/request-from-channel.injectable.ts":459,"./send-message-to-channel/allow-communication-listener.injectable.ts":13,"./send-message-to-channel/frameIds.injectable.ts":121,"./send-message-to-channel/get-web-contents.injectable.ts":374,"./send-message-to-channel/send-message-to-channel.injectable.ts":104};function s(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}s.keys=function(){return Object.keys(r)},s.resolve=a,e.exports=s,s.id=888},49:e=>{"use strict";e.exports=require("@k8slens/messaging")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")},496:e=>{"use strict";e.exports=require("electron")}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var a=t[r]={id:r,loaded:!1,exports:{}};return e[r](a,a.exports,n),a.loaded=!0,a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{messagingFeatureForMain:()=>e.v});var e=n(692)})(),module.exports=r})(); \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/main/dist/src/feature.d.ts b/packages/technical-features/messaging/electron/main/dist/src/feature.d.ts new file mode 100644 index 0000000000..4d768e045d --- /dev/null +++ b/packages/technical-features/messaging/electron/main/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const messagingFeatureForMain: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/base.css b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/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/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/block-navigation.js b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/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/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/favicon.png b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/index.html new file mode 100644 index 0000000000..1df0342e3a --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/index.html @@ -0,0 +1,191 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 156/156 +
+ + +
+ 100% + Branches + 24/24 +
+ + +
+ 100% + Functions + 20/20 +
+ + +
+ 100% + Lines + 156/156 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%43/43100%5/5100%5/5100%43/43
src/ipc +
+
100%10/10100%2/2100%2/2100%10/10
src/listening-of-messages +
+
100%28/28100%5/5100%3/3100%28/28
src/listening-of-requests +
+
100%18/18100%2/2100%2/2100%18/18
src/requesting-of-requests +
+
100%28/28100%5/5100%4/4100%28/28
src/sending-of-messages +
+
100%29/29100%5/5100%4/4100%29/29
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/prettify.css b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/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/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/prettify.js b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/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/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/sorter.js b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/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/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/allow-communication-to-iframe.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/allow-communication-to-iframe.injectable.ts.html new file mode 100644 index 0000000000..394a9d1d2b --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/allow-communication-to-iframe.injectable.ts.html @@ -0,0 +1,160 @@ + + + + + + Code coverage report for src/allow-communication-to-iframe.injectable.ts + + + + + + + + + +
+
+

All files / src allow-communication-to-iframe.injectable.ts

+
+ +
+ 100% + Statements + 25/25 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 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 +261x +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 { getInjectable } from "@ogre-tools/injectable";
+import { onLoadOfApplicationInjectionToken } from "@k8slens/application";
+import { getMessageChannel, sendMessageToChannelInjectionToken } from "@k8slens/messaging";
+ 
+export const frameCommunicationAdminChannel = getMessageChannel<undefined>(
+  "frame-communication-admin-channel",
+);
+ 
+const allowCommunicationToIframeInjectable = getInjectable({
+  id: "allow-communication-to-iframe-injectable",
+ 
+  instantiate: (di) => {
+    const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken);
+ 
+    return {
+      run: () => {
+        sendMessageToChannel(frameCommunicationAdminChannel);
+      },
+    };
+  },
+ 
+  injectionToken: onLoadOfApplicationInjectionToken,
+});
+ 
+export default allowCommunicationToIframeInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..11324e98a4 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +16x +16x +16x +16x +16x +16x +16x +1x +1x +1x + 
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { getFeature } from "@k8slens/feature-core";
+import { messagingFeature } from "@k8slens/messaging";
+ 
+export const messagingFeatureForRenderer = getFeature({
+  id: "messaging-for-renderer",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+ 
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+ 
+  dependencies: [messagingFeature],
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..a35ccbe3cb --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
allow-communication-to-iframe.injectable.ts +
+
100%25/25100%2/2100%2/2100%25/25
feature.ts +
+
100%18/18100%3/3100%3/3100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/index.html new file mode 100644 index 0000000000..a5436c1dc9 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/ipc + + + + + + + + + +
+
+

All files src/ipc

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ipc-renderer.injectable.ts +
+
100%10/10100%2/2100%2/2100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/ipc-renderer.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/ipc-renderer.injectable.ts.html new file mode 100644 index 0000000000..4c40db1035 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/ipc/ipc-renderer.injectable.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/ipc/ipc-renderer.injectable.ts + + + + + + + + + +
+
+

All files / src/ipc ipc-renderer.injectable.ts

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { ipcRenderer } from "electron";
+ 
+const ipcRendererInjectable = getInjectable({
+  id: "ipc-renderer",
+  instantiate: () => ipcRenderer,
+  causesSideEffects: true,
+});
+ 
+export default ipcRendererInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/enlist-message-channel-listener.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/enlist-message-channel-listener.injectable.ts.html new file mode 100644 index 0000000000..7e3ae74bd4 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/enlist-message-channel-listener.injectable.ts.html @@ -0,0 +1,169 @@ + + + + + + Code coverage report for src/listening-of-messages/enlist-message-channel-listener.injectable.ts + + + + + + + + + +
+
+

All files / src/listening-of-messages enlist-message-channel-listener.injectable.ts

+
+ +
+ 100% + Statements + 28/28 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 28/28 +
+ + +
+

+ 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 +291x +1x +1x +1x +1x +1x +1x +1x +1x +9x +9x +9x +8x +5x +5x +8x +8x +8x +8x +1x +1x +8x +9x +1x +1x +1x +1x +1x + 
import ipcRendererInjectable from "../ipc/ipc-renderer.injectable";
+import { getInjectable } from "@ogre-tools/injectable";
+import type { IpcRendererEvent } from "electron";
+import { enlistMessageChannelListenerInjectionToken } from "@k8slens/messaging";
+ 
+const enlistMessageChannelListenerInjectable = getInjectable({
+  id: "enlist-message-channel-listener-for-renderer",
+ 
+  instantiate: (di) => {
+    const ipcRenderer = di.inject(ipcRendererInjectable);
+ 
+    return ({ channel, handler }) => {
+      const nativeCallback = (_: IpcRendererEvent, message: any) => {
+        handler(message);
+      };
+ 
+      ipcRenderer.on(channel.id, nativeCallback);
+ 
+      return () => {
+        ipcRenderer.off(channel.id, nativeCallback);
+      };
+    };
+  },
+ 
+  injectionToken: enlistMessageChannelListenerInjectionToken,
+});
+ 
+export default enlistMessageChannelListenerInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/index.html new file mode 100644 index 0000000000..96556cdb6d --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-messages/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/listening-of-messages + + + + + + + + + +
+
+

All files src/listening-of-messages

+
+ +
+ 100% + Statements + 28/28 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 28/28 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
enlist-message-channel-listener.injectable.ts +
+
100%28/28100%5/5100%3/3100%28/28
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/enlist-request-channel-listener.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/enlist-request-channel-listener.injectable.ts.html new file mode 100644 index 0000000000..7ed26c5711 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/enlist-request-channel-listener.injectable.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/listening-of-requests/enlist-request-channel-listener.injectable.ts + + + + + + + + + +
+
+

All files / src/listening-of-requests enlist-request-channel-listener.injectable.ts

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

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
/* c8 ignore start */
+import { getInjectable } from "@ogre-tools/injectable";
+import { enlistRequestChannelListenerInjectionToken } from "@k8slens/messaging";
+ 
+const enlistRequestChannelListenerInjectable = getInjectable({
+  id: "enlist-request-channel-listener-for-renderer",
+ 
+  instantiate: () => (listener) => {
+    throw new Error(
+      `Tried to enlist request channel "${listener.channel.id}" in "renderer", but requesting it's not supported yet.`,
+    );
+  },
+ 
+  injectionToken: enlistRequestChannelListenerInjectionToken,
+});
+ 
+export default enlistRequestChannelListenerInjectable;
+/* c8 ignore end */
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/index.html new file mode 100644 index 0000000000..3ec9fad02e --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/listening-of-requests/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/listening-of-requests + + + + + + + + + +
+
+

All files src/listening-of-requests

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
enlist-request-channel-listener.injectable.ts +
+
100%18/18100%2/2100%2/2100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/index.html new file mode 100644 index 0000000000..49f4be4fc2 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/requesting-of-requests + + + + + + + + + +
+
+

All files src/requesting-of-requests

+
+ +
+ 100% + Statements + 28/28 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 28/28 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
invoke-ipc.injectable.ts +
+
100%10/10100%2/2100%2/2100%10/10
request-from-channel.injectable.ts +
+
100%18/18100%3/3100%2/2100%18/18
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/invoke-ipc.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/invoke-ipc.injectable.ts.html new file mode 100644 index 0000000000..2b138ee364 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/invoke-ipc.injectable.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/requesting-of-requests/invoke-ipc.injectable.ts + + + + + + + + + +
+
+

All files / src/requesting-of-requests invoke-ipc.injectable.ts

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import ipcRendererInjectable from "../ipc/ipc-renderer.injectable";
+ 
+const invokeIpcInjectable = getInjectable({
+  id: "invoke-ipc",
+ 
+  instantiate: (di) => di.inject(ipcRendererInjectable).invoke,
+});
+ 
+export default invokeIpcInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/request-from-channel.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/request-from-channel.injectable.ts.html new file mode 100644 index 0000000000..2eeaafcba2 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/requesting-of-requests/request-from-channel.injectable.ts.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for src/requesting-of-requests/request-from-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/requesting-of-requests request-from-channel.injectable.ts

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ 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 +191x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import type { RequestFromChannel } from "@k8slens/messaging";
+import { requestFromChannelInjectionToken } from "@k8slens/messaging";
+import invokeIpcInjectable from "./invoke-ipc.injectable";
+ 
+const requestFromChannelInjectable = getInjectable({
+  id: "request-from-channel",
+ 
+  instantiate: (di) => {
+    const invokeIpc = di.inject(invokeIpcInjectable);
+ 
+    return ((channel, request) => invokeIpc(channel.id, request)) as RequestFromChannel;
+  },
+ 
+  injectionToken: requestFromChannelInjectionToken,
+});
+ 
+export default requestFromChannelInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/index.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/index.html new file mode 100644 index 0000000000..6f3b87f491 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/sending-of-messages + + + + + + + + + +
+
+

All files src/sending-of-messages

+
+ +
+ 100% + Statements + 29/29 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 29/29 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
message-to-channel.injectable.ts +
+
100%19/19100%3/3100%2/2100%19/19
send-to-ipc.injectable.ts +
+
100%10/10100%2/2100%2/2100%10/10
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/message-to-channel.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/message-to-channel.injectable.ts.html new file mode 100644 index 0000000000..11d2023190 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/message-to-channel.injectable.ts.html @@ -0,0 +1,142 @@ + + + + + + Code coverage report for src/sending-of-messages/message-to-channel.injectable.ts + + + + + + + + + +
+
+

All files / src/sending-of-messages message-to-channel.injectable.ts

+
+ +
+ 100% + Statements + 19/19 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/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 +201x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import sendToIpcInjectable from "./send-to-ipc.injectable";
+import { SendMessageToChannel, sendMessageToChannelInjectionToken } from "@k8slens/messaging";
+ 
+const messageToChannelInjectable = getInjectable({
+  id: "message-to-channel",
+ 
+  instantiate: (di) => {
+    const sendToIpc = di.inject(sendToIpcInjectable);
+ 
+    return ((channel, message) => {
+      sendToIpc(channel.id, message);
+    }) as SendMessageToChannel;
+  },
+ 
+  injectionToken: sendMessageToChannelInjectionToken,
+});
+ 
+export default messageToChannelInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/send-to-ipc.injectable.ts.html b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/send-to-ipc.injectable.ts.html new file mode 100644 index 0000000000..330c5afb84 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov-report/src/sending-of-messages/send-to-ipc.injectable.ts.html @@ -0,0 +1,115 @@ + + + + + + Code coverage report for src/sending-of-messages/send-to-ipc.injectable.ts + + + + + + + + + +
+
+

All files / src/sending-of-messages send-to-ipc.injectable.ts

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

+ 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 +111x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import ipcRendererInjectable from "../ipc/ipc-renderer.injectable";
+ 
+const sendToIpcInjectable = getInjectable({
+  id: "send-to-ipc",
+ 
+  instantiate: (di) => di.inject(ipcRendererInjectable).send,
+});
+ 
+export default sendToIpcInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/coverage/lcov.info b/packages/technical-features/messaging/electron/renderer/coverage/lcov.info new file mode 100644 index 0000000000..068c0f5109 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/coverage/lcov.info @@ -0,0 +1,301 @@ +TN: +SF:src/allow-communication-to-iframe.injectable.ts +FN:12,instantiate +FN:16,run +FNF:2 +FNH:2 +FNDA:1,instantiate +FNDA:1,run +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +LF:25 +LH:25 +BRDA:12,0,0,1 +BRDA:16,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/feature.ts +FN:5,get +FN:8,register +FN:13,getRequireContexts +FNF:3 +FNH:3 +FNDA:16,get +FNDA:16,register +FNDA:16,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,16 +DA:10,16 +DA:11,16 +DA:12,16 +DA:13,16 +DA:14,16 +DA:15,16 +DA:16,1 +DA:17,1 +DA:18,1 +LF:18 +LH:18 +BRDA:5,0,0,16 +BRDA:8,1,0,16 +BRDA:13,2,0,16 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/ipc/ipc-renderer.injectable.ts +FN:10,get +FN:6,instantiate +FNF:2 +FNH:2 +FNDA:38,get +FNDA:4,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRDA:10,0,0,38 +BRDA:6,1,0,4 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/listening-of-messages/enlist-message-channel-listener.injectable.ts +FN:28,get +FN:9,instantiate +FN:13,nativeCallback +FNF:3 +FNH:3 +FNDA:16,get +FNDA:9,instantiate +FNDA:5,nativeCallback +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,9 +DA:11,9 +DA:12,9 +DA:13,8 +DA:14,5 +DA:15,5 +DA:16,8 +DA:17,8 +DA:18,8 +DA:19,8 +DA:20,1 +DA:21,1 +DA:22,8 +DA:23,9 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +LF:28 +LH:28 +BRDA:28,0,0,16 +BRDA:9,1,0,9 +BRDA:12,2,0,8 +BRDA:13,3,0,5 +BRDA:19,4,0,1 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/listening-of-requests/enlist-request-channel-listener.injectable.ts +FN:17,get +FN:8,instantiate +FNF:2 +FNH:2 +FNDA:1,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +LF:18 +LH:18 +BRDA:17,0,0,1 +BRDA:8,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/requesting-of-requests/invoke-ipc.injectable.ts +FN:10,get +FN:7,instantiate +FNF:2 +FNH:2 +FNDA:21,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRDA:10,0,0,21 +BRDA:7,1,0,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/requesting-of-requests/request-from-channel.injectable.ts +FN:18,get +FN:9,instantiate +FNF:2 +FNH:2 +FNDA:16,get +FNDA:2,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,2 +DA:11,2 +DA:12,2 +DA:13,2 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +LF:18 +LH:18 +BRDA:18,0,0,16 +BRDA:9,1,0,2 +BRDA:12,2,0,2 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/sending-of-messages/message-to-channel.injectable.ts +FN:19,get +FN:8,instantiate +FNF:2 +FNH:2 +FNDA:16,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +LF:19 +LH:19 +BRDA:19,0,0,16 +BRDA:8,1,0,1 +BRDA:11,2,0,1 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/sending-of-messages/send-to-ipc.injectable.ts +FN:10,get +FN:7,instantiate +FNF:2 +FNH:2 +FNDA:19,get +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +LF:10 +LH:10 +BRDA:10,0,0,19 +BRDA:7,1,0,1 +BRF:2 +BRH:2 +end_of_record diff --git a/packages/technical-features/messaging/electron/renderer/dist/index.d.ts b/packages/technical-features/messaging/electron/renderer/dist/index.d.ts new file mode 100644 index 0000000000..337d473d1f --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/dist/index.d.ts @@ -0,0 +1 @@ +export { messagingFeatureForRenderer } from "./src/feature"; diff --git a/packages/technical-features/messaging/electron/renderer/dist/index.js b/packages/technical-features/messaging/electron/renderer/dist/index.js new file mode 100644 index 0000000000..ec27928fff --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={427:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a,frameCommunicationAdminChannel:()=>o});var r=n(905);const s=require("@k8slens/application");var i=n(49);const o=(0,i.getMessageChannel)("frame-communication-admin-channel"),a=(0,r.getInjectable)({id:"allow-communication-to-iframe-injectable",instantiate:e=>{const t=e.inject(i.sendMessageToChannelInjectionToken);return{run:()=>{t(o)}}},injectionToken:s.onLoadOfApplicationInjectionToken})},692:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});const r=require("@ogre-tools/injectable-extension-for-auto-registration"),s=require("@k8slens/feature-core");var i=n(49);e=n.hmd(e);const o=(0,s.getFeature)({id:"messaging-for-renderer",register:t=>{(0,r.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[n(888)]})},dependencies:[i.messagingFeature]})},610:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905);const s=require("electron"),i=(0,r.getInjectable)({id:"ipc-renderer",instantiate:()=>s.ipcRenderer,causesSideEffects:!0})},746:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(610),s=n(905),i=n(49);const o=(0,s.getInjectable)({id:"enlist-message-channel-listener-for-renderer",instantiate:e=>{const t=e.inject(r.default);return({channel:e,handler:n})=>{const r=(e,t)=>{n(t)};return t.on(e.id,r),()=>{t.off(e.id,r)}}},injectionToken:i.enlistMessageChannelListenerInjectionToken})},946:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905),s=n(49);const i=(0,r.getInjectable)({id:"enlist-request-channel-listener-for-renderer",instantiate:()=>e=>{throw new Error(`Tried to enlist request channel "${e.channel.id}" in "renderer", but requesting it's not supported yet.`)},injectionToken:s.enlistRequestChannelListenerInjectionToken})},984:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905),s=n(610);const i=(0,r.getInjectable)({id:"invoke-ipc",instantiate:e=>e.inject(s.default).invoke})},759:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(905),s=n(49),i=n(984);const o=(0,r.getInjectable)({id:"request-from-channel",instantiate:e=>{const t=e.inject(i.default);return(e,n)=>t(e.id,n)},injectionToken:s.requestFromChannelInjectionToken})},187:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(905),s=n(507),i=n(49);const o=(0,r.getInjectable)({id:"message-to-channel",instantiate:e=>{const t=e.inject(s.default);return(e,n)=>{t(e.id,n)}},injectionToken:i.sendMessageToChannelInjectionToken})},507:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(905),s=n(610);const i=(0,r.getInjectable)({id:"send-to-ipc",instantiate:e=>e.inject(s.default).send})},888:(e,t,n)=>{var r={"./allow-communication-to-iframe.injectable.ts":427,"./ipc/ipc-renderer.injectable.ts":610,"./listening-of-messages/enlist-message-channel-listener.injectable.ts":746,"./listening-of-requests/enlist-request-channel-listener.injectable.ts":946,"./requesting-of-requests/invoke-ipc.injectable.ts":984,"./requesting-of-requests/request-from-channel.injectable.ts":759,"./sending-of-messages/message-to-channel.injectable.ts":187,"./sending-of-messages/send-to-ipc.injectable.ts":507};function s(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}s.keys=function(){return Object.keys(r)},s.resolve=i,e.exports=s,s.id=888},49:e=>{"use strict";e.exports=require("@k8slens/messaging")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={id:r,loaded:!1,exports:{}};return e[r](i,i.exports,n),i.loaded=!0,i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{messagingFeatureForRenderer:()=>e.C});var e=n(692)})(),module.exports=r})(); \ No newline at end of file diff --git a/packages/technical-features/messaging/electron/renderer/dist/src/feature.d.ts b/packages/technical-features/messaging/electron/renderer/dist/src/feature.d.ts new file mode 100644 index 0000000000..48cffda920 --- /dev/null +++ b/packages/technical-features/messaging/electron/renderer/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const messagingFeatureForRenderer: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/base.css b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/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/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/block-navigation.js b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/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/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/favicon.png b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/get-message-bridge-fake.ts.html b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/get-message-bridge-fake.ts.html new file mode 100644 index 0000000000..f394ba191a --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/get-message-bridge-fake.ts.html @@ -0,0 +1,694 @@ + + + + + + Code coverage report for get-message-bridge-fake.ts + + + + + + + + + +
+
+

All files get-message-bridge-fake.ts

+
+ +
+ 100% + Statements + 203/203 +
+ + +
+ 100% + Branches + 42/42 +
+ + +
+ 100% + Functions + 11/11 +
+ + +
+ 100% + Lines + 203/203 +
+ + +
+

+ 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 +2041x +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 +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +21x +21x +21x +42x +42x +42x +42x +42x +23x +23x +19x +42x +12x +12x +12x +9x +9x +12x +12x +42x +7x +7x +42x +21x +84x +84x +84x +84x +84x +47x +28x +28x +47x +47x +47x +47x +47x +47x +2x +2x +47x +84x +84x +1x +1x +1x +1x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +84x +12x +12x +12x +12x +12x +12x +12x +12x +2x +2x +2x +2x +10x +12x +2x +2x +2x +2x +8x +8x +8x +8x +8x +8x +8x +8x +12x +12x +84x +84x +84x +84x +30x +30x +30x +30x +30x +30x +30x +30x +30x +2x +2x +30x +84x +1x +1x +28x +28x +28x +28x +28x +28x +9x +9x +9x +9x +9x +28x +28x +3x +3x +3x +6x +6x +3x +28x +28x +28x +28x +28x +28x +28x +84x +84x +84x +84x +84x +84x +84x +84x +84x +28x +28x +28x +28x +28x +28x +28x +16x +16x +28x +28x + 
import type { DiContainer } from "@ogre-tools/injectable";
+import type {
+  MessageChannel,
+  MessageChannelHandler,
+  MessageChannelListener,
+  RequestChannel,
+  RequestChannelHandler,
+} from "@k8slens/messaging";
+ 
+import {
+  enlistMessageChannelListenerInjectionToken,
+  enlistRequestChannelListenerInjectionToken,
+  RequestFromChannel,
+  requestFromChannelInjectionToken,
+  sendMessageToChannelInjectionToken,
+} from "@k8slens/messaging";
+ 
+import { pipeline } from "@ogre-tools/fp";
+import { filter, map } from "lodash/fp";
+import asyncFn, { AsyncFnMock } from "@async-fn/jest";
+ 
+export type MessageBridgeFake = {
+  involve: (...dis: DiContainer[]) => void;
+  messagePropagation: () => Promise<void>;
+  messagePropagationRecursive: (callback: any) => any;
+  setAsync: (value: boolean) => void;
+};
+ 
+type MessageHandlers = Set<MessageChannelHandler<MessageChannel<any>>>;
+ 
+const overrideMessaging = ({
+  di,
+  messageListenersByDi,
+  messagePropagationBuffer,
+  getAsyncModeStatus,
+}: {
+  di: DiContainer;
+ 
+  messageListenersByDi: Map<DiContainer, Map<string, MessageHandlers>>;
+ 
+  messagePropagationBuffer: Set<{ resolve: () => Promise<void> }>;
+ 
+  getAsyncModeStatus: () => boolean;
+}) => {
+  const messageHandlersByChannel = new Map<string, MessageHandlers>();
+ 
+  messageListenersByDi.set(di, messageHandlersByChannel);
+ 
+  di.override(sendMessageToChannelInjectionToken, () => (channel, message) => {
+    const allOtherDis = [...messageListenersByDi.keys()].filter((x) => x !== di);
+ 
+    allOtherDis.forEach((otherDi) => {
+      const listeners = messageListenersByDi.get(otherDi);
+ 
+      const handlersForChannel = listeners?.get(channel.id);
+ 
+      if (!handlersForChannel) {
+        return;
+      }
+ 
+      if (getAsyncModeStatus()) {
+        const resolvableHandlePromise = asyncFn();
+ 
+        resolvableHandlePromise().then(() => {
+          handlersForChannel.forEach((handler) => handler(message, { frameId: 42, processId: 42 }));
+        });
+ 
+        messagePropagationBuffer.add(resolvableHandlePromise);
+      } else {
+        handlersForChannel.forEach((handler) => handler(message, { frameId: 42, processId: 42 }));
+      }
+    });
+  });
+ 
+  di.override(
+    enlistMessageChannelListenerInjectionToken,
+    () =>
+      <T>(listener: MessageChannelListener<MessageChannel<T>>) => {
+        if (!messageHandlersByChannel.has(listener.channel.id)) {
+          messageHandlersByChannel.set(listener.channel.id, new Set());
+        }
+ 
+        const handlerSet = messageHandlersByChannel.get(listener.channel.id);
+ 
+        handlerSet?.add(listener.handler);
+ 
+        return () => {
+          handlerSet?.delete(listener.handler);
+        };
+      },
+  );
+};
+ 
+type RequestHandlers = Set<RequestChannelHandler<RequestChannel<any, any>>>;
+ 
+const overrideRequesting = ({
+  di,
+  requestListenersByDi,
+}: {
+  di: DiContainer;
+ 
+  requestListenersByDi: Map<DiContainer, Map<string, RequestHandlers>>;
+}) => {
+  const requestHandlersByChannel = new Map<string, RequestHandlers>();
+ 
+  requestListenersByDi.set(di, requestHandlersByChannel);
+ 
+  di.override(
+    requestFromChannelInjectionToken,
+    () =>
+      (async (channel, request) =>
+        pipeline(
+          [...requestListenersByDi.values()],
+          map((listenersByChannel) => listenersByChannel?.get(channel.id)),
+          filter((x) => !!x),
+ 
+          (channelSpecificListeners) => {
+            if (channelSpecificListeners.length === 0) {
+              throw new Error(
+                `Tried to make a request but no listeners for channel "${channel.id}" was discovered in any DIs`,
+              );
+            }
+ 
+            if (channelSpecificListeners.length > 1) {
+              throw new Error(
+                `Tried to make a request but multiple listeners were discovered for channel "${channel.id}" in multiple DIs.`,
+              );
+            }
+ 
+            const listeners = channelSpecificListeners[0];
+ 
+            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+            const [handler] = listeners!;
+ 
+            return handler;
+          },
+ 
+          async (handler) => handler(request),
+        )) as RequestFromChannel,
+  );
+ 
+  di.override(enlistRequestChannelListenerInjectionToken, () => (listener) => {
+    if (!requestHandlersByChannel.has(listener.channel.id)) {
+      requestHandlersByChannel.set(listener.channel.id, new Set());
+    }
+ 
+    const handlerSet = requestHandlersByChannel.get(listener.channel.id);
+ 
+    handlerSet?.add(listener.handler);
+ 
+    return () => {
+      handlerSet?.delete(listener.handler);
+    };
+  });
+};
+ 
+export const getMessageBridgeFake = (): MessageBridgeFake => {
+  const messageListenersByDi = new Map<DiContainer, Map<string, MessageHandlers>>();
+  const requestListenersByDi = new Map<DiContainer, Map<string, RequestHandlers>>();
+ 
+  const messagePropagationBuffer = new Set<AsyncFnMock<() => void>>();
+ 
+  const messagePropagation = async (wrapper: (callback: any) => any = (callback) => callback()) => {
+    const oldMessages = [...messagePropagationBuffer.values()];
+ 
+    messagePropagationBuffer.clear();
+    await Promise.all(oldMessages.map((x) => wrapper(x.resolve)));
+  };
+ 
+  const messagePropagationRecursive = async (
+    wrapper: (callback: any) => any = (callback) => callback(),
+  ) => {
+    while (messagePropagationBuffer.size) {
+      await messagePropagation(wrapper);
+    }
+  };
+ 
+  let asyncModeStatus = false;
+  const getAsyncModeStatus = () => asyncModeStatus;
+ 
+  return {
+    involve: (...dis: DiContainer[]) => {
+      dis.forEach((di) => {
+        overrideRequesting({ di, requestListenersByDi });
+ 
+        overrideMessaging({
+          di,
+          messageListenersByDi,
+          messagePropagationBuffer,
+          getAsyncModeStatus,
+        });
+      });
+    },
+ 
+    messagePropagation,
+ 
+    messagePropagationRecursive,
+ 
+    setAsync: (value) => {
+      asyncModeStatus = value;
+    },
+  };
+};
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/index.html b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/index.html new file mode 100644 index 0000000000..62f7232549 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 203/203 +
+ + +
+ 100% + Branches + 42/42 +
+ + +
+ 100% + Functions + 11/11 +
+ + +
+ 100% + Lines + 203/203 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
get-message-bridge-fake.ts +
+
100%203/203100%42/42100%11/11100%203/203
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/prettify.css b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/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/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/prettify.js b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/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/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/sorter.js b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov-report/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/packages/technical-features/messaging/message-bridge-fake/coverage/lcov.info b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov.info new file mode 100644 index 0000000000..1d4ea0852d --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/coverage/lcov.info @@ -0,0 +1,276 @@ +TN: +SF:src/get-message-bridge-fake/get-message-bridge-fake.ts +FN:157,get +FN:31,overrideMessaging +FN:96,overrideRequesting +FN:157,getMessageBridgeFake +FN:163,messagePropagation +FN:163,wrapper +FN:170,messagePropagationRecursive +FN:171,wrapper +FN:179,getAsyncModeStatus +FN:182,involve +FN:199,setAsync +FNF:11 +FNH:11 +FNDA:28,get +FNDA:84,overrideMessaging +FNDA:84,overrideRequesting +FNDA:28,getMessageBridgeFake +FNDA:9,messagePropagation +FNDA:1,wrapper +FNDA:3,messagePropagationRecursive +FNDA:2,wrapper +FNDA:19,getAsyncModeStatus +FNDA:28,involve +FNDA:16,setAsync +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,84 +DA:33,84 +DA:34,84 +DA:35,84 +DA:36,84 +DA:37,84 +DA:38,84 +DA:39,84 +DA:40,84 +DA:41,84 +DA:42,84 +DA:43,84 +DA:44,84 +DA:45,84 +DA:46,84 +DA:47,84 +DA:48,84 +DA:49,84 +DA:50,21 +DA:51,21 +DA:52,21 +DA:53,42 +DA:54,42 +DA:55,42 +DA:56,42 +DA:57,42 +DA:58,23 +DA:59,23 +DA:60,19 +DA:61,42 +DA:62,12 +DA:63,12 +DA:64,12 +DA:65,9 +DA:66,9 +DA:67,12 +DA:68,12 +DA:69,42 +DA:70,7 +DA:71,7 +DA:72,42 +DA:73,21 +DA:74,84 +DA:75,84 +DA:76,84 +DA:77,84 +DA:78,84 +DA:79,47 +DA:80,28 +DA:81,28 +DA:82,47 +DA:83,47 +DA:84,47 +DA:85,47 +DA:86,47 +DA:87,47 +DA:88,2 +DA:89,2 +DA:90,47 +DA:91,84 +DA:92,84 +DA:93,1 +DA:94,1 +DA:95,1 +DA:96,1 +DA:97,84 +DA:98,84 +DA:99,84 +DA:100,84 +DA:101,84 +DA:102,84 +DA:103,84 +DA:104,84 +DA:105,84 +DA:106,84 +DA:107,84 +DA:108,84 +DA:109,84 +DA:110,84 +DA:111,12 +DA:112,12 +DA:113,12 +DA:114,12 +DA:115,12 +DA:116,12 +DA:117,12 +DA:118,12 +DA:119,2 +DA:120,2 +DA:121,2 +DA:122,2 +DA:123,10 +DA:124,12 +DA:125,2 +DA:126,2 +DA:127,2 +DA:128,2 +DA:129,8 +DA:130,8 +DA:131,8 +DA:132,8 +DA:133,8 +DA:134,8 +DA:135,8 +DA:136,8 +DA:137,12 +DA:138,12 +DA:139,84 +DA:140,84 +DA:141,84 +DA:142,84 +DA:143,30 +DA:144,30 +DA:145,30 +DA:146,30 +DA:147,30 +DA:148,30 +DA:149,30 +DA:150,30 +DA:151,30 +DA:152,2 +DA:153,2 +DA:154,30 +DA:155,84 +DA:156,1 +DA:157,1 +DA:158,28 +DA:159,28 +DA:160,28 +DA:161,28 +DA:162,28 +DA:163,28 +DA:164,9 +DA:165,9 +DA:166,9 +DA:167,9 +DA:168,9 +DA:169,28 +DA:170,28 +DA:171,3 +DA:172,3 +DA:173,3 +DA:174,6 +DA:175,6 +DA:176,3 +DA:177,28 +DA:178,28 +DA:179,28 +DA:180,28 +DA:181,28 +DA:182,28 +DA:183,28 +DA:184,84 +DA:185,84 +DA:186,84 +DA:187,84 +DA:188,84 +DA:189,84 +DA:190,84 +DA:191,84 +DA:192,84 +DA:193,28 +DA:194,28 +DA:195,28 +DA:196,28 +DA:197,28 +DA:198,28 +DA:199,28 +DA:200,16 +DA:201,16 +DA:202,28 +DA:203,28 +LF:203 +LH:203 +BRDA:157,0,0,28 +BRDA:31,1,0,84 +BRDA:49,2,0,21 +BRDA:49,3,0,21 +BRDA:50,4,0,63 +BRDA:52,5,0,42 +BRDA:57,6,0,23 +BRDA:60,7,0,19 +BRDA:61,8,0,12 +BRDA:69,9,0,7 +BRDA:64,10,0,9 +BRDA:65,11,0,18 +BRDA:70,12,0,13 +BRDA:77,13,0,84 +BRDA:78,14,0,47 +BRDA:79,15,0,28 +BRDA:87,16,0,2 +BRDA:96,17,0,84 +BRDA:110,18,0,12 +BRDA:111,19,0,12 +BRDA:114,20,0,36 +BRDA:115,21,0,36 +BRDA:117,22,0,12 +BRDA:118,23,0,2 +BRDA:123,24,0,10 +BRDA:124,25,0,2 +BRDA:129,26,0,8 +BRDA:138,27,0,8 +BRDA:142,28,0,84 +BRDA:142,29,0,30 +BRDA:151,30,0,2 +BRDA:157,31,0,28 +BRDA:163,32,0,9 +BRDA:163,33,0,1 +BRDA:167,34,0,9 +BRDA:170,35,0,3 +BRDA:173,36,0,6 +BRDA:171,37,0,2 +BRDA:179,38,0,19 +BRDA:182,39,0,28 +BRDA:183,40,0,84 +BRDA:199,41,0,16 +BRF:42 +BRH:42 +end_of_record diff --git a/packages/technical-features/messaging/message-bridge-fake/dist/index.d.ts b/packages/technical-features/messaging/message-bridge-fake/dist/index.d.ts new file mode 100644 index 0000000000..77c2cb2e61 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/dist/index.d.ts @@ -0,0 +1,2 @@ +export type { MessageBridgeFake } from "./src/get-message-bridge-fake/get-message-bridge-fake"; +export { getMessageBridgeFake } from "./src/get-message-bridge-fake/get-message-bridge-fake"; diff --git a/packages/technical-features/messaging/message-bridge-fake/dist/index.js b/packages/technical-features/messaging/message-bridge-fake/dist/index.js new file mode 100644 index 0000000000..5df7dded83 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/dist/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:n=>{var r=n&&n.__esModule?()=>n.default:()=>n;return e.d(r,{a:r}),r},d:(n,r)=>{for(var t in r)e.o(r,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:r[t]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{getMessageBridgeFake:()=>i});const r=require("@k8slens/messaging"),t=require("@ogre-tools/fp"),s=require("lodash/fp"),a=require("@async-fn/jest");var o=e.n(a);const i=()=>{const e=new Map,n=new Map,a=new Set,i=async(e=(e=>e()))=>{const n=[...a.values()];a.clear(),await Promise.all(n.map((n=>e(n.resolve))))};let l=!1;const d=()=>l;return{involve:(...i)=>{i.forEach((i=>{(({di:e,requestListenersByDi:n})=>{const a=new Map;n.set(e,a),e.override(r.requestFromChannelInjectionToken,(()=>async(e,r)=>(0,t.pipeline)([...n.values()],(0,s.map)((n=>null==n?void 0:n.get(e.id))),(0,s.filter)((e=>!!e)),(n=>{if(0===n.length)throw new Error(`Tried to make a request but no listeners for channel "${e.id}" was discovered in any DIs`);if(n.length>1)throw new Error(`Tried to make a request but multiple listeners were discovered for channel "${e.id}" in multiple DIs.`);const r=n[0],[t]=r;return t}),(async e=>e(r))))),e.override(r.enlistRequestChannelListenerInjectionToken,(()=>e=>{a.has(e.channel.id)||a.set(e.channel.id,new Set);const n=a.get(e.channel.id);return null==n||n.add(e.handler),()=>{null==n||n.delete(e.handler)}}))})({di:i,requestListenersByDi:n}),(({di:e,messageListenersByDi:n,messagePropagationBuffer:t,getAsyncModeStatus:s})=>{const a=new Map;n.set(e,a),e.override(r.sendMessageToChannelInjectionToken,(()=>(r,a)=>{[...n.keys()].filter((n=>n!==e)).forEach((e=>{const i=n.get(e),l=null==i?void 0:i.get(r.id);if(l)if(s()){const e=o()();e().then((()=>{l.forEach((e=>e(a,{frameId:42,processId:42})))})),t.add(e)}else l.forEach((e=>e(a,{frameId:42,processId:42})))}))})),e.override(r.enlistMessageChannelListenerInjectionToken,(()=>e=>{a.has(e.channel.id)||a.set(e.channel.id,new Set);const n=a.get(e.channel.id);return null==n||n.add(e.handler),()=>{null==n||n.delete(e.handler)}}))})({di:i,messageListenersByDi:e,messagePropagationBuffer:a,getAsyncModeStatus:d})}))},messagePropagation:i,messagePropagationRecursive:async(e=(e=>e()))=>{for(;a.size;)await i(e)},setAsync:e=>{l=e}}};module.exports=n})(); \ No newline at end of file diff --git a/packages/technical-features/messaging/message-bridge-fake/dist/src/get-message-bridge-fake/get-message-bridge-fake.d.ts b/packages/technical-features/messaging/message-bridge-fake/dist/src/get-message-bridge-fake/get-message-bridge-fake.d.ts new file mode 100644 index 0000000000..54eee86c2e --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/dist/src/get-message-bridge-fake/get-message-bridge-fake.d.ts @@ -0,0 +1,8 @@ +import type { DiContainer } from "@ogre-tools/injectable"; +export type MessageBridgeFake = { + involve: (...dis: DiContainer[]) => void; + messagePropagation: () => Promise; + messagePropagationRecursive: (callback: any) => any; + setAsync: (value: boolean) => void; +}; +export declare const getMessageBridgeFake: () => MessageBridgeFake; diff --git a/packages/technical-features/react-application/coverage/lcov-report/base.css b/packages/technical-features/react-application/coverage/lcov-report/base.css new file mode 100644 index 0000000000..f418035b46 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/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/packages/technical-features/react-application/coverage/lcov-report/block-navigation.js b/packages/technical-features/react-application/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000000..cc12130231 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/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/packages/technical-features/react-application/coverage/lcov-report/favicon.png b/packages/technical-features/react-application/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000..c1525b811a Binary files /dev/null and b/packages/technical-features/react-application/coverage/lcov-report/favicon.png differ diff --git a/packages/technical-features/react-application/coverage/lcov-report/index.html b/packages/technical-features/react-application/coverage/lcov-report/index.html new file mode 100644 index 0000000000..4837a73ab8 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 150/150 +
+ + +
+ 100% + Branches + 20/20 +
+ + +
+ 100% + Functions + 13/13 +
+ + +
+ 100% + Lines + 150/150 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%17/17100%3/3100%3/3100%17/17
src/react-application +
+
100%90/90100%14/14100%6/6100%90/90
src/render-application +
+
100%43/43100%3/3100%4/4100%43/43
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/prettify.css b/packages/technical-features/react-application/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/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/packages/technical-features/react-application/coverage/lcov-report/prettify.js b/packages/technical-features/react-application/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..b3225238f2 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/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/packages/technical-features/react-application/coverage/lcov-report/sort-arrow-sprite.png b/packages/technical-features/react-application/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000..6ed68316eb Binary files /dev/null and b/packages/technical-features/react-application/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/packages/technical-features/react-application/coverage/lcov-report/sorter.js b/packages/technical-features/react-application/coverage/lcov-report/sorter.js new file mode 100644 index 0000000000..2bb296a8ca --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/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/packages/technical-features/react-application/coverage/lcov-report/src/feature.ts.html b/packages/technical-features/react-application/coverage/lcov-report/src/feature.ts.html new file mode 100644 index 0000000000..32d752f700 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/feature.ts.html @@ -0,0 +1,136 @@ + + + + + + Code coverage report for src/feature.ts + + + + + + + + + +
+
+

All files / src feature.ts

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

+ 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 +181x +1x +1x +1x +1x +1x +1x +1x +7x +7x +7x +7x +7x +7x +1x +1x +1x + 
import { getFeature } from "@k8slens/feature-core";
+import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
+import { applicationFeature } from "@k8slens/application";
+ 
+export const reactApplicationFeature = getFeature({
+  id: "react-application",
+ 
+  register: (di) => {
+    autoRegister({
+      di,
+      targetModule: module,
+      getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
+    });
+  },
+ 
+  dependencies: [applicationFeature],
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/index.html b/packages/technical-features/react-application/coverage/lcov-report/src/index.html new file mode 100644 index 0000000000..5ca3ed7f29 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

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

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
feature.ts +
+
100%17/17100%3/3100%3/3100%17/17
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/react-application/index.html b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/index.html new file mode 100644 index 0000000000..a4ac5b3617 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for src/react-application + + + + + + + + + +
+
+

All files src/react-application

+
+ +
+ 100% + Statements + 90/90 +
+ + +
+ 100% + Branches + 14/14 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 90/90 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
react-application-children-injection-token.ts +
+
100%13/13100%1/1100%1/1100%13/13
react-application-content.tsx +
+
100%29/29100%7/7100%2/2100%29/29
react-application-higher-order-component-injection-token.ts +
+
100%11/11100%1/1100%1/1100%11/11
react-application.tsx +
+
100%37/37100%5/5100%2/2100%37/37
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-children-injection-token.ts.html b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-children-injection-token.ts.html new file mode 100644 index 0000000000..a9477b7961 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-children-injection-token.ts.html @@ -0,0 +1,124 @@ + + + + + + Code coverage report for src/react-application/react-application-children-injection-token.ts + + + + + + + + + +
+
+

All files / src/react-application react-application-children-injection-token.ts

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

+ 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 +141x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type React from "react";
+import type { IComputedValue } from "mobx";
+ 
+export interface ReactApplicationChildren {
+  id: string;
+  Component: React.ComponentType;
+  enabled: IComputedValue<boolean>;
+}
+ 
+export const reactApplicationChildrenInjectionToken = getInjectionToken<ReactApplicationChildren>({
+  id: "react-application-children-injection-token",
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-content.tsx.html b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-content.tsx.html new file mode 100644 index 0000000000..e69edbb631 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-content.tsx.html @@ -0,0 +1,172 @@ + + + + + + Code coverage report for src/react-application/react-application-content.tsx + + + + + + + + + +
+
+

All files / src/react-application react-application-content.tsx

+
+ +
+ 100% + Statements + 29/29 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 29/29 +
+ + +
+

+ 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 +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +15x +15x +8x +1x +1x +1x +1x +1x +1x +1x +1x +1x +9x +9x +1x +1x + 
import { withInjectables } from "@ogre-tools/injectable-react";
+import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
+import React from "react";
+import {
+  ReactApplicationChildren,
+  reactApplicationChildrenInjectionToken,
+} from "./react-application-children-injection-token";
+import type { IComputedValue } from "mobx";
+import { observer, Observer } from "mobx-react";
+ 
+type Dependencies = { contents: IComputedValue<ReactApplicationChildren[]> };
+ 
+const NonInjectedContent = observer(({ contents }: Dependencies) => (
+  <>
+    {contents.get().map((child) => (
+      <Observer key={child.id}>{() => (child.enabled.get() ? <child.Component /> : null)}</Observer>
+    ))}
+  </>
+));
+ 
+export const ReactApplicationContent = withInjectables<Dependencies>(
+  NonInjectedContent,
+ 
+  {
+    getProps: (di) => ({
+      contents: di.inject(computedInjectManyInjectable)(reactApplicationChildrenInjectionToken),
+    }),
+  },
+);
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-higher-order-component-injection-token.ts.html b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-higher-order-component-injection-token.ts.html new file mode 100644 index 0000000000..dee48d5a66 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application-higher-order-component-injection-token.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for src/react-application/react-application-higher-order-component-injection-token.ts + + + + + + + + + +
+
+

All files / src/react-application react-application-higher-order-component-injection-token.ts

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 11/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 +121x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectionToken } from "@ogre-tools/injectable";
+import type React from "react";
+ 
+export type ReactApplicationHigherOrderComponent = React.ComponentType<{
+  children: React.ReactNode;
+}>;
+ 
+export const reactApplicationHigherOrderComponentInjectionToken =
+  getInjectionToken<ReactApplicationHigherOrderComponent>({
+    id: "react-application-higher-order-component-injection-token",
+  });
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application.tsx.html b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application.tsx.html new file mode 100644 index 0000000000..726217726f --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/react-application/react-application.tsx.html @@ -0,0 +1,196 @@ + + + + + + Code coverage report for src/react-application/react-application.tsx + + + + + + + + + +
+
+

All files / src/react-application react-application.tsx

+
+ +
+ 100% + Statements + 37/37 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 37/37 +
+ + +
+

+ 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 +381x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +20x +20x +20x +9x +9x +11x +11x +11x +1x +1x +9x +9x +9x +9x +9x +9x +9x +9x +9x +9x + 
import type { DiContainerForInjection } from "@ogre-tools/injectable";
+import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
+import { DiContextProvider } from "@ogre-tools/injectable-react";
+import { observer } from "mobx-react";
+import React from "react";
+import {
+  ReactApplicationHigherOrderComponent,
+  reactApplicationHigherOrderComponentInjectionToken,
+} from "./react-application-higher-order-component-injection-token";
+ 
+import { ReactApplicationContent } from "./react-application-content";
+ 
+interface ReactApplicationProps {
+  di: DiContainerForInjection;
+}
+ 
+const render = (components: ReactApplicationHigherOrderComponent[]) => {
+  const [Component, ...rest] = components;
+ 
+  if (!Component) {
+    return null;
+  }
+ 
+  return <Component>{render(rest)}</Component>;
+};
+ 
+export const ReactApplication = observer(({ di }: ReactApplicationProps) => {
+  const computedInjectMany = di.inject(computedInjectManyInjectable);
+ 
+  const higherOrderComponents = computedInjectMany(
+    reactApplicationHigherOrderComponentInjectionToken,
+  );
+ 
+  const Components = [...higherOrderComponents.get(), ReactApplicationContent];
+ 
+  return <DiContextProvider value={{ di }}>{render(Components)}</DiContextProvider>;
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/render-application/index.html b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/index.html new file mode 100644 index 0000000000..e95a750fd1 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for src/render-application + + + + + + + + + +
+
+

All files src/render-application

+
+ +
+ 100% + Statements + 43/43 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 43/43 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
render-application-when-application-is-ready.injectable.tsx +
+
100%21/21100%3/3100%3/3100%21/21
render.injectable.tsx +
+
100%22/22100%0/0100%1/1100%22/22
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render-application-when-application-is-ready.injectable.tsx.html b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render-application-when-application-is-ready.injectable.tsx.html new file mode 100644 index 0000000000..e6094efd8c --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render-application-when-application-is-ready.injectable.tsx.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for src/render-application/render-application-when-application-is-ready.injectable.tsx + + + + + + + + + +
+
+

All files / src/render-application render-application-when-application-is-ready.injectable.tsx

+
+ +
+ 100% + Statements + 21/21 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 21/21 +
+ + +
+

+ 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 +221x +1x +1x +1x +1x +1x +1x +1x +1x +1x +7x +7x +7x +7x +7x +7x +7x +7x +1x +1x +1x + 
import { getInjectable } from "@ogre-tools/injectable";
+import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application";
+import renderInjectable from "./render.injectable";
+import { ReactApplication } from "../react-application/react-application";
+import React from "react";
+ 
+export const renderApplicationWhenApplicationIsReadyInjectable = getInjectable({
+  id: "render-application-when-application-is-ready",
+ 
+  instantiate: (di) => {
+    const render = di.inject(renderInjectable);
+ 
+    return {
+      run: () => {
+        render(<ReactApplication di={di} />);
+      },
+    };
+  },
+ 
+  injectionToken: afterApplicationIsLoadedInjectionToken,
+});
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render.injectable.tsx.html b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render.injectable.tsx.html new file mode 100644 index 0000000000..1ba6ab3c47 --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov-report/src/render-application/render.injectable.tsx.html @@ -0,0 +1,151 @@ + + + + + + Code coverage report for src/render-application/render.injectable.tsx + + + + + + + + + +
+
+

All files / src/render-application render.injectable.tsx

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

+ 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 +231x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
+import { render } from "react-dom";
+import type React from "react";
+ 
+export type Render = (application: React.ReactElement) => void;
+ 
+export const renderInjectionToken = getInjectionToken<Render>({
+  id: "render-injection-token",
+});
+ 
+const renderInjectable = getInjectable({
+  id: "render",
+ 
+  /* c8 ignore next */
+  instantiate: () => (application) => render(application, document.getElementById("app")),
+ 
+  causesSideEffects: true,
+ 
+  injectionToken: renderInjectionToken,
+});
+ 
+export default renderInjectable;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/packages/technical-features/react-application/coverage/lcov.info b/packages/technical-features/react-application/coverage/lcov.info new file mode 100644 index 0000000000..a5de85937f --- /dev/null +++ b/packages/technical-features/react-application/coverage/lcov.info @@ -0,0 +1,259 @@ +TN: +SF:src/feature.ts +FN:5,get +FN:8,register +FN:12,getRequireContexts +FNF:3 +FNH:3 +FNDA:7,get +FNDA:7,register +FNDA:7,getRequireContexts +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,7 +DA:10,7 +DA:11,7 +DA:12,7 +DA:13,7 +DA:14,7 +DA:15,1 +DA:16,1 +DA:17,1 +LF:17 +LH:17 +BRDA:5,0,0,7 +BRDA:8,1,0,7 +BRDA:12,2,0,7 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/react-application/react-application-children-injection-token.ts +FN:11,get +FNF:1 +FNH:1 +FNDA:15,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +LF:13 +LH:13 +BRDA:11,0,0,15 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/react-application/react-application-content.tsx +FN:21,get +FN:25,getProps +FNF:2 +FNH:2 +FNDA:9,get +FNDA:9,getProps +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,15 +DA:15,15 +DA:16,8 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,9 +DA:27,9 +DA:28,1 +DA:29,1 +LF:29 +LH:29 +BRDA:21,0,0,9 +BRDA:13,1,0,15 +BRDA:15,2,0,8 +BRDA:16,3,0,10 +BRDA:16,4,0,8 +BRDA:16,5,0,2 +BRDA:25,6,0,9 +BRF:7 +BRH:7 +end_of_record +TN: +SF:src/react-application/react-application-higher-order-component-injection-token.ts +FN:8,get +FNF:1 +FNH:1 +FNDA:11,get +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +LF:11 +LH:11 +BRDA:8,0,0,11 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/react-application/react-application.tsx +FN:27,get +FN:17,render +FNF:2 +FNH:2 +FNDA:7,get +FNDA:20,render +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,20 +DA:19,20 +DA:20,20 +DA:21,9 +DA:22,9 +DA:23,11 +DA:24,11 +DA:25,11 +DA:26,1 +DA:27,1 +DA:28,9 +DA:29,9 +DA:30,9 +DA:31,9 +DA:32,9 +DA:33,9 +DA:34,9 +DA:35,9 +DA:36,9 +DA:37,9 +LF:37 +LH:37 +BRDA:27,0,0,7 +BRDA:17,1,0,20 +BRDA:20,2,0,9 +BRDA:23,3,0,11 +BRDA:27,4,0,9 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/render-application/render-application-when-application-is-ready.injectable.tsx +FN:7,get +FN:10,instantiate +FN:14,run +FNF:3 +FNH:3 +FNDA:14,get +FNDA:7,instantiate +FNDA:7,run +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,7 +DA:12,7 +DA:13,7 +DA:14,7 +DA:15,7 +DA:16,7 +DA:17,7 +DA:18,7 +DA:19,1 +DA:20,1 +DA:21,1 +LF:21 +LH:21 +BRDA:7,0,0,14 +BRDA:10,1,0,7 +BRDA:14,2,0,7 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/render-application/render.injectable.tsx +FN:15,instantiate +FNF:1 +FNH:1 +FNDA:1,instantiate +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +LF:22 +LH:22 +BRF:0 +BRH:0 +end_of_record diff --git a/packages/technical-features/react-application/dist/index.d.ts b/packages/technical-features/react-application/dist/index.d.ts new file mode 100644 index 0000000000..a0db57b505 --- /dev/null +++ b/packages/technical-features/react-application/dist/index.d.ts @@ -0,0 +1,7 @@ +export { renderInjectionToken } from "./src/render-application/render.injectable"; +export type { Render } from "./src/render-application/render.injectable"; +export { reactApplicationChildrenInjectionToken } from "./src/react-application/react-application-children-injection-token"; +export type { ReactApplicationChildren } from "./src/react-application/react-application-children-injection-token"; +export { reactApplicationHigherOrderComponentInjectionToken } from "./src/react-application/react-application-higher-order-component-injection-token"; +export type { ReactApplicationHigherOrderComponent } from "./src/react-application/react-application-higher-order-component-injection-token"; +export { reactApplicationFeature } from "./src/feature"; diff --git a/packages/technical-features/react-application/dist/index.js b/packages/technical-features/react-application/dist/index.js new file mode 100644 index 0000000000..721ef6ebf9 --- /dev/null +++ b/packages/technical-features/react-application/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={940:(e,t,n)=>{"use strict";n.d(t,{B:()=>a});const r=require("@k8slens/feature-core"),o=require("@ogre-tools/injectable-extension-for-auto-registration");var i=n(290);e=n.hmd(e);const a=(0,r.getFeature)({id:"react-application",register:t=>{(0,o.autoRegister)({di:t,targetModule:e,getRequireContexts:()=>[n(888)]})},dependencies:[i.applicationFeature]})},954:(e,t,n)=>{"use strict";n.d(t,{P:()=>r});const r=(0,n(905).getInjectionToken)({id:"react-application-children-injection-token"})},151:(e,t,n)=>{"use strict";n.d(t,{P:()=>r});const r=(0,n(905).getInjectionToken)({id:"react-application-higher-order-component-injection-token"})},365:(e,t,n)=>{"use strict";n.r(t),n.d(t,{renderApplicationWhenApplicationIsReadyInjectable:()=>f});var r=n(905),o=n(290),i=n(411);const a=require("@ogre-tools/injectable-extension-for-mobx"),c=require("@ogre-tools/injectable-react"),s=require("mobx-react"),d=require("react");var l=n.n(d),p=n(151),u=n(954);const j=(0,s.observer)((({contents:e})=>l().createElement(l().Fragment,null,e.get().map((e=>l().createElement(s.Observer,{key:e.id},(()=>e.enabled.get()?l().createElement(e.Component,null):null))))))),b=(0,c.withInjectables)(j,{getProps:e=>({contents:e.inject(a.computedInjectManyInjectable)(u.P)})}),g=e=>{const[t,...n]=e;return t?l().createElement(t,null,g(n)):null},m=(0,s.observer)((({di:e})=>{const t=[...e.inject(a.computedInjectManyInjectable)(p.P).get(),b];return l().createElement(c.DiContextProvider,{value:{di:e}},g(t))})),f=(0,r.getInjectable)({id:"render-application-when-application-is-ready",instantiate:e=>{const t=e.inject(i.default);return{run:()=>{t(l().createElement(m,{di:e}))}}},injectionToken:o.afterApplicationIsLoadedInjectionToken})},411:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a,renderInjectionToken:()=>i});var r=n(905);const o=require("react-dom"),i=(0,r.getInjectionToken)({id:"render-injection-token"}),a=(0,r.getInjectable)({id:"render",instantiate:()=>e=>(0,o.render)(e,document.getElementById("app")),causesSideEffects:!0,injectionToken:i})},888:(e,t,n)=>{var r={"./render-application/render-application-when-application-is-ready.injectable.tsx":365,"./render-application/render.injectable.tsx":411};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=888},290:e=>{"use strict";e.exports=require("@k8slens/application")},905:e=>{"use strict";e.exports=require("@ogre-tools/injectable")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,loaded:!1,exports:{}};return e[r](i,i.exports,n),i.loaded=!0,i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{reactApplicationChildrenInjectionToken:()=>t.P,reactApplicationFeature:()=>i.B,reactApplicationHigherOrderComponentInjectionToken:()=>o.P,renderInjectionToken:()=>e.renderInjectionToken});var e=n(411),t=n(954),o=n(151),i=n(940)})(),module.exports=r})(); \ No newline at end of file diff --git a/packages/technical-features/react-application/dist/src/feature.d.ts b/packages/technical-features/react-application/dist/src/feature.d.ts new file mode 100644 index 0000000000..ee4b03e78e --- /dev/null +++ b/packages/technical-features/react-application/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const reactApplicationFeature: import("@k8slens/feature-core").Feature; diff --git a/packages/technical-features/react-application/dist/src/react-application/react-application-children-injection-token.d.ts b/packages/technical-features/react-application/dist/src/react-application/react-application-children-injection-token.d.ts new file mode 100644 index 0000000000..46659e4718 --- /dev/null +++ b/packages/technical-features/react-application/dist/src/react-application/react-application-children-injection-token.d.ts @@ -0,0 +1,8 @@ +import type React from "react"; +import type { IComputedValue } from "mobx"; +export interface ReactApplicationChildren { + id: string; + Component: React.ComponentType; + enabled: IComputedValue; +} +export declare const reactApplicationChildrenInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/react-application/dist/src/react-application/react-application-higher-order-component-injection-token.d.ts b/packages/technical-features/react-application/dist/src/react-application/react-application-higher-order-component-injection-token.d.ts new file mode 100644 index 0000000000..040046558d --- /dev/null +++ b/packages/technical-features/react-application/dist/src/react-application/react-application-higher-order-component-injection-token.d.ts @@ -0,0 +1,5 @@ +import type React from "react"; +export type ReactApplicationHigherOrderComponent = React.ComponentType<{ + children: React.ReactNode; +}>; +export declare const reactApplicationHigherOrderComponentInjectionToken: import("@ogre-tools/injectable").InjectionToken; diff --git a/packages/technical-features/react-application/dist/src/render-application/render.injectable.d.ts b/packages/technical-features/react-application/dist/src/render-application/render.injectable.d.ts new file mode 100644 index 0000000000..1029311fd8 --- /dev/null +++ b/packages/technical-features/react-application/dist/src/render-application/render.injectable.d.ts @@ -0,0 +1,5 @@ +import type React from "react"; +export type Render = (application: React.ReactElement) => void; +export declare const renderInjectionToken: import("@ogre-tools/injectable").InjectionToken; +declare const renderInjectable: import("@ogre-tools/injectable").Injectable<(application: React.ReactElement>) => void | Element | React.Component, Render, void>; +export default renderInjectable; diff --git a/packages/technical-features/ui-components/dist/index.d.ts b/packages/technical-features/ui-components/dist/index.d.ts new file mode 100644 index 0000000000..ad8efe538a --- /dev/null +++ b/packages/technical-features/ui-components/dist/index.d.ts @@ -0,0 +1 @@ +export { uiComponentsFeature } from "./src/feature"; diff --git a/packages/technical-features/ui-components/dist/index.js b/packages/technical-features/ui-components/dist/index.js new file mode 100644 index 0000000000..b0170b6f24 --- /dev/null +++ b/packages/technical-features/ui-components/dist/index.js @@ -0,0 +1 @@ +(()=>{var e={940:(e,r,t)=>{"use strict";t.d(r,{O:()=>s});const o=require("@k8slens/feature-core"),n=require("@ogre-tools/injectable-extension-for-auto-registration");e=t.hmd(e);const s=(0,o.getFeature)({id:"ui-components",register:r=>{(0,n.autoRegister)({di:r,targetModule:e,getRequireContexts:()=>[t(888)]})}})},888:e=>{function r(e){var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}r.keys=()=>[],r.resolve=r,r.id=888,e.exports=r}},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var s=r[o]={id:o,loaded:!1,exports:{}};return e[o](s,s.exports,t),s.loaded=!0,s.exports}t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{"use strict";t.r(o),t.d(o,{uiComponentsFeature:()=>e.O});var e=t(940)})(),module.exports=o})(); \ No newline at end of file diff --git a/packages/technical-features/ui-components/dist/src/feature.d.ts b/packages/technical-features/ui-components/dist/src/feature.d.ts new file mode 100644 index 0000000000..758ba93e8e --- /dev/null +++ b/packages/technical-features/ui-components/dist/src/feature.d.ts @@ -0,0 +1 @@ +export declare const uiComponentsFeature: import("@k8slens/feature-core").Feature; diff --git a/packages/ui-components/tooltip/.eslintrc.json b/packages/ui-components/tooltip/.eslintrc.json new file mode 100644 index 0000000000..b15115cb69 --- /dev/null +++ b/packages/ui-components/tooltip/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "@k8slens/eslint-config/eslint", + "parserOptions": { + "project": "./tsconfig.json" + } +} diff --git a/packages/ui-components/tooltip/.prettierrc b/packages/ui-components/tooltip/.prettierrc new file mode 100644 index 0000000000..edd47b479e --- /dev/null +++ b/packages/ui-components/tooltip/.prettierrc @@ -0,0 +1 @@ +"@k8slens/eslint-config/prettier" diff --git a/packages/ui-components/tooltip/README.md b/packages/ui-components/tooltip/README.md new file mode 100644 index 0000000000..c132f8a4c9 --- /dev/null +++ b/packages/ui-components/tooltip/README.md @@ -0,0 +1,21 @@ +# @k8slens/tooltip + +This package contains stuff related to creating Lens-applications. + +# Usage + +```bash +$ npm install @k8slens/tooltip +``` + +```typescript +import { tooltipFeature } from "@k8slens/tooltip"; +import { registerFeature } from "@k8slens/feature-core"; +import { createContainer } from "@ogre-tools/injectable"; + +const di = createContainer("some-container"); + +registerFeature(di, tooltipFeature); +``` + +## Extendability diff --git a/packages/ui-components/tooltip/index.ts b/packages/ui-components/tooltip/index.ts new file mode 100644 index 0000000000..cad2ff6ec9 --- /dev/null +++ b/packages/ui-components/tooltip/index.ts @@ -0,0 +1,2 @@ +export * from "./src/tooltip"; +export * from "./src/withTooltip"; \ No newline at end of file diff --git a/packages/ui-components/tooltip/jest.config.js b/packages/ui-components/tooltip/jest.config.js new file mode 100644 index 0000000000..38d54ab7b6 --- /dev/null +++ b/packages/ui-components/tooltip/jest.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/ui-components/tooltip/package.json b/packages/ui-components/tooltip/package.json new file mode 100644 index 0000000000..6015d2bf32 --- /dev/null +++ b/packages/ui-components/tooltip/package.json @@ -0,0 +1,45 @@ +{ + "name": "@k8slens/tooltip", + "private": false, + "version": "1.0.0-alpha.0", + "description": "Highly extendable tooltip in the Lens.", + "type": "commonjs", + "files": [ + "dist" + ], + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/lensapp/lens.git" + }, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "author": { + "name": "OpenLens Authors", + "email": "info@k8slens.dev" + }, + "license": "MIT", + "homepage": "https://github.com/lensapp/lens", + "scripts": { + "buildasd": "webpack", + "devasdasd": "webpack --mode=development --watch", + "test:unit": "jest --coverage --runInBand", + "lint": "lens-lint", + "lint:fix": "lens-lint --fix" + }, + "peerDependencies": { + "@k8slens/feature-core": "^6.5.0-alpha.0", + "@ogre-tools/injectable": "^15.1.2", + "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", + "@ogre-tools/fp": "^15.1.2", + "lodash": "^4.17.21" + }, + "devDependencies": { + "@async-fn/jest": "^1.6.4", + "@k8slens/eslint-config": "6.5.0-alpha.1", + "@k8slens/react-testing-library-discovery": "^1.0.0-alpha.0" + } +} diff --git a/packages/core/src/renderer/components/tooltip/__mocks__/withTooltip.tsx b/packages/ui-components/tooltip/src/__mocks__/withTooltip.tsx similarity index 100% rename from packages/core/src/renderer/components/tooltip/__mocks__/withTooltip.tsx rename to packages/ui-components/tooltip/src/__mocks__/withTooltip.tsx diff --git a/packages/core/src/renderer/components/tooltip/__snapshots__/tooltip.test.tsx.snap b/packages/ui-components/tooltip/src/__snapshots__/tooltip.test.tsx.snap similarity index 91% rename from packages/core/src/renderer/components/tooltip/__snapshots__/tooltip.test.tsx.snap rename to packages/ui-components/tooltip/src/__snapshots__/tooltip.test.tsx.snap index 336f0fadc4..1e93b81e3a 100644 --- a/packages/core/src/renderer/components/tooltip/__snapshots__/tooltip.test.tsx.snap +++ b/packages/ui-components/tooltip/src/__snapshots__/tooltip.test.tsx.snap @@ -16,7 +16,7 @@ exports[` renders to DOM when forced to by visibile prop 1`] = `