cyperful 0.1.3 → 0.1.7

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.
@@ -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:2s}.Logo g:nth-child(2){animation-duration:2.5s}.Logo g:nth-child(3){animation-duration:3s}.Logo g:nth-child(4){animation-duration:3.5s}.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}
@@ -1,72 +0,0 @@
1
- <svg width="237" height="239" viewBox="0 0 237 239" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g filter="url(#filter0_d_208_72)">
3
- <path
4
- d="M172.902 127.562C170.237 146.148 157.831 162.767 139.043 169.927C111.486 180.427 80.6342 166.599 70.1341 139.042C59.6339 111.485 73.4612 80.6341 101.018 70.134C119.807 62.9748 140.127 67.1248 154.484 79.2248"
5
- stroke="#E92727" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" />
6
- </g>
7
- <g filter="url(#filter1_d_208_72)">
8
- <path
9
- d="M178.662 88.1006C166.19 65.2225 140.86 50.8365 113.31 53.6248C76.6349 57.3366 49.9131 90.0763 53.6249 126.751C57.3367 163.426 90.0764 190.147 126.751 186.436C154.302 183.647 176.236 164.478 183.871 139.565"
10
- stroke="#EE7823" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" />
11
- </g>
12
- <g filter="url(#filter2_d_208_72)">
13
- <path
14
- d="M198.817 105.502C192.777 72.7277 166.52 45.9247 131.712 40.7931C87.9504 34.3416 47.2447 64.5872 40.7931 108.349C34.3416 152.11 64.5873 192.816 108.349 199.267C143.157 204.399 176.032 186.313 191.273 156.676"
15
- stroke="#FFCF00" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" />
16
- </g>
17
- <g filter="url(#filter3_d_208_72)">
18
- <path
19
- d="M213.245 126.888C216.244 86.3927 192.399 47.1475 152.406 32.3757C103.996 14.4951 50.2564 39.2443 32.3757 87.6546C14.4951 136.065 39.2443 189.804 87.6546 207.685C127.648 222.457 171.278 208.134 195.323 175.411"
20
- stroke="#009154" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" />
21
- </g>
22
- <defs>
23
- <filter id="filter0_d_208_72" x="49.618" y="55.6187" width="140.285" height="140.824"
24
- filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
25
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
26
- <feColorMatrix in="SourceAlpha" type="matrix"
27
- values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
28
- <feOffset dy="6" />
29
- <feGaussianBlur stdDeviation="4.5" />
30
- <feComposite in2="hardAlpha" operator="out" />
31
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" />
32
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_208_72" />
33
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_208_72" result="shape" />
34
- </filter>
35
- <filter id="filter1_d_208_72" x="36.28" y="42.2799" width="164.593" height="167.501"
36
- filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
37
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
38
- <feColorMatrix in="SourceAlpha" type="matrix"
39
- values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
40
- <feOffset dy="6" />
41
- <feGaussianBlur stdDeviation="4.5" />
42
- <feComposite in2="hardAlpha" operator="out" />
43
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" />
44
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_208_72" />
45
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_208_72" result="shape" />
46
- </filter>
47
- <filter id="filter2_d_208_72" x="22.925" y="28.9249" width="192.894" height="194.211"
48
- filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
49
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
50
- <feColorMatrix in="SourceAlpha" type="matrix"
51
- values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
52
- <feOffset dy="6" />
53
- <feGaussianBlur stdDeviation="4.5" />
54
- <feComposite in2="hardAlpha" operator="out" />
55
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" />
56
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_208_72" />
57
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_208_72" result="shape" />
58
- </filter>
59
- <filter id="filter3_d_208_72" x="9.56018" y="15.5602" width="220.938" height="220.941"
60
- filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
61
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
62
- <feColorMatrix in="SourceAlpha" type="matrix"
63
- values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
64
- <feOffset dy="6" />
65
- <feGaussianBlur stdDeviation="4.5" />
66
- <feComposite in2="hardAlpha" operator="out" />
67
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" />
68
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_208_72" />
69
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_208_72" result="shape" />
70
- </filter>
71
- </defs>
72
- </svg>
data/watcher.js DELETED
@@ -1,151 +0,0 @@
1
- (() => {
2
- const log = console.log;
3
-
4
- log('Cyperful watcher loading...');
5
-
6
- const CYPERFUL_ORIGIN = 'http://localhost:3004';
7
-
8
- let idCounter = 0;
9
- const notify = (type, data, startEvent = null) => {
10
- let evt;
11
- try {
12
- const timestamp = Date.now();
13
- const id = `${timestamp}-${idCounter++}`;
14
-
15
- if (data.url != null) {
16
- try {
17
- const url = new URL(data.url, window.location.origin);
18
-
19
- // don't show our own requests
20
- if (url.origin === CYPERFUL_ORIGIN) return null;
21
-
22
- if (url.origin === window.location.origin) {
23
- data.url = url.pathname + url.search + url.hash;
24
- }
25
- } catch (_err) {
26
- // e.g. invalid URL
27
- }
28
- }
29
-
30
- evt = {
31
- type,
32
- data,
33
- id,
34
- timestamp,
35
- start_id: startEvent ? startEvent.id : undefined,
36
- };
37
-
38
- window.parent.postMessage(evt, CYPERFUL_ORIGIN);
39
- } catch (_err) {
40
- // e.g. blocked by CORS
41
- // e.g. invalid payload
42
- }
43
- return evt || {};
44
- };
45
-
46
- // capture console logs
47
- for (const level of ['log', 'error', 'warn', 'info', 'dir', 'debug']) {
48
- const original = console[level];
49
- if (!original) continue;
50
- console[level] = (...args) => {
51
- original.apply(console, args);
52
- notify('log', { level, args });
53
- };
54
- }
55
-
56
- // capture global errors
57
- window.addEventListener('error', (event) => {
58
- notify('global_error', { message: event.error.toString() });
59
- });
60
- window.addEventListener('unhandledrejection', (event) => {
61
- notify('unhandledrejection', { message: event.reason.toString() });
62
- });
63
-
64
- // capture XHR network requests
65
- const OriginalXHR = window.XMLHttpRequest;
66
- function XHR() {
67
- const xhr = new OriginalXHR();
68
- const originalOpen = xhr.open;
69
- xhr.open = (...args) => {
70
- const start = notify('xhr', {
71
- method: args[0],
72
- url: args[1],
73
- // body: args[2],
74
- });
75
- xhr.addEventListener('load', () => {
76
- if (start)
77
- notify(
78
- 'xhr:finished',
79
- { status: xhr.status, response: xhr.response },
80
- start,
81
- );
82
- });
83
- return originalOpen.apply(this, args);
84
- };
85
- return xhr;
86
- }
87
- window.XMLHttpRequest = XHR;
88
-
89
- // capture fetch network requests
90
- const originalFetch = window.fetch;
91
- window.fetch = (...args) => {
92
- const [url, options] =
93
- typeof args[0] === 'string' ? args : [args[0].url, args[0]];
94
- const method = options?.method ?? 'GET';
95
- const body = options?.body;
96
-
97
- const start = notify('fetch', {
98
- method,
99
- url,
100
- body,
101
- bodyType:
102
- options.headers?.['content-type'] ||
103
- options.headers?.['Content-Type'] ||
104
- null,
105
- });
106
-
107
- const promise = originalFetch(...args);
108
- promise
109
- .then(async (response) => {
110
- const ct = response.headers.get('content-type') || '';
111
- const resBody = ct.includes('application/json')
112
- ? await response.clone().json()
113
- : ct.includes('text/')
114
- ? await response.clone().text()
115
- : `[[ Unhandled content-type: ${ct || '<empty>'} ]]`;
116
-
117
- if (start)
118
- notify(
119
- 'fetch:finished',
120
- {
121
- status: response.status,
122
- responseType: ct || null,
123
- response: resBody,
124
- },
125
- start,
126
- );
127
- })
128
- .catch(() => {});
129
- return promise;
130
- };
131
-
132
- // capture client-side location changes
133
- const originalPushState = history.pushState;
134
- history.pushState = (...args) => {
135
- originalPushState.apply(history, args);
136
- notify('client_navigate', {
137
- url: location.href,
138
- replace: false,
139
- });
140
- };
141
- const originalReplaceState = history.replaceState;
142
- history.replaceState = (...args) => {
143
- originalReplaceState.apply(history, args);
144
- notify('client_navigate', {
145
- url: location.href,
146
- replace: true,
147
- });
148
- };
149
-
150
- log('Cyperful watcher loaded.');
151
- })();