cyperful 0.1.4 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cyperful/commands.rb +19 -0
- data/lib/cyperful/driver.rb +111 -46
- data/lib/cyperful/framework_injections.rb +38 -1
- data/lib/cyperful/test_parser.rb +1 -1
- data/lib/cyperful/ui_server.rb +12 -0
- data/lib/cyperful.rb +22 -7
- data/public/assets/index-CDElGKtz.css +1 -0
- data/public/assets/index-DMlaSnZ7.js +54 -0
- data/public/frame-agent.js +120 -0
- data/public/index.html +3 -5
- metadata +9 -9
- data/public/assets/index-25bd736c.css +0 -1
- data/public/assets/index-c11ede11.js +0 -40
- data/public/assets/logo-169f5e20.svg +0 -72
- data/watcher.js +0 -151
- /data/public/assets/{favicon-9f6bc28c.ico → favicon-DMdBZQlK.ico} +0 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
(() => {
|
2
|
+
const f = console.log, d = (...t) => f("[Cyperful Agent]", ...t);
|
3
|
+
d("Loading...");
|
4
|
+
const { CYPERFUL_ORIGIN: u } = __CYPERFUL_CONFIG__;
|
5
|
+
if (window.location.origin === u) {
|
6
|
+
d("Ignoring parent frame (Why are we here?)");
|
7
|
+
return;
|
8
|
+
}
|
9
|
+
let y = 0;
|
10
|
+
const i = (t, n, e = null) => {
|
11
|
+
let s = null;
|
12
|
+
try {
|
13
|
+
const r = Date.now(), c = `${r}-${y++}`;
|
14
|
+
if ("url" in n && n.url != null)
|
15
|
+
try {
|
16
|
+
const o = new URL(n.url, window.location.origin);
|
17
|
+
if (o.origin === u)
|
18
|
+
return null;
|
19
|
+
o.origin === window.location.origin && (n.url = o.pathname + o.search + o.hash);
|
20
|
+
} catch {
|
21
|
+
}
|
22
|
+
s = {
|
23
|
+
type: t,
|
24
|
+
data: n,
|
25
|
+
id: c,
|
26
|
+
timestamp: r,
|
27
|
+
start_id: e ? e.id : void 0
|
28
|
+
}, window.parent.postMessage(s, u);
|
29
|
+
} catch {
|
30
|
+
}
|
31
|
+
return s;
|
32
|
+
};
|
33
|
+
for (const t of [
|
34
|
+
"log",
|
35
|
+
"error",
|
36
|
+
"warn",
|
37
|
+
"info",
|
38
|
+
"dir",
|
39
|
+
"debug"
|
40
|
+
]) {
|
41
|
+
const n = console[t];
|
42
|
+
n && (console[t] = (...e) => {
|
43
|
+
n.apply(console, e), i("log", { level: t, args: e });
|
44
|
+
});
|
45
|
+
}
|
46
|
+
window.addEventListener("error", (t) => {
|
47
|
+
i("global_error", { message: t.error.toString() });
|
48
|
+
}), window.addEventListener("unhandledrejection", (t) => {
|
49
|
+
i("unhandledrejection", { message: t.reason.toString() });
|
50
|
+
});
|
51
|
+
function w(t) {
|
52
|
+
try {
|
53
|
+
if (typeof t == "string")
|
54
|
+
return JSON.parse(t);
|
55
|
+
} catch {
|
56
|
+
return t;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
function g(t) {
|
60
|
+
const n = {};
|
61
|
+
for (const [e, s] of t.entries())
|
62
|
+
n[e] = s.toString();
|
63
|
+
return n;
|
64
|
+
}
|
65
|
+
const _ = window.XMLHttpRequest;
|
66
|
+
function m() {
|
67
|
+
const t = new _(), n = t.open;
|
68
|
+
return t.open = (...e) => {
|
69
|
+
const [s, r, c] = e, o = i("xhr", {
|
70
|
+
method: s,
|
71
|
+
url: r
|
72
|
+
// body,
|
73
|
+
});
|
74
|
+
return t.addEventListener("load", () => {
|
75
|
+
o && i(
|
76
|
+
"xhr:finished",
|
77
|
+
{ status: t.status, response: t.response },
|
78
|
+
o
|
79
|
+
);
|
80
|
+
}), n.apply(this, e);
|
81
|
+
}, t;
|
82
|
+
}
|
83
|
+
window.XMLHttpRequest = m;
|
84
|
+
const L = window.fetch;
|
85
|
+
window.fetch = (...t) => {
|
86
|
+
const [n, e = {}] = typeof t[0] == "string" || t[0] instanceof URL ? [t[0], t[1]] : [t[0].url, t[0]], s = e.method ?? "GET", r = e.body, c = e.headers || {}, o = c["content-type"] || c["Content-Type"] || void 0, v = r instanceof FormData ? g(r) : o != null && o.includes("application/json") ? w(r) : r, p = i("fetch", {
|
87
|
+
method: s,
|
88
|
+
url: n.toString(),
|
89
|
+
body: v,
|
90
|
+
bodyType: o
|
91
|
+
}), h = L(...t);
|
92
|
+
return h.then(async (a) => {
|
93
|
+
const l = a.headers.get("content-type") || "", b = l.includes("application/json") ? await a.clone().json() : l.includes("text/") ? await a.clone().text() : `[[ Unhandled content-type: ${l || "<empty>"} ]]`;
|
94
|
+
p && i(
|
95
|
+
"fetch:finished",
|
96
|
+
{
|
97
|
+
status: a.status,
|
98
|
+
responseType: l || void 0,
|
99
|
+
response: b
|
100
|
+
},
|
101
|
+
p
|
102
|
+
);
|
103
|
+
}).catch(() => {
|
104
|
+
}), h;
|
105
|
+
};
|
106
|
+
const S = history.pushState;
|
107
|
+
history.pushState = (...t) => {
|
108
|
+
S.apply(history, t), i("client_navigate", {
|
109
|
+
url: location.href,
|
110
|
+
replace: !1
|
111
|
+
});
|
112
|
+
};
|
113
|
+
const R = history.replaceState;
|
114
|
+
history.replaceState = (...t) => {
|
115
|
+
R.apply(history, t), i("client_navigate", {
|
116
|
+
url: location.href,
|
117
|
+
replace: !0
|
118
|
+
});
|
119
|
+
}, d("Loaded.");
|
120
|
+
})();
|
data/public/index.html
CHANGED
@@ -3,12 +3,10 @@
|
|
3
3
|
<head>
|
4
4
|
<meta charset="UTF-8" />
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
-
|
7
|
-
|
8
|
-
<link rel="icon" href="/assets/favicon-9f6bc28c.ico" />
|
6
|
+
<link rel="icon" href="/assets/favicon-DMdBZQlK.ico" />
|
9
7
|
<title>Cyperful</title>
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
11
|
-
<link rel="stylesheet" href="/assets/index-
|
8
|
+
<script type="module" crossorigin src="/assets/index-DMlaSnZ7.js"></script>
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CDElGKtz.css">
|
12
10
|
</head>
|
13
11
|
<body>
|
14
12
|
<div id="root"></div>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cyperful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wyatt Ades
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -59,16 +59,16 @@ extensions: []
|
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
61
|
- lib/cyperful.rb
|
62
|
+
- lib/cyperful/commands.rb
|
62
63
|
- lib/cyperful/driver.rb
|
63
64
|
- lib/cyperful/framework_injections.rb
|
64
65
|
- lib/cyperful/test_parser.rb
|
65
66
|
- lib/cyperful/ui_server.rb
|
66
|
-
- public/assets/favicon-
|
67
|
-
- public/assets/index-
|
68
|
-
- public/assets/index-
|
69
|
-
- public/
|
67
|
+
- public/assets/favicon-DMdBZQlK.ico
|
68
|
+
- public/assets/index-CDElGKtz.css
|
69
|
+
- public/assets/index-DMlaSnZ7.js
|
70
|
+
- public/frame-agent.js
|
70
71
|
- public/index.html
|
71
|
-
- watcher.js
|
72
72
|
homepage: https://github.com/stepful/cyperful
|
73
73
|
licenses:
|
74
74
|
- MIT
|
@@ -88,8 +88,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
|
-
rubygems_version: 3.
|
91
|
+
rubygems_version: 3.5.6
|
92
92
|
signing_key:
|
93
93
|
specification_version: 4
|
94
|
-
summary:
|
94
|
+
summary: Interactive test debugger for Capybara tests
|
95
95
|
test_files: []
|
@@ -1 +0,0 @@
|
|
1
|
-
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-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{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--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: rgb(59 130 246 / .5);--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: }::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: rgb(59 130 246 / .5);--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: }.pointer-events-none{pointer-events:none}.static{position:static}.absolute{position:absolute}.relative{position:relative}.left-0{left:0px}.right-0{right:0px}.right-4{right:1rem}.top-0{top:0px}.top-1{top:.25rem}.m-4{margin:1rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-1{margin-left:.25rem}.mr-2{margin-right:.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-16{max-height:4rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-full{width:100%}.flex-1{flex:1 1 0%}.basis-96{flex-basis:24rem}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.bg-\[\#121b2e\]{--tw-bg-opacity: 1;background-color:rgb(18 27 46 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity: 1;background-color:rgb(251 146 60 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity))}.p-2{padding:.5rem}.p-4{padding:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pt-0{padding-top:0}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[1\.25em\]{font-size:1.25em}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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)}.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)}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.Logo g{transform-origin:50% 50%;animation:rotate 5s linear infinite;animation-play-state:paused}.Logo.Logo--animating g{animation-play-state:running}.Logo g:nth-child(1){animation-duration:1s}.Logo g:nth-child(2){animation-duration:1.5s}.Logo g:nth-child(3){animation-duration:3s}.Logo g:nth-child(4){animation-duration:4s}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity))}.hover\:bg-orange-500:hover{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.hover\:bg-yellow-600:hover{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.group:hover .group-hover\:block{display:block}
|