@clary-so/measure 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.postcssrc +5 -0
  2. package/CHANGELOG.md +81 -0
  3. package/LICENSE +21 -0
  4. package/dist/__tests__/measure.test.d.ts +1 -0
  5. package/dist/__tests__/measure.test.js +152 -0
  6. package/dist/__tests__/measure.test.js.map +1 -0
  7. package/dist/__tests__/server/ServerApp.test.d.ts +1 -0
  8. package/dist/__tests__/server/ServerApp.test.js +49 -0
  9. package/dist/__tests__/server/ServerApp.test.js.map +1 -0
  10. package/dist/__tests__/utils/removeCLIColors.d.ts +1 -0
  11. package/dist/__tests__/utils/removeCLIColors.js +10 -0
  12. package/dist/__tests__/utils/removeCLIColors.js.map +1 -0
  13. package/dist/__tests__/webapp/socket.test.d.ts +1 -0
  14. package/dist/__tests__/webapp/socket.test.js +73 -0
  15. package/dist/__tests__/webapp/socket.test.js.map +1 -0
  16. package/dist/common/useLogSocketEvents.d.ts +3 -0
  17. package/dist/common/useLogSocketEvents.js +18 -0
  18. package/dist/common/useLogSocketEvents.js.map +1 -0
  19. package/dist/index.87c99d25.js +88 -0
  20. package/dist/index.87c99d25.js.map +1 -0
  21. package/dist/index.html +1 -0
  22. package/dist/server/ServerApp.d.ts +10 -0
  23. package/dist/server/ServerApp.js +131 -0
  24. package/dist/server/ServerApp.js.map +1 -0
  25. package/dist/server/ServerSocketConnectionApp.d.ts +6 -0
  26. package/dist/server/ServerSocketConnectionApp.js +105 -0
  27. package/dist/server/ServerSocketConnectionApp.js.map +1 -0
  28. package/dist/server/bin.d.ts +2 -0
  29. package/dist/server/bin.js +63 -0
  30. package/dist/server/bin.js.map +1 -0
  31. package/dist/server/components/HostAndPortInfo.d.ts +4 -0
  32. package/dist/server/components/HostAndPortInfo.js +14 -0
  33. package/dist/server/components/HostAndPortInfo.js.map +1 -0
  34. package/dist/server/constants.d.ts +2 -0
  35. package/dist/server/constants.js +12 -0
  36. package/dist/server/constants.js.map +1 -0
  37. package/dist/server/socket/socketInterface.d.ts +37 -0
  38. package/dist/server/socket/socketInterface.js +17 -0
  39. package/dist/server/socket/socketInterface.js.map +1 -0
  40. package/dist/server/socket/socketState.d.ts +5 -0
  41. package/dist/server/socket/socketState.js +47 -0
  42. package/dist/server/socket/socketState.js.map +1 -0
  43. package/dist/server/useBundleIdControls.d.ts +2 -0
  44. package/dist/server/useBundleIdControls.js +33 -0
  45. package/dist/server/useBundleIdControls.js.map +1 -0
  46. package/dist/webapp/MeasureWebApp.d.ts +2 -0
  47. package/dist/webapp/MeasureWebApp.js +29 -0
  48. package/dist/webapp/MeasureWebApp.js.map +1 -0
  49. package/dist/webapp/components/AppBar.d.ts +4 -0
  50. package/dist/webapp/components/AppBar.js +19 -0
  51. package/dist/webapp/components/AppBar.js.map +1 -0
  52. package/dist/webapp/components/BundleIdSelector.d.ts +6 -0
  53. package/dist/webapp/components/BundleIdSelector.js +20 -0
  54. package/dist/webapp/components/BundleIdSelector.js.map +1 -0
  55. package/dist/webapp/components/SocketState.d.ts +2 -0
  56. package/dist/webapp/components/SocketState.js +95 -0
  57. package/dist/webapp/components/SocketState.js.map +1 -0
  58. package/dist/webapp/components/StartButton.d.ts +6 -0
  59. package/dist/webapp/components/StartButton.js +12 -0
  60. package/dist/webapp/components/StartButton.js.map +1 -0
  61. package/dist/webapp/components/TextField.d.ts +5 -0
  62. package/dist/webapp/components/TextField.js +81 -0
  63. package/dist/webapp/components/TextField.js.map +1 -0
  64. package/dist/webapp/socket.d.ts +3 -0
  65. package/dist/webapp/socket.js +8 -0
  66. package/dist/webapp/socket.js.map +1 -0
  67. package/dist/webapp/useMeasures.d.ts +10 -0
  68. package/dist/webapp/useMeasures.js +38 -0
  69. package/dist/webapp/useMeasures.js.map +1 -0
  70. package/package.json +48 -0
  71. package/src/__tests__/__snapshots__/measure.test.tsx.snap +4389 -0
  72. package/src/__tests__/measure.test.tsx +141 -0
  73. package/src/__tests__/server/ServerApp.test.ts +49 -0
  74. package/src/__tests__/utils/removeCLIColors.ts +5 -0
  75. package/src/__tests__/webapp/socket.test.ts +37 -0
  76. package/src/common/types/index.d.ts +3 -0
  77. package/src/common/useLogSocketEvents.ts +17 -0
  78. package/src/server/ServerApp.tsx +103 -0
  79. package/src/server/ServerSocketConnectionApp.tsx +82 -0
  80. package/src/server/bin.tsx +23 -0
  81. package/src/server/components/HostAndPortInfo.tsx +11 -0
  82. package/src/server/constants.ts +8 -0
  83. package/src/server/socket/socketInterface.ts +53 -0
  84. package/src/server/socket/socketState.ts +66 -0
  85. package/src/server/useBundleIdControls.ts +38 -0
  86. package/src/webapp/MeasureWebApp.tsx +43 -0
  87. package/src/webapp/components/AppBar.tsx +19 -0
  88. package/src/webapp/components/BundleIdSelector.tsx +26 -0
  89. package/src/webapp/components/SocketState.tsx +79 -0
  90. package/src/webapp/components/StartButton.tsx +22 -0
  91. package/src/webapp/components/TextField.tsx +54 -0
  92. package/src/webapp/globals.d.ts +9 -0
  93. package/src/webapp/index.html +30 -0
  94. package/src/webapp/index.js +9 -0
  95. package/src/webapp/socket.ts +12 -0
  96. package/src/webapp/useMeasures.ts +36 -0
  97. package/tailwind.config.js +7 -0
  98. package/tsconfig.json +8 -0
  99. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"><title>Flashlight</title><link rel="icon" href="https://app.flashlight.dev/favicon.ico"><link rel="stylesheet" href="https://use.typekit.net/onj4oqg.css"></head><body> <style>*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{color:inherit;border-top-width:1px;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html{--bright-yellow:#fff500;--bright-green:#00ff75;--bright-magenta:#ff36af;--bright-cyan:#0ff;--bright-yellow-rgb:255,245,0;--bright-green-rgb:0,255,117;--bright-magenta-rgb:255,54,175;--bright-cyan-rgb:0,255,255}[data-theme=bright-yellow]{--theme-color:#fff500;--theme-color-100:#fff50021}[data-theme=bright-green]{--theme-color:#00ff75;--theme-color-100:#00ff7521}[data-theme=bright-magenta]{--theme-color:#ff36af;--theme-color-100:#ff36af21}[data-theme=bright-cyan]{--theme-color:#0ff;--theme-color-100:#00ffff21}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.-z-10{z-index:-10}.z-50{z-index:50}.m-1{margin:.25rem}.mx-8{margin-left:2rem;margin-right:2rem}.mb-2{margin-bottom:.5rem}.mb-\[5px\]{margin-bottom:5px}.ml-2{margin-left:.5rem}.ml-\[10px\]{margin-left:10px}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-auto{margin-right:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[calc\(100\%-50px\)\]{height:calc(100% - 50px)}.h-full{height:100%}.max-h-\[600px\]{max-height:600px}.min-h-\[12px\]{min-height:12px}.w-11{width:2.75rem}.w-2{width:.5rem}.w-4{width:1rem}.w-\[12px\]{width:12px}.w-\[456px\]{width:456px}.w-\[500px\]{width:500px}.w-full{width:100%}.min-w-\[12px\]{min-width:12px}.max-w-\[24px\]{max-width:24px}.max-w-\[50vw\]{max-width:50vw}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate:0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-y-hidden{overflow-y:hidden}.overflow-x-scroll{overflow-x:scroll}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-pre{white-space:pre}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-b-neutral-500{--tw-border-opacity:1;border-bottom-color:rgb(115 115 115/var(--tw-border-opacity,1))}.\!bg-dark-charcoal{--tw-bg-opacity:1!important;background-color:rgb(19 19 19/var(--tw-bg-opacity,1))!important}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-dark-charcoal{--tw-bg-opacity:1;background-color:rgb(19 19 19/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-light-charcoal{--tw-bg-opacity:1;background-color:rgb(27 27 29/var(--tw-bg-opacity,1))}.bg-theme-color{background-color:var(--theme-color)}.bg-gradient-radial{background-image:radial-gradient(57.7% 57.7% at 50% 0%,var(--theme-color-100)0%,#1d1d1f00 100%)}.fill-white{fill:#fff}.stroke-error{stroke:#e62e2e}.stroke-success{stroke:#158000}.stroke-warning{stroke:#e67f17}.stroke-white{stroke:#fff}.p-6{padding:1.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pr-6{padding-right:1.5rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-6xl{font-size:3.75rem;line-height:1}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.\!text-neutral-300{--tw-text-opacity:1!important;color:rgb(212 212 212/var(--tw-text-opacity,1))!important}.text-\[\#8B8B8B\]{--tw-text-opacity:1;color:rgb(139 139 139/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity,1))}.text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity,1))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-theme-color{color:var(--theme-color)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-30{opacity:.3}.shadow-glow{--tw-shadow:0 0 10px 0 var(--theme-color);--tw-shadow-colored:0 0 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-theme-color{--tw-shadow-color:var(--theme-color);--tw-shadow:var(--tw-shadow-colored)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[height\]{transition-property:height;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[max-width\]{transition-property:max-width;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.ease-linear{transition-timing-function:linear}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}.line-clamp-1{-webkit-line-clamp:1;word-break:break-all;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.peer:checked~.peer-checked\:bg-theme-color{background-color:var(--theme-color)}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}@media (prefers-color-scheme:dark){.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}}html,body,#app{width:100%;height:100%}body{--tw-bg-opacity:1;background-color:rgb(27 27 29/var(--tw-bg-opacity,1))}</style> <div id="app"></div> <script type="module" src="/index.87c99d25.js"></script> <script>window.__FLASHLIGHT_DATA__={socketServerUrl:"http://localhost:4000"};</script> </body></html>
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ export declare const createExpressApp: ({ port }: {
3
+ port: number;
4
+ }) => import("express-serve-static-core").Express;
5
+ interface ServerAppProps {
6
+ port: number;
7
+ }
8
+ export declare const ServerApp: ({ port }: ServerAppProps) => React.JSX.Element;
9
+ export declare const runServerApp: (port: number) => void;
10
+ export {};
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.runServerApp = exports.ServerApp = exports.createExpressApp = void 0;
49
+ const express_1 = __importDefault(require("express"));
50
+ const http_1 = __importDefault(require("http"));
51
+ const fs_1 = require("fs");
52
+ const path_1 = __importDefault(require("path"));
53
+ const cors_1 = __importDefault(require("cors"));
54
+ const socket_io_1 = require("socket.io");
55
+ const shell_1 = require("@clary-so/shell");
56
+ const react_1 = __importStar(require("react"));
57
+ const HostAndPortInfo_1 = require("./components/HostAndPortInfo");
58
+ const constants_1 = require("./constants");
59
+ const ServerSocketConnectionApp_1 = require("./ServerSocketConnectionApp");
60
+ const ink_1 = require("ink");
61
+ const profiler_1 = require("@clary-so/profiler");
62
+ const pathToDist = path_1.default.join(__dirname, "../../dist");
63
+ const createExpressApp = ({ port }) => {
64
+ const app = (0, express_1.default)();
65
+ app.use((0, cors_1.default)({ origin: true }));
66
+ app.get("/", (_, res) => __awaiter(void 0, void 0, void 0, function* () {
67
+ try {
68
+ const indexHtml = path_1.default.join(pathToDist, "index.html");
69
+ let data = yield fs_1.promises.readFile(indexHtml, "utf8");
70
+ data = data.replace("localhost:4000", `localhost:${port}`);
71
+ res.send(data);
72
+ }
73
+ catch (err) {
74
+ res.status(500).send("Error loading the page");
75
+ }
76
+ }));
77
+ // Serve the webapp folder built by parcel
78
+ app.use(express_1.default.static(pathToDist));
79
+ return app;
80
+ };
81
+ exports.createExpressApp = createExpressApp;
82
+ const allowOnlyOneSocketClient = (io, onConnect) => {
83
+ let currentSocketClient = null;
84
+ io.on("connection", (socket) => {
85
+ currentSocketClient === null || currentSocketClient === void 0 ? void 0 : currentSocketClient.disconnect(true);
86
+ onConnect(socket);
87
+ currentSocketClient = socket;
88
+ });
89
+ };
90
+ const useCleanupOnManualExit = () => {
91
+ (0, ink_1.useInput)((input) => __awaiter(void 0, void 0, void 0, function* () {
92
+ switch (input) {
93
+ case "q":
94
+ case "c":
95
+ profiler_1.profiler.cleanup();
96
+ process.exit();
97
+ }
98
+ }));
99
+ };
100
+ const ServerApp = ({ port }) => {
101
+ const [socket, setSocket] = (0, react_1.useState)(null);
102
+ const webAppUrl = (0, constants_1.getWebAppUrl)(port);
103
+ (0, react_1.useEffect)(() => {
104
+ const app = (0, exports.createExpressApp)({ port });
105
+ const server = http_1.default.createServer(app);
106
+ const io = new socket_io_1.Server(server, {
107
+ cors: {
108
+ origin: [webAppUrl],
109
+ methods: ["GET", "POST"],
110
+ },
111
+ });
112
+ allowOnlyOneSocketClient(io, setSocket);
113
+ server.listen(port, () => {
114
+ (0, shell_1.open)(webAppUrl);
115
+ });
116
+ return () => {
117
+ server.close();
118
+ io.close();
119
+ };
120
+ }, [port, webAppUrl]);
121
+ useCleanupOnManualExit();
122
+ return socket ? (react_1.default.createElement(ServerSocketConnectionApp_1.ServerSocketConnectionApp, { socket: socket, url: webAppUrl })) : (react_1.default.createElement(HostAndPortInfo_1.HostAndPortInfo, { url: webAppUrl }));
123
+ };
124
+ exports.ServerApp = ServerApp;
125
+ const runServerApp = (port) => {
126
+ (0, ink_1.render)(react_1.default.createElement(exports.ServerApp, { port: port }),
127
+ // handle it ourselves in the profiler to kill child processes thanks to useCleanupOnManualExit
128
+ { exitOnCtrlC: false });
129
+ };
130
+ exports.runServerApp = runServerApp;
131
+ //# sourceMappingURL=ServerApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerApp.js","sourceRoot":"","sources":["../../src/server/ServerApp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { SocketType } from "./socket/socketInterface";
3
+ export declare const ServerSocketConnectionApp: ({ socket, url }: {
4
+ socket: SocketType;
5
+ url: string;
6
+ }) => React.JSX.Element;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.ServerSocketConnectionApp = void 0;
46
+ const e2e_1 = require("@clary-so/e2e");
47
+ const logger_1 = require("@clary-so/logger");
48
+ const profiler_1 = require("@clary-so/profiler");
49
+ const react_1 = __importStar(require("react"));
50
+ const HostAndPortInfo_1 = require("./components/HostAndPortInfo");
51
+ const socketInterface_1 = require("./socket/socketInterface");
52
+ const socketState_1 = require("./socket/socketState");
53
+ const useBundleIdControls_1 = require("./useBundleIdControls");
54
+ const useLogSocketEvents_1 = require("../common/useLogSocketEvents");
55
+ const ServerSocketConnectionApp = ({ socket, url }) => {
56
+ (0, useLogSocketEvents_1.useLogSocketEvents)(socket);
57
+ const [state, setState] = (0, socketState_1.useSocketState)(socket);
58
+ const performanceMeasureRef = react_1.default.useRef(null);
59
+ const stop = (0, react_1.useCallback)(() => __awaiter(void 0, void 0, void 0, function* () {
60
+ var _a;
61
+ (_a = performanceMeasureRef.current) === null || _a === void 0 ? void 0 : _a.forceStop();
62
+ setState({
63
+ isMeasuring: false,
64
+ });
65
+ }), [setState]);
66
+ (0, useBundleIdControls_1.useBundleIdControls)(socket, setState, stop);
67
+ (0, react_1.useEffect)(() => {
68
+ const updateMeasures = (measures) => setState((state) => (0, socketState_1.updateMeasuresReducer)(state, measures));
69
+ const addNewResult = (bundleId) => setState((state) => (0, socketState_1.addNewResultReducer)(state, `${bundleId}${state.results.length > 0 ? ` (${state.results.length + 1})` : ""}`, profiler_1.profiler.detectDeviceRefreshRate()));
70
+ socket.on(socketInterface_1.SocketEvents.START, () => __awaiter(void 0, void 0, void 0, function* () {
71
+ var _a;
72
+ setState({
73
+ isMeasuring: true,
74
+ });
75
+ if (!state.bundleId) {
76
+ logger_1.Logger.error("No bundle id provided");
77
+ return;
78
+ }
79
+ profiler_1.profiler.installProfilerOnDevice();
80
+ performanceMeasureRef.current = new e2e_1.PerformanceMeasurer(state.bundleId, {
81
+ recordOptions: {
82
+ record: false,
83
+ },
84
+ });
85
+ addNewResult(state.bundleId);
86
+ (_a = performanceMeasureRef.current) === null || _a === void 0 ? void 0 : _a.start(() => { var _a; return updateMeasures(((_a = performanceMeasureRef.current) === null || _a === void 0 ? void 0 : _a.measures) || []); });
87
+ }));
88
+ socket.on(socketInterface_1.SocketEvents.STOP, stop);
89
+ socket.on(socketInterface_1.SocketEvents.RESET, () => {
90
+ stop();
91
+ setState({
92
+ results: [],
93
+ });
94
+ });
95
+ return () => {
96
+ socket.removeAllListeners(socketInterface_1.SocketEvents.START);
97
+ socket.removeAllListeners(socketInterface_1.SocketEvents.STOP);
98
+ socket.removeAllListeners(socketInterface_1.SocketEvents.RESET);
99
+ };
100
+ }, [setState, socket, state.bundleId, stop]);
101
+ return (react_1.default.createElement(react_1.default.Fragment, null,
102
+ react_1.default.createElement(HostAndPortInfo_1.HostAndPortInfo, { url: url })));
103
+ };
104
+ exports.ServerSocketConnectionApp = ServerSocketConnectionApp;
105
+ //# sourceMappingURL=ServerSocketConnectionApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerSocketConnectionApp.js","sourceRoot":"","sources":["../../src/server/ServerSocketConnectionApp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const commander_1 = require("commander");
47
+ const constants_1 = require("./constants");
48
+ commander_1.program
49
+ .command("measure")
50
+ .summary("Measure performance of an Android app")
51
+ .description(`Measure performance of an Android app. Display the results live in a web app.
52
+
53
+ Main usage:
54
+ flashlight measure`)
55
+ .option("-p, --port [port]", "Specify the port number for the server")
56
+ .action((options) => __awaiter(void 0, void 0, void 0, function* () {
57
+ const port = Number(options.port) || constants_1.DEFAULT_PORT;
58
+ // measure command can be a bit slow to load since we run ink, express and socket.io, so lazy load it
59
+ const { runServerApp } = yield Promise.resolve().then(() => __importStar(require("./ServerApp")));
60
+ runServerApp(port);
61
+ }));
62
+ commander_1.program.parse();
63
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/server/bin.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA2C;AAE3C,mBAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,OAAO,CAAC,uCAAuC,CAAC;KAChD,WAAW,CACV;;;mBAGe,CAChB;KACA,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;KACrE,MAAM,CAAC,CAAO,OAAO,EAAE,EAAE;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,wBAAY,CAAC;IAClD,qGAAqG;IACrG,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;IACrD,YAAY,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAA,CAAC,CAAC;AAEL,mBAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export declare const HostAndPortInfo: ({ url }: {
3
+ url: string;
4
+ }) => React.JSX.Element;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HostAndPortInfo = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const HostAndPortInfo = ({ url }) => (react_1.default.createElement(ink_1.Box, { padding: 1, flexDirection: "column" },
10
+ react_1.default.createElement(ink_1.Text, null,
11
+ react_1.default.createElement(ink_1.Text, { bold: true }, "Flashlight web app running on: "),
12
+ react_1.default.createElement(ink_1.Text, { color: "blue" }, url))));
13
+ exports.HostAndPortInfo = HostAndPortInfo;
14
+ //# sourceMappingURL=HostAndPortInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostAndPortInfo.js","sourceRoot":"","sources":["../../../src/server/components/HostAndPortInfo.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6BAAgC;AAEzB,MAAM,eAAe,GAAG,CAAC,EAAE,GAAG,EAAmB,EAAE,EAAE,CAAC,CAC3D,8BAAC,SAAG,IAAC,OAAO,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ;IACrC,8BAAC,UAAI;QACH,8BAAC,UAAI,IAAC,IAAI,4CAAuC;QACjD,8BAAC,UAAI,IAAC,KAAK,EAAE,MAAM,IAAG,GAAG,CAAQ,CAC5B,CACH,CACP,CAAC;AAPW,QAAA,eAAe,mBAO1B"}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_PORT = 4000;
2
+ export declare const getWebAppUrl: (port?: number) => string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWebAppUrl = exports.DEFAULT_PORT = void 0;
4
+ exports.DEFAULT_PORT = 4000;
5
+ const getWebAppUrl = (port = exports.DEFAULT_PORT) => {
6
+ if (process.env.DEVELOPMENT_MODE === "true") {
7
+ return "http://localhost:1234";
8
+ }
9
+ return `http://localhost:${port}`;
10
+ };
11
+ exports.getWebAppUrl = getWebAppUrl;
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/server/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,YAAY,GAAG,CAAC,OAAe,oBAAY,EAAE,EAAE;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAC5C,OAAO,uBAAuB,CAAC;IACjC,CAAC;IACD,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB"}
@@ -0,0 +1,37 @@
1
+ import { TestCaseResult } from "@clary-so/types";
2
+ import { Server, Socket } from "socket.io";
3
+ export interface SocketData {
4
+ isMeasuring: boolean;
5
+ bundleId: string | null;
6
+ results: TestCaseResult[];
7
+ }
8
+ export interface ServerToClientEvents {
9
+ updateState: (state: SocketData) => void;
10
+ sendError(error: unknown): void;
11
+ }
12
+ export interface ClientToServerEvents {
13
+ start: () => void;
14
+ stop: () => void;
15
+ reset: () => void;
16
+ autodetectBundleId: () => void;
17
+ setBundleId: (bundleId: string) => void;
18
+ autodetectRefreshRate: () => void;
19
+ }
20
+ interface InterServerEvents {
21
+ ping: () => void;
22
+ }
23
+ export type SocketServer = Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>;
24
+ export type SocketType = Socket<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>;
25
+ export declare enum SocketEvents {
26
+ START = "start",
27
+ STOP = "stop",
28
+ RESET = "reset",
29
+ AUTODETECT_BUNDLE_ID = "autodetectBundleId",
30
+ SET_BUNDLE_ID = "setBundleId",
31
+ UPDATE_STATE = "updateState",
32
+ SEND_ERROR = "sendError",
33
+ PING = "ping",
34
+ CONNECT = "connect",
35
+ DISCONNECT = "disconnect"
36
+ }
37
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SocketEvents = void 0;
4
+ var SocketEvents;
5
+ (function (SocketEvents) {
6
+ SocketEvents["START"] = "start";
7
+ SocketEvents["STOP"] = "stop";
8
+ SocketEvents["RESET"] = "reset";
9
+ SocketEvents["AUTODETECT_BUNDLE_ID"] = "autodetectBundleId";
10
+ SocketEvents["SET_BUNDLE_ID"] = "setBundleId";
11
+ SocketEvents["UPDATE_STATE"] = "updateState";
12
+ SocketEvents["SEND_ERROR"] = "sendError";
13
+ SocketEvents["PING"] = "ping";
14
+ SocketEvents["CONNECT"] = "connect";
15
+ SocketEvents["DISCONNECT"] = "disconnect";
16
+ })(SocketEvents || (exports.SocketEvents = SocketEvents = {}));
17
+ //# sourceMappingURL=socketInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketInterface.js","sourceRoot":"","sources":["../../../src/server/socket/socketInterface.ts"],"names":[],"mappings":";;;AAyCA,IAAY,YAWX;AAXD,WAAY,YAAY;IACtB,+BAAe,CAAA;IACf,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,2DAA2C,CAAA;IAC3C,6CAA6B,CAAA;IAC7B,4CAA4B,CAAA;IAC5B,wCAAwB,CAAA;IACxB,6BAAa,CAAA;IACb,mCAAmB,CAAA;IACnB,yCAAyB,CAAA;AAC3B,CAAC,EAXW,YAAY,4BAAZ,YAAY,QAWvB"}
@@ -0,0 +1,5 @@
1
+ import { Measure } from "@clary-so/types";
2
+ import { SocketType, SocketData } from "./socketInterface";
3
+ export declare const useSocketState: (socket: SocketType) => readonly [SocketData, (newState: Partial<SocketData> | ((previousState: SocketData) => SocketData)) => void];
4
+ export declare const updateMeasuresReducer: (state: SocketData, measures: Measure[]) => SocketData;
5
+ export declare const addNewResultReducer: (state: SocketData, name: string, refreshRate: number) => SocketData;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addNewResultReducer = exports.updateMeasuresReducer = exports.useSocketState = void 0;
4
+ const types_1 = require("@clary-so/types");
5
+ const react_1 = require("react");
6
+ const socketInterface_1 = require("./socketInterface");
7
+ const useSocketState = (socket) => {
8
+ const [state, _setState] = (0, react_1.useState)({
9
+ isMeasuring: false,
10
+ bundleId: null,
11
+ results: [],
12
+ });
13
+ const setState = (newState) => {
14
+ _setState(typeof newState === "function"
15
+ ? newState
16
+ : (previousState) => (Object.assign(Object.assign({}, previousState), newState)));
17
+ };
18
+ (0, react_1.useEffect)(() => {
19
+ socket.emit(socketInterface_1.SocketEvents.UPDATE_STATE, state);
20
+ }, [state, socket]);
21
+ return [state, setState];
22
+ };
23
+ exports.useSocketState = useSocketState;
24
+ const updateMeasuresReducer = (state, measures) => (Object.assign(Object.assign({}, state), { results: [
25
+ ...state.results.slice(0, state.results.length - 1),
26
+ Object.assign(Object.assign({}, state.results[state.results.length - 1]), { iterations: [
27
+ {
28
+ measures,
29
+ time: (measures.length || 0) * types_1.POLLING_INTERVAL,
30
+ status: "SUCCESS",
31
+ },
32
+ ] }),
33
+ ] }));
34
+ exports.updateMeasuresReducer = updateMeasuresReducer;
35
+ const addNewResultReducer = (state, name, refreshRate) => (Object.assign(Object.assign({}, state), { results: [
36
+ ...state.results,
37
+ {
38
+ name,
39
+ iterations: [],
40
+ status: "SUCCESS",
41
+ specs: {
42
+ refreshRate,
43
+ },
44
+ },
45
+ ] }));
46
+ exports.addNewResultReducer = addNewResultReducer;
47
+ //# sourceMappingURL=socketState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketState.js","sourceRoot":"","sources":["../../../src/server/socket/socketState.ts"],"names":[],"mappings":";;;AAAA,2CAA4D;AAC5D,iCAA4C;AAC5C,uDAAyE;AAElE,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAE,EAAE;IACnD,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAa;QAC9C,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CACf,QAA2E,EAC3E,EAAE;QACF,SAAS,CACP,OAAO,QAAQ,KAAK,UAAU;YAC5B,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,iCACd,aAAa,GACb,QAAQ,EACX,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,8BAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAC;AACpC,CAAC,CAAC;AAzBW,QAAA,cAAc,kBAyBzB;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAAiB,EAAE,QAAmB,EAAc,EAAE,CAAC,iCACxF,KAAK,KACR,OAAO,EAAE;QACP,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;wCAE9C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAC1C,UAAU,EAAE;gBACV;oBACE,QAAQ;oBACR,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,wBAAgB;oBAC/C,MAAM,EAAE,SAAS;iBAClB;aACF;KAEJ,IACD,CAAC;AAfU,QAAA,qBAAqB,yBAe/B;AAEI,MAAM,mBAAmB,GAAG,CACjC,KAAiB,EACjB,IAAY,EACZ,WAAmB,EACP,EAAE,CAAC,iCACZ,KAAK,KACR,OAAO,EAAE;QACP,GAAG,KAAK,CAAC,OAAO;QAChB;YACE,IAAI;YACJ,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACL,WAAW;aACZ;SACF;KACF,IACD,CAAC;AAjBU,QAAA,mBAAmB,uBAiB7B"}
@@ -0,0 +1,2 @@
1
+ import { SocketType, SocketData } from "./socket/socketInterface";
2
+ export declare const useBundleIdControls: (socket: SocketType, setState: (state: Partial<SocketData>) => void, stop: () => void) => void;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useBundleIdControls = void 0;
4
+ const profiler_1 = require("@clary-so/profiler");
5
+ const react_1 = require("react");
6
+ const socketInterface_1 = require("./socket/socketInterface");
7
+ const useBundleIdControls = (socket, setState, stop) => {
8
+ (0, react_1.useEffect)(() => {
9
+ socket.on(socketInterface_1.SocketEvents.SET_BUNDLE_ID, (bundleId) => {
10
+ setState({
11
+ bundleId,
12
+ });
13
+ });
14
+ socket.on(socketInterface_1.SocketEvents.AUTODETECT_BUNDLE_ID, () => {
15
+ stop();
16
+ try {
17
+ const bundleId = profiler_1.profiler.detectCurrentBundleId();
18
+ setState({
19
+ bundleId,
20
+ });
21
+ }
22
+ catch (error) {
23
+ socket.emit(socketInterface_1.SocketEvents.SEND_ERROR, error instanceof Error ? error.message : "unknown error");
24
+ }
25
+ });
26
+ return () => {
27
+ socket.removeAllListeners(socketInterface_1.SocketEvents.SET_BUNDLE_ID);
28
+ socket.removeAllListeners(socketInterface_1.SocketEvents.AUTODETECT_BUNDLE_ID);
29
+ };
30
+ }, [setState, socket, stop]);
31
+ };
32
+ exports.useBundleIdControls = useBundleIdControls;
33
+ //# sourceMappingURL=useBundleIdControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBundleIdControls.js","sourceRoot":"","sources":["../../src/server/useBundleIdControls.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAC9C,iCAAkC;AAClC,8DAAgF;AAEzE,MAAM,mBAAmB,GAAG,CACjC,MAAkB,EAClB,QAA8C,EAC9C,IAAgB,EAChB,EAAE;IACF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,CAAC,EAAE,CAAC,8BAAY,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE;YACjD,QAAQ,CAAC;gBACP,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,8BAAY,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAChD,IAAI,EAAE,CAAC;YAEP,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,mBAAQ,CAAC,qBAAqB,EAAE,CAAC;gBAClD,QAAQ,CAAC;oBACP,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CACT,8BAAY,CAAC,UAAU,EACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,kBAAkB,CAAC,8BAAY,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,CAAC,kBAAkB,CAAC,8BAAY,CAAC,oBAAoB,CAAC,CAAC;QAC/D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAjCW,QAAA,mBAAmB,uBAiC9B"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const MeasureWebApp: () => React.JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MeasureWebApp = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const web_reporter_ui_1 = require("@clary-so/web-reporter-ui");
9
+ const BundleIdSelector_1 = require("./components/BundleIdSelector");
10
+ const StartButton_1 = require("./components/StartButton");
11
+ const icons_material_1 = require("@mui/icons-material");
12
+ const AppBar_1 = require("./components/AppBar");
13
+ const useMeasures_1 = require("./useMeasures");
14
+ const SocketState_1 = require("./components/SocketState");
15
+ (0, web_reporter_ui_1.setThemeAtRandom)();
16
+ const MeasureWebApp = () => {
17
+ const { autodetect, bundleId, start, stop, results, isMeasuring, reset, setBundleId } = (0, useMeasures_1.useMeasures)();
18
+ return (react_1.default.createElement("div", { className: "bg-light-charcoal h-full text-black" },
19
+ react_1.default.createElement(SocketState_1.SocketState, null),
20
+ react_1.default.createElement(AppBar_1.AppBar, null,
21
+ react_1.default.createElement(BundleIdSelector_1.BundleIdSelector, { autodetect: autodetect, bundleId: bundleId, onChange: setBundleId }),
22
+ bundleId ? (react_1.default.createElement("div", { className: "flex flex-row gap-2" },
23
+ react_1.default.createElement(StartButton_1.StartButton, { start: start, stop: stop, isMeasuring: isMeasuring }),
24
+ react_1.default.createElement("div", { "data-theme": (0, web_reporter_ui_1.getThemeColorPalette)()[1] },
25
+ react_1.default.createElement(web_reporter_ui_1.Button, { onClick: reset, icon: react_1.default.createElement(icons_material_1.Delete, null) }, "Reset")))) : null),
26
+ react_1.default.createElement(web_reporter_ui_1.IterationsReporterView, { results: results })));
27
+ };
28
+ exports.MeasureWebApp = MeasureWebApp;
29
+ //# sourceMappingURL=MeasureWebApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeasureWebApp.js","sourceRoot":"","sources":["../../src/webapp/MeasureWebApp.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+DAKmC;AAEnC,oEAAiE;AACjE,0DAAuD;AACvD,wDAA6C;AAC7C,gDAA6C;AAC7C,+CAA4C;AAC5C,0DAAuD;AAEvD,IAAA,kCAAgB,GAAE,CAAC;AAEZ,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GACnF,IAAA,yBAAW,GAAE,CAAC;IAEhB,OAAO,CACL,uCAAK,SAAS,EAAC,qCAAqC;QAClD,8BAAC,yBAAW,OAAG;QACf,8BAAC,eAAM;YACL,8BAAC,mCAAgB,IAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAI;YACtF,QAAQ,CAAC,CAAC,CAAC,CACV,uCAAK,SAAS,EAAC,qBAAqB;gBAClC,8BAAC,yBAAW,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,GAAI;gBAGnE,qDAAiB,IAAA,sCAAoB,GAAE,CAAC,CAAC,CAAC;oBACxC,8BAAC,wBAAM,IAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,8BAAC,uBAAM,OAAG,YAE/B,CACL,CACF,CACP,CAAC,CAAC,CAAC,IAAI,CACD;QACT,8BAAC,wCAAsB,IAAC,OAAO,EAAE,OAAO,GAAI,CACxC,CACP,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,aAAa,iBAyBxB"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export declare const AppBar: ({ children }: {
3
+ children: React.ReactNode;
4
+ }) => React.JSX.Element;