Skip to content

Commit e4dc24e

Browse files
committed
fix: minor version fixes
1 parent 0fae9f3 commit e4dc24e

File tree

7 files changed

+154
-49
lines changed

7 files changed

+154
-49
lines changed

packages/extension/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
"typecheck": "tsc --noEmit"
2323
},
2424
"dependencies": {
25-
"@pivanov/utils": "0.0.2",
2625
"bippy": "0.3.8",
2726
"react": "^18.2.0",
2827
"react-dom": "^18.2.0",

packages/extension/src/content/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { busDispatch, busSubscribe } from '@pivanov/utils';
21
import browser from 'webextension-polyfill';
32
import {
43
type BroadcastMessage,
54
BroadcastSchema,
65
type IEvents,
76
} from '~types/messages';
7+
import { busDispatch, busSubscribe } from '~utils/helpers';
88

99
chrome.runtime.onMessage.addListener(
1010
async (message: unknown, _sender, sendResponse) => {
@@ -28,7 +28,10 @@ chrome.runtime.onMessage.addListener(
2828
if (data.type === 'react-scan:toggle-state') {
2929
busDispatch<IEvents['react-scan:toggle-state']>(
3030
'react-scan:toggle-state',
31-
undefined,
31+
{
32+
topic: 'react-scan:toggle-state',
33+
message: undefined,
34+
},
3235
);
3336
return false;
3437
}
@@ -47,7 +50,7 @@ const sendMessageToBackground = ({ type, data }: BroadcastMessage) => {
4750

4851
busSubscribe<IEvents['react-scan:send-to-background']>(
4952
'react-scan:send-to-background',
50-
(message) => {
51-
sendMessageToBackground(message);
53+
(event) => {
54+
sendMessageToBackground(event.message);
5255
},
5356
);

packages/extension/src/inject/index.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
1-
import {
2-
busDispatch,
3-
busSubscribe,
4-
sleep,
5-
storageGetItem,
6-
storageSetItem,
7-
} from '@pivanov/utils';
81
import * as reactScan from 'react-scan';
92
import { gt } from 'semver';
103
import type { IEvents } from '~types/messages';
114
import { EXTENSION_STORAGE_KEY, STORAGE_KEY } from '~utils/constants';
125
import {
6+
busDispatch,
7+
busSubscribe,
138
canLoadReactScan,
149
hasReactFiber,
1510
readLocalStorage,
1611
saveLocalStorage,
12+
sleep,
13+
storageGetItem,
14+
storageSetItem,
1715
} from '~utils/helpers';
1816
import { createNotificationUI, toggleNotification } from './notification';
1917

20-
const reactScanExtensionVersion = reactScan.ReactScanInternals.version;
18+
const reactScanExtensionVersion = 'version' in reactScan.ReactScanInternals ? (reactScan.ReactScanInternals as any).version : undefined;
2119
const isTargetPageAlreadyUsedReactScan = () => {
2220
const currentReactScanVersion = window.__REACT_SCAN_VERSION__;
2321

@@ -110,9 +108,12 @@ window.addEventListener('DOMContentLoaded', async () => {
110108
busDispatch<IEvents['react-scan:send-to-background']>(
111109
'react-scan:send-to-background',
112110
{
113-
type: 'react-scan:is-enabled',
114-
data: {
115-
state: false,
111+
topic: 'react-scan:send-to-background',
112+
message: {
113+
type: 'react-scan:is-enabled',
114+
data: {
115+
state: false,
116+
},
116117
},
117118
},
118119
);
@@ -144,9 +145,12 @@ window.addEventListener('DOMContentLoaded', async () => {
144145
busDispatch<IEvents['react-scan:send-to-background']>(
145146
'react-scan:send-to-background',
146147
{
147-
type: 'react-scan:is-enabled',
148-
data: {
149-
state: false,
148+
topic: 'react-scan:send-to-background',
149+
message: {
150+
type: 'react-scan:is-enabled',
151+
data: {
152+
state: false,
153+
},
150154
},
151155
},
152156
);
@@ -166,9 +170,12 @@ window.addEventListener('DOMContentLoaded', async () => {
166170
busDispatch<IEvents['react-scan:send-to-background']>(
167171
'react-scan:send-to-background',
168172
{
169-
type: 'react-scan:is-enabled',
170-
data: {
171-
state: storedOptions.showToolbar,
173+
topic: 'react-scan:send-to-background',
174+
message: {
175+
type: 'react-scan:is-enabled',
176+
data: {
177+
state: storedOptions.showToolbar,
178+
},
172179
},
173180
},
174181
);

packages/extension/src/inject/notification.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { busDispatch } from '@pivanov/utils';
21
import noReactStyles from '~assets/css/no-react.css?inline';
32
import type { IEvents } from '~types/messages';
3+
import { busDispatch } from '~utils/helpers';
44

55
let backdrop: HTMLDivElement | null = null;
66
let isAnimating = false;
@@ -16,9 +16,12 @@ export const createNotificationUI = ({
1616
busDispatch<IEvents['react-scan:send-to-background']>(
1717
'react-scan:send-to-background',
1818
{
19-
type: 'react-scan:is-enabled',
20-
data: {
21-
state: false,
19+
topic: 'react-scan:send-to-background',
20+
message: {
21+
type: 'react-scan:is-enabled',
22+
data: {
23+
state: false,
24+
},
2225
},
2326
},
2427
);

packages/extension/src/utils/helpers.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const hasReactFiber = (): boolean => {
8181
const rootContainer = elementWithRoot._reactRootContainer;
8282

8383
const hasLegacyRoot = rootContainer?._internalRoot?.current?.child != null;
84-
const hasContainerRoot = Object.keys(elementWithRoot).some(key =>
84+
const hasContainerRoot = Object.keys(elementWithRoot).some(key =>
8585
key.startsWith(ReactDetection.reactMarkers.container)
8686
);
8787

@@ -185,3 +185,64 @@ export const debounce = <T extends (enabled: boolean | null) => Promise<void>>(
185185

186186
return debounced;
187187
};
188+
189+
type EventCallback<T = unknown> = (data: T) => void;
190+
const eventBus = new Map<string, Set<EventCallback>>();
191+
192+
export const busSubscribe = <T = unknown>(
193+
event: string,
194+
callback: EventCallback<T>,
195+
): (() => void) => {
196+
if (!eventBus.has(event)) {
197+
eventBus.set(event, new Set());
198+
}
199+
eventBus.get(event)!.add(callback as EventCallback);
200+
201+
return () => {
202+
const callbacks = eventBus.get(event);
203+
if (callbacks) {
204+
callbacks.delete(callback as EventCallback);
205+
if (callbacks.size === 0) {
206+
eventBus.delete(event);
207+
}
208+
}
209+
};
210+
};
211+
212+
export const busDispatch = <T = unknown>(event: string, data: T): void => {
213+
const callbacks = eventBus.get(event);
214+
if (callbacks) {
215+
callbacks.forEach((callback) => callback(data));
216+
}
217+
};
218+
219+
export const sleep = (ms: number): Promise<void> => {
220+
return new Promise((resolve) => setTimeout(resolve, ms));
221+
};
222+
223+
export const storageGetItem = async <T>(
224+
storageKey: string,
225+
key: string,
226+
): Promise<T | null> => {
227+
try {
228+
const result = await chrome.storage.local.get(storageKey);
229+
const data = result[storageKey];
230+
return data?.[key] ?? null;
231+
} catch {
232+
return null;
233+
}
234+
};
235+
236+
export const storageSetItem = async <T>(
237+
storageKey: string,
238+
key: string,
239+
value: T,
240+
): Promise<void> => {
241+
try {
242+
const result = await chrome.storage.local.get(storageKey);
243+
const data = result[storageKey] || {};
244+
data[key] = value;
245+
await chrome.storage.local.set({ [storageKey]: data });
246+
} catch {
247+
}
248+
};

packages/scan/package.json

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
"name": "react-scan",
33
"version": "0.4.3",
44
"description": "Scan your React app for renders",
5-
"keywords": ["react", "react-scan", "react scan", "render", "performance"],
5+
"keywords": [
6+
"react",
7+
"react-scan",
8+
"react scan",
9+
"render",
10+
"performance"
11+
],
612
"homepage": "https://react-scan.million.dev",
713
"bugs": {
814
"url": "https://github.com/aidenybai/react-scan/issues"
@@ -191,17 +197,27 @@
191197
"types": "dist/index.d.ts",
192198
"typesVersions": {
193199
"*": {
194-
"monitoring": ["./dist/core/monitor/index.d.ts"],
195-
"monitoring/next": ["./dist/core/monitor/params/next.d.ts"],
200+
"monitoring": [
201+
"./dist/core/monitor/index.d.ts"
202+
],
203+
"monitoring/next": [
204+
"./dist/core/monitor/params/next.d.ts"
205+
],
196206
"monitoring/react-router-legacy": [
197207
"./dist/core/monitor/params/react-router-v5.d.ts"
198208
],
199209
"monitoring/react-router": [
200210
"./dist/core/monitor/params/react-router-v6.d.ts"
201211
],
202-
"monitoring/remix": ["./dist/core/monitor/params/remix.d.ts"],
203-
"monitoring/astro": ["./dist/core/monitor/params/astro/index.ts"],
204-
"react-component-name/vite": ["./dist/react-component-name/vite.d.ts"],
212+
"monitoring/remix": [
213+
"./dist/core/monitor/params/remix.d.ts"
214+
],
215+
"monitoring/astro": [
216+
"./dist/core/monitor/params/astro/index.ts"
217+
],
218+
"react-component-name/vite": [
219+
"./dist/react-component-name/vite.d.ts"
220+
],
205221
"react-component-name/webpack": [
206222
"./dist/react-component-name/webpack.d.ts"
207223
],
@@ -217,12 +233,23 @@
217233
"react-component-name/rollup": [
218234
"./dist/react-component-name/rollup.d.ts"
219235
],
220-
"react-component-name/astro": ["./dist/react-component-name/astro.d.ts"],
221-
"react-component-name/loader": ["./dist/react-component-name/loader.d.ts"]
236+
"react-component-name/astro": [
237+
"./dist/react-component-name/astro.d.ts"
238+
],
239+
"react-component-name/loader": [
240+
"./dist/react-component-name/loader.d.ts"
241+
]
222242
}
223243
},
224244
"bin": "bin/cli.js",
225-
"files": ["dist", "bin", "package.json", "README.md", "LICENSE", "auto.d.ts"],
245+
"files": [
246+
"dist",
247+
"bin",
248+
"package.json",
249+
"README.md",
250+
"LICENSE",
251+
"auto.d.ts"
252+
],
226253
"dependencies": {
227254
"@babel/core": "^7.26.0",
228255
"@babel/generator": "^7.26.2",
@@ -233,7 +260,7 @@
233260
"@preact/signals": "^1.3.1",
234261
"@rollup/pluginutils": "^5.1.3",
235262
"@types/node": "^20.17.9",
236-
"bippy": "^0.3.8",
263+
"bippy": "^0.3.33",
237264
"esbuild": "^0.25.0",
238265
"estree-walker": "^3.0.3",
239266
"kleur": "^4.1.5",

0 commit comments

Comments
 (0)