react-perfscope 0.1.0

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ray
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # react-perfscope
2
+
3
+ Performance debugging tool for React 18+ apps. Records forced reflows, layout shifts, long tasks, paint, web vitals, network, and React component renders during development.
4
+
5
+ This meta package re-exports everything from `@react-perfscope/core`, `@react-perfscope/react`, and `@react-perfscope/ui`, plus a side-effect `react-perfscope/auto` entry that bootstraps the full UI in one import.
6
+
7
+ ## Quickstart
8
+
9
+ The simplest way to enable react-perfscope in a dev build:
10
+
11
+ ```ts
12
+ // At the top of your entry file (e.g. src/main.tsx)
13
+ import 'react-perfscope/auto'
14
+
15
+ // ... your normal imports
16
+ import React from 'react'
17
+ import { createRoot } from 'react-dom/client'
18
+ import App from './App'
19
+
20
+ createRoot(document.getElementById('root')!).render(<App />)
21
+ ```
22
+
23
+ `react-perfscope/auto` must be imported BEFORE `react-dom` so the DevTools hook is installed before React captures it. Build plugins (`@react-perfscope/vite`, `@react-perfscope/webpack`) handle this ordering automatically.
24
+
25
+ ## Manual API
26
+
27
+ If you want to control mounting yourself, import the named exports:
28
+
29
+ ```ts
30
+ import { createRecorder, createRenderCollector, mount } from 'react-perfscope'
31
+
32
+ const recorder = createRecorder()
33
+ recorder.use(createRenderCollector())
34
+ const unmount = mount({ recorder, position: 'top-right' })
35
+ ```
36
+
37
+ ## Production safety
38
+
39
+ `react-perfscope/auto` bails when `process.env.NODE_ENV === 'production'`. The build plugins also exclude themselves from production builds. The manual API has no production guard — use it only behind your own dev/prod check.
40
+
41
+ ---
42
+
43
+ <a id="한국어"></a>
44
+
45
+ # 한국어
46
+
47
+ React 18+ 앱용 성능 디버깅 도구. 개발 중에 강제 리플로우, 레이아웃 시프트, 롱 태스크, 페인트, 웹 바이탈, 네트워크 요청, React 컴포넌트 렌더를 기록한다.
48
+
49
+ 이 메타 패키지는 `@react-perfscope/core`, `@react-perfscope/react`, `@react-perfscope/ui`의 모든 것을 re-export하고, 임포트 한 줄로 전체 UI를 부트스트랩하는 `react-perfscope/auto` 사이드 이펙트 엔트리를 제공한다.
50
+
51
+ ## 빠르게 시작하기
52
+
53
+ dev 빌드에서 react-perfscope를 켜는 가장 간단한 방법:
54
+
55
+ ```ts
56
+ // entry 파일 맨 위에 (예: src/main.tsx)
57
+ import 'react-perfscope/auto'
58
+
59
+ // ... 평소 imports
60
+ import React from 'react'
61
+ import { createRoot } from 'react-dom/client'
62
+ import App from './App'
63
+
64
+ createRoot(document.getElementById('root')!).render(<App />)
65
+ ```
66
+
67
+ `react-perfscope/auto`는 DevTools 훅이 React에 캡처되기 전에 설치될 수 있도록 반드시 `react-dom`보다 먼저 import해야 한다. 빌드 플러그인(`@react-perfscope/vite`, `@react-perfscope/webpack`)을 쓰면 이 순서가 자동으로 처리된다.
68
+
69
+ ## 수동 API
70
+
71
+ 직접 마운트를 제어하고 싶다면 named export를 쓰면 된다:
72
+
73
+ ```ts
74
+ import { createRecorder, createRenderCollector, mount } from 'react-perfscope'
75
+
76
+ const recorder = createRecorder()
77
+ recorder.use(createRenderCollector())
78
+ const unmount = mount({ recorder, position: 'top-right' })
79
+ ```
80
+
81
+ ## 프로덕션 안전성
82
+
83
+ `react-perfscope/auto`는 `process.env.NODE_ENV === 'production'`이면 아무것도 하지 않는다. 빌드 플러그인도 프로덕션 빌드에서는 자동으로 빠진다. 수동 API에는 프로덕션 가드가 없으니, 직접 dev/prod 분기를 만들어서 써야 한다.
package/dist/auto.cjs ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ // src/auto.ts
4
+ var import_core = require("@react-perfscope/core");
5
+ var import_react = require("@react-perfscope/react");
6
+ var import_ui = require("@react-perfscope/ui");
7
+ function bootstrap() {
8
+ if (typeof globalThis === "undefined") return;
9
+ const g = globalThis;
10
+ if (g.__REACT_PERFSCOPE_AUTO_MOUNTED__) return;
11
+ const env = globalThis.process?.env?.NODE_ENV;
12
+ if (env === "production") return;
13
+ if (typeof document === "undefined") return;
14
+ try {
15
+ (0, import_react.installDevToolsHook)(() => {
16
+ });
17
+ const recorder = (0, import_core.createRecorder)();
18
+ recorder.use((0, import_core.createForcedReflowCollector)());
19
+ recorder.use((0, import_core.createLongTasksCollector)());
20
+ recorder.use((0, import_core.createLayoutShiftCollector)());
21
+ recorder.use((0, import_core.createNetworkCollector)());
22
+ recorder.use((0, import_core.createWebVitalsCollector)());
23
+ recorder.use((0, import_react.createRenderCollector)());
24
+ const selfProfiler = (0, import_core.createSelfProfilingCollector)();
25
+ recorder.use(selfProfiler);
26
+ const heap = (0, import_core.createHeapCollector)();
27
+ recorder.use(heap);
28
+ const interaction = (0, import_core.createInteractionCollector)();
29
+ recorder.use(interaction);
30
+ const frame = (0, import_core.createFrameCollector)();
31
+ recorder.use(frame);
32
+ const resolver = (0, import_core.createSourceMapResolver)();
33
+ (0, import_ui.mount)({
34
+ recorder,
35
+ resolveFrame: (f) => resolver.resolve(f),
36
+ // Assemble interactions first so self-profiling can attribute their
37
+ // processing windows, then attach the heap series and frame timestamps.
38
+ finalize: (result) => Promise.resolve(interaction.finalize(result)).then((r) => selfProfiler.finalize(r)).then((r) => heap.finalize(r)).then((r) => frame.finalize(r))
39
+ });
40
+ g.__REACT_PERFSCOPE_AUTO_MOUNTED__ = true;
41
+ } catch (err) {
42
+ console.warn("[react-perfscope] auto bootstrap failed:", err);
43
+ }
44
+ }
45
+ bootstrap();
46
+ //# sourceMappingURL=auto.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auto.ts"],"sourcesContent":["import {\n createRecorder,\n createForcedReflowCollector,\n createLongTasksCollector,\n createLayoutShiftCollector,\n createNetworkCollector,\n createWebVitalsCollector,\n createSelfProfilingCollector,\n createHeapCollector,\n createInteractionCollector,\n createFrameCollector,\n createSourceMapResolver,\n} from '@react-perfscope/core'\nimport { createRenderCollector, installDevToolsHook } from '@react-perfscope/react'\nimport { mount } from '@react-perfscope/ui'\n\n/**\n * Side-effect entry. Importing `react-perfscope/auto` bootstraps a Recorder\n * with the render collector and mounts the UI. Idempotent — importing twice\n * is a no-op (the first import wins).\n *\n * Bails when `process.env.NODE_ENV === 'production'` (build plugins also\n * guard against prod, but this is defense-in-depth).\n */\nfunction bootstrap(): void {\n if (typeof globalThis === 'undefined') return\n const g = globalThis as { __REACT_PERFSCOPE_AUTO_MOUNTED__?: boolean }\n if (g.__REACT_PERFSCOPE_AUTO_MOUNTED__) return\n\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n if (env === 'production') return\n\n if (typeof document === 'undefined') return\n\n try {\n // Install the React DevTools hook SYNCHRONOUSLY before react-dom is\n // evaluated. react-dom captures `__REACT_DEVTOOLS_GLOBAL_HOOK__` exactly\n // once at module-load time, so the hook must exist by the time the user\n // bundle imports react-dom. A no-op listener is enough to register the\n // hook — when the render collector later activates, it adds the real\n // commit handler to the same global hook.\n installDevToolsHook(() => {})\n\n const recorder = createRecorder()\n recorder.use(createForcedReflowCollector())\n recorder.use(createLongTasksCollector())\n recorder.use(createLayoutShiftCollector())\n recorder.use(createNetworkCollector())\n recorder.use(createWebVitalsCollector())\n recorder.use(createRenderCollector())\n const selfProfiler = createSelfProfilingCollector()\n recorder.use(selfProfiler)\n const heap = createHeapCollector()\n recorder.use(heap)\n const interaction = createInteractionCollector()\n recorder.use(interaction)\n const frame = createFrameCollector()\n recorder.use(frame)\n const resolver = createSourceMapResolver()\n mount({\n recorder,\n resolveFrame: (f) => resolver.resolve(f),\n // Assemble interactions first so self-profiling can attribute their\n // processing windows, then attach the heap series and frame timestamps.\n finalize: (result) =>\n Promise.resolve(interaction.finalize(result))\n .then((r) => selfProfiler.finalize(r))\n .then((r) => heap.finalize(r))\n .then((r) => frame.finalize(r)),\n })\n g.__REACT_PERFSCOPE_AUTO_MOUNTED__ = true\n } catch (err) {\n console.warn('[react-perfscope] auto bootstrap failed:', err)\n }\n}\n\nbootstrap()\n"],"mappings":";;;AAAA,kBAYO;AACP,mBAA2D;AAC3D,gBAAsB;AAUtB,SAAS,YAAkB;AACzB,MAAI,OAAO,eAAe,YAAa;AACvC,QAAM,IAAI;AACV,MAAI,EAAE,iCAAkC;AAExC,QAAM,MAAO,WAA6D,SAAS,KAAK;AACxF,MAAI,QAAQ,aAAc;AAE1B,MAAI,OAAO,aAAa,YAAa;AAErC,MAAI;AAOF,0CAAoB,MAAM;AAAA,IAAC,CAAC;AAE5B,UAAM,eAAW,4BAAe;AAChC,aAAS,QAAI,yCAA4B,CAAC;AAC1C,aAAS,QAAI,sCAAyB,CAAC;AACvC,aAAS,QAAI,wCAA2B,CAAC;AACzC,aAAS,QAAI,oCAAuB,CAAC;AACrC,aAAS,QAAI,sCAAyB,CAAC;AACvC,aAAS,QAAI,oCAAsB,CAAC;AACpC,UAAM,mBAAe,0CAA6B;AAClD,aAAS,IAAI,YAAY;AACzB,UAAM,WAAO,iCAAoB;AACjC,aAAS,IAAI,IAAI;AACjB,UAAM,kBAAc,wCAA2B;AAC/C,aAAS,IAAI,WAAW;AACxB,UAAM,YAAQ,kCAAqB;AACnC,aAAS,IAAI,KAAK;AAClB,UAAM,eAAW,qCAAwB;AACzC,yBAAM;AAAA,MACJ;AAAA,MACA,cAAc,CAAC,MAAM,SAAS,QAAQ,CAAC;AAAA;AAAA;AAAA,MAGvC,UAAU,CAAC,WACT,QAAQ,QAAQ,YAAY,SAAS,MAAM,CAAC,EACzC,KAAK,CAAC,MAAM,aAAa,SAAS,CAAC,CAAC,EACpC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,EAC5B,KAAK,CAAC,MAAM,MAAM,SAAS,CAAC,CAAC;AAAA,IACpC,CAAC;AACD,MAAE,mCAAmC;AAAA,EACvC,SAAS,KAAK;AACZ,YAAQ,KAAK,4CAA4C,GAAG;AAAA,EAC9D;AACF;AAEA,UAAU;","names":[]}
@@ -0,0 +1,6 @@
1
+ /// <reference lib="es2015" />
2
+ /// <reference lib="dom" />
3
+
4
+ import '@react-perfscope/core';
5
+ import '@react-perfscope/react';
6
+ import '@react-perfscope/ui';
package/dist/auto.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /// <reference lib="es2015" />
2
+ /// <reference lib="dom" />
3
+
4
+ import '@react-perfscope/core';
5
+ import '@react-perfscope/react';
6
+ import '@react-perfscope/ui';
package/dist/auto.js ADDED
@@ -0,0 +1,56 @@
1
+ // src/auto.ts
2
+ import {
3
+ createRecorder,
4
+ createForcedReflowCollector,
5
+ createLongTasksCollector,
6
+ createLayoutShiftCollector,
7
+ createNetworkCollector,
8
+ createWebVitalsCollector,
9
+ createSelfProfilingCollector,
10
+ createHeapCollector,
11
+ createInteractionCollector,
12
+ createFrameCollector,
13
+ createSourceMapResolver
14
+ } from "@react-perfscope/core";
15
+ import { createRenderCollector, installDevToolsHook } from "@react-perfscope/react";
16
+ import { mount } from "@react-perfscope/ui";
17
+ function bootstrap() {
18
+ if (typeof globalThis === "undefined") return;
19
+ const g = globalThis;
20
+ if (g.__REACT_PERFSCOPE_AUTO_MOUNTED__) return;
21
+ const env = globalThis.process?.env?.NODE_ENV;
22
+ if (env === "production") return;
23
+ if (typeof document === "undefined") return;
24
+ try {
25
+ installDevToolsHook(() => {
26
+ });
27
+ const recorder = createRecorder();
28
+ recorder.use(createForcedReflowCollector());
29
+ recorder.use(createLongTasksCollector());
30
+ recorder.use(createLayoutShiftCollector());
31
+ recorder.use(createNetworkCollector());
32
+ recorder.use(createWebVitalsCollector());
33
+ recorder.use(createRenderCollector());
34
+ const selfProfiler = createSelfProfilingCollector();
35
+ recorder.use(selfProfiler);
36
+ const heap = createHeapCollector();
37
+ recorder.use(heap);
38
+ const interaction = createInteractionCollector();
39
+ recorder.use(interaction);
40
+ const frame = createFrameCollector();
41
+ recorder.use(frame);
42
+ const resolver = createSourceMapResolver();
43
+ mount({
44
+ recorder,
45
+ resolveFrame: (f) => resolver.resolve(f),
46
+ // Assemble interactions first so self-profiling can attribute their
47
+ // processing windows, then attach the heap series and frame timestamps.
48
+ finalize: (result) => Promise.resolve(interaction.finalize(result)).then((r) => selfProfiler.finalize(r)).then((r) => heap.finalize(r)).then((r) => frame.finalize(r))
49
+ });
50
+ g.__REACT_PERFSCOPE_AUTO_MOUNTED__ = true;
51
+ } catch (err) {
52
+ console.warn("[react-perfscope] auto bootstrap failed:", err);
53
+ }
54
+ }
55
+ bootstrap();
56
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auto.ts"],"sourcesContent":["import {\n createRecorder,\n createForcedReflowCollector,\n createLongTasksCollector,\n createLayoutShiftCollector,\n createNetworkCollector,\n createWebVitalsCollector,\n createSelfProfilingCollector,\n createHeapCollector,\n createInteractionCollector,\n createFrameCollector,\n createSourceMapResolver,\n} from '@react-perfscope/core'\nimport { createRenderCollector, installDevToolsHook } from '@react-perfscope/react'\nimport { mount } from '@react-perfscope/ui'\n\n/**\n * Side-effect entry. Importing `react-perfscope/auto` bootstraps a Recorder\n * with the render collector and mounts the UI. Idempotent — importing twice\n * is a no-op (the first import wins).\n *\n * Bails when `process.env.NODE_ENV === 'production'` (build plugins also\n * guard against prod, but this is defense-in-depth).\n */\nfunction bootstrap(): void {\n if (typeof globalThis === 'undefined') return\n const g = globalThis as { __REACT_PERFSCOPE_AUTO_MOUNTED__?: boolean }\n if (g.__REACT_PERFSCOPE_AUTO_MOUNTED__) return\n\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n if (env === 'production') return\n\n if (typeof document === 'undefined') return\n\n try {\n // Install the React DevTools hook SYNCHRONOUSLY before react-dom is\n // evaluated. react-dom captures `__REACT_DEVTOOLS_GLOBAL_HOOK__` exactly\n // once at module-load time, so the hook must exist by the time the user\n // bundle imports react-dom. A no-op listener is enough to register the\n // hook — when the render collector later activates, it adds the real\n // commit handler to the same global hook.\n installDevToolsHook(() => {})\n\n const recorder = createRecorder()\n recorder.use(createForcedReflowCollector())\n recorder.use(createLongTasksCollector())\n recorder.use(createLayoutShiftCollector())\n recorder.use(createNetworkCollector())\n recorder.use(createWebVitalsCollector())\n recorder.use(createRenderCollector())\n const selfProfiler = createSelfProfilingCollector()\n recorder.use(selfProfiler)\n const heap = createHeapCollector()\n recorder.use(heap)\n const interaction = createInteractionCollector()\n recorder.use(interaction)\n const frame = createFrameCollector()\n recorder.use(frame)\n const resolver = createSourceMapResolver()\n mount({\n recorder,\n resolveFrame: (f) => resolver.resolve(f),\n // Assemble interactions first so self-profiling can attribute their\n // processing windows, then attach the heap series and frame timestamps.\n finalize: (result) =>\n Promise.resolve(interaction.finalize(result))\n .then((r) => selfProfiler.finalize(r))\n .then((r) => heap.finalize(r))\n .then((r) => frame.finalize(r)),\n })\n g.__REACT_PERFSCOPE_AUTO_MOUNTED__ = true\n } catch (err) {\n console.warn('[react-perfscope] auto bootstrap failed:', err)\n }\n}\n\nbootstrap()\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,aAAa;AAUtB,SAAS,YAAkB;AACzB,MAAI,OAAO,eAAe,YAAa;AACvC,QAAM,IAAI;AACV,MAAI,EAAE,iCAAkC;AAExC,QAAM,MAAO,WAA6D,SAAS,KAAK;AACxF,MAAI,QAAQ,aAAc;AAE1B,MAAI,OAAO,aAAa,YAAa;AAErC,MAAI;AAOF,wBAAoB,MAAM;AAAA,IAAC,CAAC;AAE5B,UAAM,WAAW,eAAe;AAChC,aAAS,IAAI,4BAA4B,CAAC;AAC1C,aAAS,IAAI,yBAAyB,CAAC;AACvC,aAAS,IAAI,2BAA2B,CAAC;AACzC,aAAS,IAAI,uBAAuB,CAAC;AACrC,aAAS,IAAI,yBAAyB,CAAC;AACvC,aAAS,IAAI,sBAAsB,CAAC;AACpC,UAAM,eAAe,6BAA6B;AAClD,aAAS,IAAI,YAAY;AACzB,UAAM,OAAO,oBAAoB;AACjC,aAAS,IAAI,IAAI;AACjB,UAAM,cAAc,2BAA2B;AAC/C,aAAS,IAAI,WAAW;AACxB,UAAM,QAAQ,qBAAqB;AACnC,aAAS,IAAI,KAAK;AAClB,UAAM,WAAW,wBAAwB;AACzC,UAAM;AAAA,MACJ;AAAA,MACA,cAAc,CAAC,MAAM,SAAS,QAAQ,CAAC;AAAA;AAAA;AAAA,MAGvC,UAAU,CAAC,WACT,QAAQ,QAAQ,YAAY,SAAS,MAAM,CAAC,EACzC,KAAK,CAAC,MAAM,aAAa,SAAS,CAAC,CAAC,EACpC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,EAC5B,KAAK,CAAC,MAAM,MAAM,SAAS,CAAC,CAAC;AAAA,IACpC,CAAC;AACD,MAAE,mCAAmC;AAAA,EACvC,SAAS,KAAK;AACZ,YAAQ,KAAK,4CAA4C,GAAG;AAAA,EAC9D;AACF;AAEA,UAAU;","names":[]}
package/dist/index.cjs ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+
17
+ // src/index.ts
18
+ var index_exports = {};
19
+ module.exports = __toCommonJS(index_exports);
20
+ __reExport(index_exports, require("@react-perfscope/core"), module.exports);
21
+ __reExport(index_exports, require("@react-perfscope/react"), module.exports);
22
+ __reExport(index_exports, require("@react-perfscope/ui"), module.exports);
23
+ // Annotate the CommonJS export names for ESM import in node:
24
+ 0 && (module.exports = {
25
+ ...require("@react-perfscope/core"),
26
+ ...require("@react-perfscope/react"),
27
+ ...require("@react-perfscope/ui")
28
+ });
29
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from '@react-perfscope/core'\nexport * from '@react-perfscope/react'\nexport * from '@react-perfscope/ui'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,kCAAd;AACA,0BAAc,mCADd;AAEA,0BAAc,gCAFd;","names":[]}
@@ -0,0 +1,6 @@
1
+ /// <reference lib="es2015" />
2
+ /// <reference lib="dom" />
3
+
4
+ export * from '@react-perfscope/core';
5
+ export * from '@react-perfscope/react';
6
+ export * from '@react-perfscope/ui';
@@ -0,0 +1,6 @@
1
+ /// <reference lib="es2015" />
2
+ /// <reference lib="dom" />
3
+
4
+ export * from '@react-perfscope/core';
5
+ export * from '@react-perfscope/react';
6
+ export * from '@react-perfscope/ui';
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // src/index.ts
2
+ export * from "@react-perfscope/core";
3
+ export * from "@react-perfscope/react";
4
+ export * from "@react-perfscope/ui";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from '@react-perfscope/core'\nexport * from '@react-perfscope/react'\nexport * from '@react-perfscope/ui'\n"],"mappings":";AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "react-perfscope",
3
+ "version": "0.1.0",
4
+ "description": "Zero-config React runtime performance profiler — renders, long tasks, layout shifts, web vitals, INP breakdown, heap & FPS — in an in-app panel.",
5
+ "keywords": [
6
+ "react",
7
+ "performance",
8
+ "profiler",
9
+ "web-vitals",
10
+ "inp",
11
+ "render",
12
+ "long-tasks",
13
+ "layout-shift",
14
+ "memory",
15
+ "fps",
16
+ "devtools"
17
+ ],
18
+ "type": "module",
19
+ "main": "./dist/index.cjs",
20
+ "module": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.cjs"
27
+ },
28
+ "./auto": {
29
+ "types": "./dist/auto.d.ts",
30
+ "import": "./dist/auto.js",
31
+ "require": "./dist/auto.cjs"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "sideEffects": [
38
+ "./dist/auto.js",
39
+ "./dist/auto.cjs"
40
+ ],
41
+ "dependencies": {
42
+ "@react-perfscope/core": "0.1.0",
43
+ "@react-perfscope/react": "0.1.0",
44
+ "@react-perfscope/ui": "0.1.0"
45
+ },
46
+ "license": "MIT",
47
+ "author": "rayforvideos",
48
+ "homepage": "https://github.com/rayforvideos/react-perfscope#readme",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/rayforvideos/react-perfscope.git",
52
+ "directory": "packages/meta"
53
+ },
54
+ "bugs": "https://github.com/rayforvideos/react-perfscope/issues",
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "scripts": {
59
+ "build": "tsup && node scripts/prepend-dts-refs.mjs",
60
+ "typecheck": "tsc --noEmit"
61
+ }
62
+ }