diff --git a/package.json b/package.json
index 9a656ca1..610ef4f4 100644
--- a/package.json
+++ b/package.json
@@ -52,12 +52,12 @@
},
"dependencies": {
"@ant-design/icons": "^4.7.0",
- "@huolala-tech/page-spy-browser": "^2.1.3",
- "@huolala-tech/page-spy-plugin-data-harbor": "^2.1.2",
- "@huolala-tech/page-spy-plugin-ospy": "^2.1.7",
- "@huolala-tech/page-spy-plugin-rrweb": "^2.1.2",
- "@huolala-tech/page-spy-plugin-whole-bundle": "^2.1.5",
- "@huolala-tech/page-spy-types": "^2.1.2",
+ "@huolala-tech/page-spy-browser": "^2.1.6",
+ "@huolala-tech/page-spy-plugin-data-harbor": "^2.1.3",
+ "@huolala-tech/page-spy-plugin-ospy": "^2.1.10",
+ "@huolala-tech/page-spy-plugin-rrweb": "^2.1.3",
+ "@huolala-tech/page-spy-plugin-whole-bundle": "^2.1.8",
+ "@huolala-tech/page-spy-types": "^2.1.3",
"@huolala-tech/react-json-view": "^1.2.5",
"@huolala-tech/request": "^1.1.2",
"@mdx-js/mdx": "^3.0.1",
@@ -112,7 +112,7 @@
"last 2 safari version"
],
"optionalDependencies": {
- "@huolala-tech/page-spy-api": "^2.0.0"
+ "@huolala-tech/page-spy-api": "^2.2.0"
},
"packageManager": "yarn@1.22.19"
}
diff --git a/src/assets/image/screenshot/debug-baidu.png b/src/assets/image/screenshot/debug-baidu.png
index fc827631..442b9829 100644
Binary files a/src/assets/image/screenshot/debug-baidu.png and b/src/assets/image/screenshot/debug-baidu.png differ
diff --git a/src/assets/image/screenshot/debug-google.png b/src/assets/image/screenshot/debug-google.png
index 35803c20..085ed5ee 100644
Binary files a/src/assets/image/screenshot/debug-google.png and b/src/assets/image/screenshot/debug-google.png differ
diff --git a/src/assets/image/screenshot/extension-en.png b/src/assets/image/screenshot/extension-en.png
index 3151e586..a4180655 100644
Binary files a/src/assets/image/screenshot/extension-en.png and b/src/assets/image/screenshot/extension-en.png differ
diff --git a/src/assets/image/screenshot/extension-zh.png b/src/assets/image/screenshot/extension-zh.png
index 438735e6..72564ebc 100644
Binary files a/src/assets/image/screenshot/extension-zh.png and b/src/assets/image/screenshot/extension-zh.png differ
diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json
index 827f3de0..d0c08930 100644
--- a/src/assets/locales/en.json
+++ b/src/assets/locales/en.json
@@ -250,7 +250,7 @@
},
"oSpy": {
"slogan": "Offline Recording
Complete Replay",
- "desc": "Take a snapshot with one line of code, and store data locally with peace of mind.",
+ "desc": "Record with one line of code, and store data locally with peace of mind.",
"import-use": "Integrate O-Spy",
"select-log": "Select Log",
"take-try": "Try Demo",
diff --git a/src/assets/locales/ja.json b/src/assets/locales/ja.json
index e27a19df..f0ed91ed 100644
--- a/src/assets/locales/ja.json
+++ b/src/assets/locales/ja.json
@@ -249,7 +249,7 @@
},
"oSpy": {
"slogan": "オフライン記録
完全再生",
- "desc": "一行のコードでスナップショットを撮り、ローカルデータは安心して保管される。",
+ "desc": "1行のコードでシーンを録画し、ローカルに安心してデータを保存。",
"import-use": "O-Spy 接続",
"select-log": "ログ選択",
"take-try": "デモ体験",
diff --git a/src/assets/locales/ko.json b/src/assets/locales/ko.json
index 2f9346cf..720ff9ca 100644
--- a/src/assets/locales/ko.json
+++ b/src/assets/locales/ko.json
@@ -249,7 +249,7 @@
},
"oSpy": {
"slogan": "오프라인 기록
전체 재생",
- "desc": "한 줄의 코드로 스냅샷을 찍고, 로컬 데이터는 안심하고 저장된다.",
+ "desc": "한 줄 코드로 현장을 녹화하고, 로컬에 데이터를 안심하고 저장하세요.",
"import-use": "O-Spy 연결",
"select-log": "로그 선택",
"take-try": "데모 체험",
diff --git a/src/assets/locales/zh.json b/src/assets/locales/zh.json
index 25c8815c..826c7ee6 100644
--- a/src/assets/locales/zh.json
+++ b/src/assets/locales/zh.json
@@ -249,7 +249,7 @@
},
"oSpy": {
"slogan": "离线记录
完整回放",
- "desc": "一行代码记录现场,本地数据安心存放。",
+ "desc": "一行代码录制现场,本地数据安心存放。",
"import-use": "接入 O-Spy",
"select-log": "选择日志回放",
"take-try": "体验 Demo",
diff --git a/src/components/CodeBlock/index.tsx b/src/components/CodeBlock/index.tsx
index 69a74d25..c5a004d2 100644
--- a/src/components/CodeBlock/index.tsx
+++ b/src/components/CodeBlock/index.tsx
@@ -78,7 +78,26 @@ export const CodeBlock = (data: SingleProps | GroupProps) => {
if (!codeContent) return ;
return (
-
+
{
+ if ((e.metaKey || e.ctrlKey) && e.key === 'a') {
+ e.preventDefault();
+ const selection = window.getSelection();
+ const codeContent = e.currentTarget.querySelector(
+ '.code-block-content',
+ );
+ if (selection && codeContent) {
+ const range = document.createRange();
+ range.selectNodeContents(codeContent);
+ selection.removeAllRanges();
+ selection.addRange(range);
+ }
+ }
+ }}
+ >
{isGroupBlock(data) &&
data.group.map((c, index) => {
diff --git a/src/components/Docs/components/DocContent/index.tsx b/src/components/Docs/components/DocContent/index.tsx
index b097651a..5ec7fb3a 100644
--- a/src/components/Docs/components/DocContent/index.tsx
+++ b/src/components/Docs/components/DocContent/index.tsx
@@ -105,7 +105,9 @@ export const DocContent = () => {
if (!hash) return;
const container = rootRef.current;
- const node = container?.querySelector(hash) as HTMLElement;
+ const node = container?.querySelector(
+ decodeURIComponent(hash),
+ ) as HTMLElement;
if (!container || !node) return;
setTimeout(() => {
diff --git a/src/components/Docs/components/DocContent/mdx-mapping/Heading.tsx b/src/components/Docs/components/DocContent/mdx-mapping/Heading.tsx
index 6c1b403a..c429e720 100644
--- a/src/components/Docs/components/DocContent/mdx-mapping/Heading.tsx
+++ b/src/components/Docs/components/DocContent/mdx-mapping/Heading.tsx
@@ -3,23 +3,25 @@ import { PropsWithChildren, ReactNode, createElement } from 'react';
import { HeaderLink } from '../../HeaderLink';
import { isString } from 'lodash-es';
import { formatSlug } from '@/utils/docs';
-
+import { debug } from '@/utils/debug';
interface Props {
level: number;
}
// 标题的格式和自动生成的锚点规则:
+// 1. 建议手动维护锚点,避免锚点异常;
+// 2. 对缺失的锚点有以下自动生成规则:
// - 原文:### 标题
-// 结果:
)}`}>标题
+// 结果:
标题
//
// - 原文:### 标题#slug
// 结果:
标题
//
// - 原文:### 标题
-// 结果:
)}`}>标题
+// 结果:
标题
//
-// - 原文:### 标题
#slug
-// 结果:
标题
+// - 原文:### 标题
xxx#slug
+// 结果:
标题
xxx
const Heading = ({ level, children }: PropsWithChildren
) => {
let slug = '';
@@ -34,15 +36,16 @@ const Heading = ({ level, children }: PropsWithChildren) => {
}
} else {
const nodes: ReactNode[] = [...(children as ReactNode[])];
- const slugIndex = nodes.findIndex((i) => isString(i) && i.startsWith('#'));
- if (slugIndex !== -1) {
- // ### 标题 #slug
- slug = nodes.splice(slugIndex, 1)[0]?.toString().slice(1) || '';
- children = nodes;
- } else {
- // ### 标题
- const title = nodes.find((i) => isString(i))?.trim() || '';
- slug = title;
+ const lastNode = nodes.splice(-1, 1)[0];
+ if (isString(lastNode) && lastNode.indexOf('#') !== -1) {
+ // ### 标题 xxxx#slug
+ const [extra, _slug] = lastNode.split('#');
+ children = [...nodes, extra];
+ slug = _slug;
+ }
+ if (!slug) {
+ debug.error('标题未找到锚点,请检查后修复:', level, children);
+ slug = nodes.find((i) => isString(i))?.trim() || '';
}
}
diff --git a/src/components/Docs/components/DocContent/toc/index.tsx b/src/components/Docs/components/DocContent/toc/index.tsx
index 7292316d..18c0a050 100644
--- a/src/components/Docs/components/DocContent/toc/index.tsx
+++ b/src/components/Docs/components/DocContent/toc/index.tsx
@@ -8,6 +8,7 @@ import { Link, useLocation } from 'react-router-dom';
import clsx from 'clsx';
import { formatSlug } from '@/utils/docs';
import { useDocContext } from '@/components/Docs/context';
+import { debug } from '@/utils/debug';
export interface NavItem {
text: string;
@@ -16,7 +17,7 @@ export interface NavItem {
const processor = unified().use(remarkParse);
-// 目录生成规则参照 ../mdx-mapping/Heading.tsx
+// 目录的锚点生成规则参照 ../mdx-mapping/Heading.tsx
export const computeTocs = async (raw: () => Promise) => {
const navs: NavItem[] = [];
try {
@@ -26,25 +27,34 @@ export const computeTocs = async (raw: () => Promise) => {
if ([2, 3].includes(node.depth)) {
// ## abcd => text
// ## => html
+ // ## title title#slug => [text, html, text]
const texts = node.children.filter((i) => i.type === 'text');
+ // if (texts.some((i) => i.value.includes('v2.2.0'))) {
+ // console.log(texts, node);
+ // }
if (!texts.length) {
- console.error('当前 heading 自动提取 anchor 失败', node);
+ debug.panic('TOC 未找到合适的标题作为锚点', node);
return;
}
let text: string = '';
let link: string = '';
- // ## title #slug => [text, html, text]
- const customSlug = texts.findLast((i) => i.value.startsWith('#'));
- if (customSlug) {
- text = texts[0].value;
- link = customSlug.value.slice(1);
- } else {
- // ## title
+ if (texts.length === 1) {
const [head, anchor] = texts[0].value.split('#');
text = head;
link = anchor || head;
+ } else {
+ text = texts[0].value;
+ const lastNode = texts[texts.length - 1].value;
+ if (lastNode.indexOf('#') !== -1) {
+ link = lastNode.split('#')[1];
+ } else {
+ link = text.trim();
+ }
+ }
+ if (!link) {
+ debug.panic('TOC 未找到合适的锚点', node);
}
navs.push({
@@ -96,7 +106,7 @@ export const ToC = ({ doc, lang }: { doc: string; lang: langType }) => {
{i.text}
diff --git a/src/components/LogReplayer/index.tsx b/src/components/LogReplayer/index.tsx
index b25dd617..4dbc84bd 100644
--- a/src/components/LogReplayer/index.tsx
+++ b/src/components/LogReplayer/index.tsx
@@ -23,6 +23,7 @@ import { useEventListener } from '@/utils/useEventListener';
import { useShallow } from 'zustand/react/shallow';
import { ErrorDetailDrawer } from '@/components/ErrorDetailDrawer';
import { Meta } from './Meta';
+import { debug } from '@/utils/debug';
interface Props {
url: string;
@@ -51,9 +52,7 @@ export const LogReplayer = ({ url, backSlot = null }: Props) => {
: i.data,
};
}) as HarborDataItem[];
- if (localStorage.getItem('page-spy-replay-debug')) {
- console.log(result);
- }
+ debug.log(result);
setAllData(result);
return result;
},
diff --git a/src/pages/Layouts/NavMenu/index.less b/src/pages/Layouts/NavMenu/index.less
index ed737cd2..7314462f 100644
--- a/src/pages/Layouts/NavMenu/index.less
+++ b/src/pages/Layouts/NavMenu/index.less
@@ -20,7 +20,7 @@
}
}
.nav-menu {
- display: inline-flex;
+ display: flex;
align-items: center;
font-size: 14px;
diff --git a/src/pages/Layouts/NavMenu/index.tsx b/src/pages/Layouts/NavMenu/index.tsx
index f5de36ca..1704e0f4 100644
--- a/src/pages/Layouts/NavMenu/index.tsx
+++ b/src/pages/Layouts/NavMenu/index.tsx
@@ -1,7 +1,7 @@
import { isClient, isDoc } from '@/utils/constants';
import { langType, useLanguage } from '@/utils/useLanguage';
-import Icon, { GithubOutlined } from '@ant-design/icons';
-import { Space, Divider, MenuProps, Dropdown, ConfigProvider } from 'antd';
+import Icon from '@ant-design/icons';
+import { Divider, MenuProps, Dropdown, ConfigProvider, Flex } from 'antd';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import DocsSvg from '@/assets/image/docs.svg?react';
@@ -65,59 +65,61 @@ export const NavMenuOnPc = () => {
>
{/* Docs */}
-
+
{t('common.doc')}
-
+
{isClient && !isOSpy && (
-
-
-
-
-
- {t('common.online-debug')}
-
-
- ),
- },
- {
- key: 'offline-debug',
- label: (
-
-
-
- {t('common.offline-debug')}
-
-
- ),
- },
- ],
- }}
- >
-
-
- {t('common.start-debug')}
-
-
-
+ <>
+
+
+
+
+
+ {t('common.online-debug')}
+
+
+ ),
+ },
+ {
+ key: 'offline-debug',
+ label: (
+
+
+
+ {t('common.offline-debug')}
+
+
+ ),
+ },
+ ],
+ }}
+ >
+
+
+ {t('common.start-debug')}
+
+
+
+
-
+ >
)}
{/* i18n */}
@@ -132,10 +134,10 @@ export const NavMenuOnPc = () => {
},
}}
>
-
+
{t('common.lang')}
-
+
@@ -144,10 +146,10 @@ export const NavMenuOnPc = () => {
{isDoc && isCN() && (
<>
-
+
国内镜像
-
+
>
@@ -156,6 +158,7 @@ export const NavMenuOnPc = () => {
href={import.meta.env.VITE_GITHUB_REPO}
target="_blank"
className="menu-item"
+ style={{ fontSize: 0 }}
>
{
setExpand(false);
}}
>
-
+
{t('common.doc')}
-
+
{isClient && !isOSpy && (
<>
@@ -233,10 +236,10 @@ export const NavMenuOnMobile = () => {
setExpand(false);
}}
>
-
+
{t('common.connections')}
-
+
>
)}
@@ -250,10 +253,10 @@ export const NavMenuOnMobile = () => {
setExpand(false);
}}
>
-
+
{t('common.lang')}
-
+
{/* Mirror */}
{isDoc && isCN() && (
@@ -262,10 +265,10 @@ export const NavMenuOnMobile = () => {
target="_blank"
className="menu-item doc"
>
-
+
国内镜像
-
+
)}
{/* GitHub */}
diff --git a/src/pages/Layouts/index.tsx b/src/pages/Layouts/index.tsx
index 4f5022b0..017db22c 100644
--- a/src/pages/Layouts/index.tsx
+++ b/src/pages/Layouts/index.tsx
@@ -8,11 +8,15 @@ import { NavMenuOnPc, NavMenuOnMobile } from './NavMenu';
import { useDarkTheme } from '@/utils/useDarkTheme';
import { isDoc } from '@/utils/constants';
import { Logo } from './Logo';
+import { useWhere } from '@/utils/useWhere';
+import { useTitle } from 'ahooks';
const { Header, Content } = Layout;
export const Layouts = () => {
const isDark = useDarkTheme();
+ const { isOSpy } = useWhere();
+ useTitle(isOSpy ? 'O-Spy' : 'PageSpy');
return (
diff --git a/src/pages/MainDocs/md/browser.en.mdx b/src/pages/MainDocs/md/browser.en.mdx
index 80dca880..f76f4966 100644
--- a/src/pages/MainDocs/md/browser.en.mdx
+++ b/src/pages/MainDocs/md/browser.en.mdx
@@ -76,17 +76,17 @@ PageSpy has published integration guides for all popular frameworks on the CodeS
- **Nuxtjs**:[CodeSandbox - PageSpy in Nuxtjs](https://codesandbox.io/p/sandbox/page-spy-with-nuxtjs-8znq22)
-### Using the Browser Extension
+### Using the Browser Extension#browser-extension
PageSpy provides a browser extension that allows you to use PageSpy on any webpage without integrating any code!
Yes, you read that right! With the PageSpy browser extension, you can debug almost any webpage. However, a few websites with strict CSP policies may prevent the extension from functioning properly.
-#### Install
+#### Install#install
Go to the [Browser Extension repository](https://github.com/HuolalaTech/page-spy-extension/tree/main/packages/online-pagespy-extension) and follow the README instructions to install it.
-#### Parameters
+#### Parameters#parameters
diff --git a/src/pages/MainDocs/md/faq.zh.mdx b/src/pages/MainDocs/md/faq.zh.mdx
index 94a6968a..30f111ee 100644
--- a/src/pages/MainDocs/md/faq.zh.mdx
+++ b/src/pages/MainDocs/md/faq.zh.mdx
@@ -390,7 +390,7 @@ SDK 可以对页面进行 “截图” 并发送到调试端,但由于:
- 一直没有数据消息交互,5 分钟后销毁;
- 连接使用持续超过 1 个小时自动被销毁;
-### 为何支付宝小程序远程执行代码时无法获取到全局对象如 my.getCurrentPages()?#alipay-global
+### 为何支付宝小程序远程执行代码时无法获取到全局对象如 `my.getCurrentPages()`?#alipay-global
支付宝小程序由于历史原因,对全局对象的访问做了限制。可以通过小程序配置文件或支付宝小程序 IDE 进行设置:
diff --git a/src/pages/MainDocs/md/introduction.en.mdx b/src/pages/MainDocs/md/introduction.en.mdx
index a9c4657b..cdc6763e 100644
--- a/src/pages/MainDocs/md/introduction.en.mdx
+++ b/src/pages/MainDocs/md/introduction.en.mdx
@@ -94,7 +94,7 @@ Yep, the goal of PageSpy is can help the people which in like above cases.
### Feature Overview#feature-overview
-#### Online Debugging
+#### Online Debugging#online-debugging
- **Console Panel**: Displays logs from `console.`, and allows sending code to be executed on the client side.
@@ -128,7 +128,7 @@ Yep, the goal of PageSpy is can help the people which in like above cases.
Additionally, you will receive real-time notifications when new data is available or existing data changes.
-#### Offline Debugging
+#### Offline Debugging#offline-debugging
diff --git a/src/pages/MainDocs/md/introduction.zh.mdx b/src/pages/MainDocs/md/introduction.zh.mdx
index 2c5574e1..8a761b92 100644
--- a/src/pages/MainDocs/md/introduction.zh.mdx
+++ b/src/pages/MainDocs/md/introduction.zh.mdx
@@ -18,11 +18,11 @@
[api-ver-img]: https://img.shields.io/github/v/tag/HuolalaTech/page-spy-api?label=API
[api-ver-url]: https://github.com/HuolalaTech/page-spy-api/tags
[node-deploy]: https://img.shields.io/badge/Node_Deploy-Install-CB3937
-[node-deploy-url]: https://pagespy.org/#/docs/deploy-with-node
+[node-deploy-url]: https://pagespy.huolala.cn/#/docs/deploy-with-node
[docker-deploy]: https://img.shields.io/badge/Docker_Deploy-Install-1E63ED
-[docker-deploy-url]: https://pagespy.org/#/docs/deploy-with-docker
+[docker-deploy-url]: https://pagespy.huolala.cn/#/docs/deploy-with-docker
[bt-deploy]: https://img.shields.io/badge/BT_Deploy-Install-20a53a
-[bt-deploy-url]: https://pagespy.org/#/docs/deploy-with-baota
+[bt-deploy-url]: https://pagespy.huolala.cn/#/docs/deploy-with-baota
import React from 'react';
@@ -93,7 +93,7 @@ PageSpy 的目标,就是为包括以上场景的人员提供帮助。
### 界面概览#feature-overview
-#### 在线调试
+#### 在线调试#online-debug
- Console 面板: 显示 `console.` 输出的日志信息,可以发送代码到客户端执行;
@@ -127,7 +127,7 @@ PageSpy 的目标,就是为包括以上场景的人员提供帮助。
除此之外,当有新的数据或者数据发生变化的时候会实时的收到通知。
-#### 离线回放
+#### 离线回放#offline-debugging
diff --git a/src/pages/MainDocs/md/offline-log.en.mdx b/src/pages/MainDocs/md/offline-log.en.mdx
index c0c21226..e33940e7 100644
--- a/src/pages/MainDocs/md/offline-log.en.mdx
+++ b/src/pages/MainDocs/md/offline-log.en.mdx
@@ -144,15 +144,15 @@ $dataHarborPlugin.upload().then(() => {
### Differences#diff
-1. DOM recording is not supported in miniprogram env, thus there is no `RRWebPlugin` for miniprogram。
+1. DOM recording is not supported in miniprogram env, thus there is no `RRWebPlugin` for miniprogram.
2. The offline log in miniprogram env supports uploading only, no downloading.
-## FAQ
+## FAQ#faq
1. How to upload / download logs manually?
-[Click to see](./data-harbor#onOfflineLog)。
+[Click to see](./data-harbor#onOfflineLog).
2. Where is offline log data stored?
diff --git a/src/pages/MainDocs/md/offline-log.zh.mdx b/src/pages/MainDocs/md/offline-log.zh.mdx
index 30d95b80..a63b28d0 100644
--- a/src/pages/MainDocs/md/offline-log.zh.mdx
+++ b/src/pages/MainDocs/md/offline-log.zh.mdx
@@ -145,7 +145,7 @@ $dataHarborPlugin.upload().then(() => {
2. 小程序环境离线日志仅支持上传,不支持下载。
-## FAQ
+## FAQ#faq
1. 如何手动操作上传 / 下载日志?
diff --git a/src/pages/MainDocs/md/ospy.en.mdx b/src/pages/MainDocs/md/ospy.en.mdx
deleted file mode 100644
index c65c045d..00000000
--- a/src/pages/MainDocs/md/ospy.en.mdx
+++ /dev/null
@@ -1,2 +0,0 @@
-
-### Offline-Spy
\ No newline at end of file
diff --git a/src/pages/MainDocs/md/ospy.zh.mdx b/src/pages/MainDocs/md/ospy.zh.mdx
deleted file mode 100644
index c65c045d..00000000
--- a/src/pages/MainDocs/md/ospy.zh.mdx
+++ /dev/null
@@ -1,2 +0,0 @@
-
-### Offline-Spy
\ No newline at end of file
diff --git a/src/pages/OSpy/components/ImportGuide/index.tsx b/src/pages/OSpy/components/ImportGuide/index.tsx
index 94b95dae..a70a8a3a 100644
--- a/src/pages/OSpy/components/ImportGuide/index.tsx
+++ b/src/pages/OSpy/components/ImportGuide/index.tsx
@@ -31,6 +31,7 @@ export const ImportGuide = ({ showConfig = true }: Props) => {
: `const $oSpy = new OSpy();`;
}, [t, showConfig]);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
const cdnCode = (url: string) => {
return `
@@ -55,7 +56,7 @@ ${INIT_CODE.split('\n')
jsDelivr
),
- lang: 'javascript',
+ lang: 'html',
code: cdnCode(
'https://cdn.jsdelivr.net/npm/@huolala-tech/page-spy-plugin-ospy',
),
@@ -67,7 +68,7 @@ ${INIT_CODE.split('\n')
unpkg
),
- lang: 'javascript',
+ lang: 'html',
code: cdnCode(
'https://unpkg.com/@huolala-tech/page-spy-plugin-ospy',
),
@@ -79,7 +80,7 @@ ${INIT_CODE.split('\n')
国内
),
- lang: 'javascript',
+ lang: 'html',
code: cdnCode(
'https://static.huolala.cn/libs/o-spy/2.1.9/index.min.js',
),
@@ -109,7 +110,7 @@ ${INIT_CODE}`}
),
},
];
- }, [t]);
+ }, [INIT_CODE, cdnCode, t]);
const [active, setActive] = useState(methods[0].title);
const activeMethod = methods.find((i) => i.title === active);
return (
diff --git a/src/pages/OSpy/components/Welcome/index.tsx b/src/pages/OSpy/components/Welcome/index.tsx
index c13f7e34..6d419270 100644
--- a/src/pages/OSpy/components/Welcome/index.tsx
+++ b/src/pages/OSpy/components/Welcome/index.tsx
@@ -17,7 +17,7 @@ const InstallSdkButton = () => {
if (!size) return null;
- if (size.height <= 850) {
+ if (size.width <= 768) {
return (
<>
{
footer={null}
maskClosable
>
-
+
-## Quick Start
+## Quick Start#quick-start
#### Step 1: Import O-Spy #step-1
diff --git a/src/pages/OSpyDocs/md/introduction.zh.mdx b/src/pages/OSpyDocs/md/introduction.zh.mdx
index 1f026aef..ce215888 100644
--- a/src/pages/OSpyDocs/md/introduction.zh.mdx
+++ b/src/pages/OSpyDocs/md/introduction.zh.mdx
@@ -31,7 +31,7 @@ O-Spy(发音 /əʊ spaɪ/,类似 **"Oh-Spy"**)是一个在 Web 项目中
-## 快速上手
+## 快速上手#quick-start
#### 第一步:引入 O-Spy#step-1
diff --git a/src/pages/RoomList/index.tsx b/src/pages/RoomList/index.tsx
index 99723db6..c6d42f4f 100644
--- a/src/pages/RoomList/index.tsx
+++ b/src/pages/RoomList/index.tsx
@@ -29,6 +29,7 @@ import { ClearOutlined, SearchOutlined } from '@ant-design/icons';
import { RoomCard } from './RoomCard';
import { Statistics } from './Statistics';
import { LoadingFallback } from '@/components/LoadingFallback';
+import { debug } from '@/utils/debug';
const { Title } = Typography;
const { Option } = Select;
@@ -89,8 +90,6 @@ const RoomList = () => {
const [form] = Form.useForm();
const { t } = useTranslation();
- const showDashboard = localStorage.getItem('page-spy-dashboard') === '1';
-
const [showMaximumAlert, setMaximumAlert] = useState(false);
const showLoadingRef = useRef(false);
const {
@@ -303,7 +302,7 @@ const RoomList = () => {
)}
- {showDashboard &&
}
+ {debug.enabled &&
}
{mainContent}
diff --git a/src/store/replay.ts b/src/store/replay.ts
index 3aa7e0c6..e15eb616 100644
--- a/src/store/replay.ts
+++ b/src/store/replay.ts
@@ -17,6 +17,7 @@ import {
} from '@/utils';
import { parseClientInfo, ParsedClientInfo } from '@/utils/brand';
import { DataType } from '@huolala-tech/page-spy-plugin-data-harbor/dist/types/harbor/base';
+import { debug } from '@/utils/debug';
const isCaredActivity = (activity: HarborDataItem) => {
const { type, data } = activity;
@@ -251,19 +252,16 @@ export const useReplayStore = create((set, get) => ({
}
return acc;
}, result);
-
- if (localStorage.getItem('page-spy-replay-debug')) {
- console.log({
- rrweb: allRRwebEvent,
- console: allConsoleMsg,
- network: allNetworkMsg,
- storage: allStorageMsg,
- system: allSystemMsg,
- startTime: start,
- endTime: end,
- duration,
- });
- }
+ debug.log({
+ rrweb: allRRwebEvent,
+ console: allConsoleMsg,
+ network: allNetworkMsg,
+ storage: allStorageMsg,
+ system: allSystemMsg,
+ startTime: start,
+ endTime: end,
+ duration,
+ });
set(
produce((state) => {
state.activity = activity;
diff --git a/src/utils/debug.ts b/src/utils/debug.ts
new file mode 100644
index 00000000..97137f5d
--- /dev/null
+++ b/src/utils/debug.ts
@@ -0,0 +1,32 @@
+const DEBUG_STORAGE_KEY = 'page-spy-debug';
+
+class Debug {
+ constructor(
+ public readonly enabled: boolean,
+ private readonly prefix: string,
+ ) {}
+
+ log(...args: unknown[]) {
+ if (this.enabled) {
+ console.log(`[${this.prefix}]`, ...args);
+ }
+ }
+
+ error(...args: unknown[]) {
+ if (this.enabled) {
+ console.error(`[${this.prefix}]`, ...args);
+ }
+ }
+
+ panic(message: string, ...args: unknown[]) {
+ if (this.enabled) {
+ this.error(message, ...args);
+ throw new Error(`[${this.prefix}] ${message}`);
+ }
+ }
+}
+
+export const debug = new Debug(
+ localStorage.getItem(DEBUG_STORAGE_KEY) !== null,
+ 'PageSpy',
+);
diff --git a/yarn.lock b/yarn.lock
index b397a052..76b762bb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -667,126 +667,126 @@
resolved "https://registry.yarnpkg.com/@huolala-tech/custom-error/-/custom-error-1.0.0.tgz#962726e0427753e4ebe637d79e69393dca70ed50"
integrity sha512-VdDs0EWLK/kXUCcYX7kD0ol0tMnjGrTlELl/GG+rrYJVr1wzad7+J4/t71zkvPWp54YAqhCnkq0+Tl6TqJkGgg==
-"@huolala-tech/page-spy-api-darwin-amd64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-darwin-amd64/-/page-spy-api-darwin-amd64-2.0.0.tgz#8aaa24185b22bf0e38a2a4fb06d3bb85a675f838"
- integrity sha512-Kdl9OhChlpgNagPIxxffg9VFXAQLE4EAq52q9tPEtJ5pbQ+orwqNpjuErUMi0G6Rdqxe8xGplK1BwdFDgAfFVg==
+"@huolala-tech/page-spy-api-darwin-amd64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-darwin-amd64/-/page-spy-api-darwin-amd64-2.2.0.tgz#687c3561e993430324d0773c38b636db2d7115fa"
+ integrity sha512-rVl9+UpKyQc5IOVmNROg0v/z3/w7o/crqb+gIjtE0kNEHXqked9GLeNibdQT7PHABEY1HnBeWfbbJIURFtL/lg==
-"@huolala-tech/page-spy-api-darwin-arm64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-darwin-arm64/-/page-spy-api-darwin-arm64-2.0.0.tgz#b221b5224afec7c674de658def689e10167c03d8"
- integrity sha512-sH1Nv27KrQZfOTA+1zzCHT1tyZ4v7zoiDw1Aj8O3No4iWvvBIakJsbr5dA2l93x7lq9HeEbYjQhrhtPJtzrroQ==
+"@huolala-tech/page-spy-api-darwin-arm64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-darwin-arm64/-/page-spy-api-darwin-arm64-2.2.0.tgz#b14f86cd39e41b14c13d015f27e547883dfea1f3"
+ integrity sha512-sPnc0bnpcVan6OLsJ1ud8xz2iX88vnlbyIK3pZj9deGXiVOgNDzQRZFwoN7jAqf2+Oj7MNqCRC/p9KtnYvK41Q==
-"@huolala-tech/page-spy-api-linux-amd64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-amd64/-/page-spy-api-linux-amd64-2.0.0.tgz#5107c046965cfe21647b644bfd00886d6ef346e7"
- integrity sha512-Tv8CprrmM1LhIAYtlkgTUhQJy7+BorI0NsLXCnBoG7MtQGQYQcivBggUSkMfkjYTY98iaCZ5HUR/5APsa1JzYA==
+"@huolala-tech/page-spy-api-linux-amd64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-amd64/-/page-spy-api-linux-amd64-2.2.0.tgz#ddf4e0c9fe711f07cfebd90958d11b02ed028e6c"
+ integrity sha512-ApIfJfEepxiwqRgwIBvMVSGXb454a88ged4YAs6ZekEbGRcB6Z1MlNGVq0sDtFijvIelCawCetc6gBQ1r6PLlg==
-"@huolala-tech/page-spy-api-linux-arm64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-arm64/-/page-spy-api-linux-arm64-2.0.0.tgz#6653d7876b29e0e075d815dde85334c79514ea22"
- integrity sha512-FJGTFdaK8ZbM7sgQqXwUZdYZpSpEIX7KjLiDcfMn5GDQ/usJC+73QTp7O3WVvrADzuSZjcAabl+w3vX+7WNopQ==
+"@huolala-tech/page-spy-api-linux-arm64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-arm64/-/page-spy-api-linux-arm64-2.2.0.tgz#3edbb12a01fd927eb12573ae09a04ec1bb4b44c0"
+ integrity sha512-BXsONuInUGUGJMZrCzsAIr6F0Y6nqc53/9i5KypyLQUNywuaRXHXYPsoYkgV1WKMNfvK3r3Pb4EYRnM6BafDmQ==
-"@huolala-tech/page-spy-api-linux-arm@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-arm/-/page-spy-api-linux-arm-2.0.0.tgz#af7146eed73ee680aabc58882bc3a3228b1e3c4e"
- integrity sha512-FkAQ6z8Q+uxGjkwJiVLxIyFuNlm/GAuG8+Zq8/J9PQNQgYo5yAl+pAcVhdCYkTIpffs9Y2fcKnR164mOmpNmJw==
+"@huolala-tech/page-spy-api-linux-arm@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-linux-arm/-/page-spy-api-linux-arm-2.2.0.tgz#dbfc7d2876c9bf3de8279363fdf02930d18b1fff"
+ integrity sha512-jR8W0DAmFaghxTJ5HEnsboQwrK+xGmsPRAAVyeiIs/pKTDsijRLGR2uLT4Z1xYIwmtgbj5C5CtNNxHrZiBdjdQ==
-"@huolala-tech/page-spy-api-win32-amd64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-amd64/-/page-spy-api-win32-amd64-2.0.0.tgz#4732478f5dac5a6705bc2797afcd44dacaacb8f4"
- integrity sha512-LYPkXkBSNOZKIN/W7l41zr2B6Y7f8QgctwuVgbJlsbNuzq84MmDUZYB4efOywDNh7Ae9cx1bSObcSXiwXkwUhQ==
+"@huolala-tech/page-spy-api-win32-amd64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-amd64/-/page-spy-api-win32-amd64-2.2.0.tgz#6a2d5b1e2ffcce0d9a2489c9a700d71c13189e7d"
+ integrity sha512-amL9kecq8YVmGOQfLGPuvgfTt3+xjdANqvae+p7BfoDW1tA8ySTymx/pvurK2GlmRM8as8EqfN7b399Z0sgcrw==
-"@huolala-tech/page-spy-api-win32-arm64@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-arm64/-/page-spy-api-win32-arm64-2.0.0.tgz#f452f712b2bcd8c9f270ab2a7a44843b1bb9ea02"
- integrity sha512-dUY2/iOZOHIuMz9W0lYRutU6dkLikRdi1MBENJ04T+8R6LFlZopiRgr1ZjnpJyCtl/vNC+M05JPX25psIA6tPA==
+"@huolala-tech/page-spy-api-win32-arm64@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-arm64/-/page-spy-api-win32-arm64-2.2.0.tgz#f48ff109dcdae4056cf861a2db6e3cd1d7cafe41"
+ integrity sha512-BG02o4lEZmpwDAxJOkmFF9Qdiqnm2v7Tvt8PRnVrpGfnM00yTgjTmQRh4OxvbSbaz8/viarZt8CTFH0BNxq6ow==
-"@huolala-tech/page-spy-api-win32-arm@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-arm/-/page-spy-api-win32-arm-2.0.0.tgz#d64caceeb42936ebc404a613c427ab9a562a8206"
- integrity sha512-wQyDniPNKpdhugXGN8cD+EbV5Ljbp2vjTvQvM0O6QW4iXDzIJ3IoPF0UWofOa+PUmbcmbZBA7ldDlnWSrE99SA==
+"@huolala-tech/page-spy-api-win32-arm@2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api-win32-arm/-/page-spy-api-win32-arm-2.2.0.tgz#95928aef716e825110c5a426cd86b92ce1103cfc"
+ integrity sha512-tHc1Uy0lhtPiTXFp/6fKt3KTYsdIK7OIk0i/EcwgDCR4h8dNbcXjj7uZmJtCGxKFQCUgKqRnw/Yt85eMJItxUg==
-"@huolala-tech/page-spy-api@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api/-/page-spy-api-2.0.0.tgz#1c36743abd49c4e43d6b05724687d96a9b8c72f1"
- integrity sha512-5a2N50v+kBor+bo77qrixML3O4QsCTUjsPfMlOVSIhGu54RQa96Qg39/MB3GP9fy4toKAO3cCBn/bWPAyCqXBw==
+"@huolala-tech/page-spy-api@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-api/-/page-spy-api-2.2.0.tgz#142fe342665ede74e872c1a4dfa6f3b9218a9ab5"
+ integrity sha512-ppDmQIX5j/qqMuQlamRNrWf/VJw3fFSzkUPPeyks4RTHkqcS+41RXNUziTmrYoIyVGRoTQHYQ5qAea3dQbXHbg==
optionalDependencies:
- "@huolala-tech/page-spy-api-darwin-amd64" "2.0.0"
- "@huolala-tech/page-spy-api-darwin-arm64" "2.0.0"
- "@huolala-tech/page-spy-api-linux-amd64" "2.0.0"
- "@huolala-tech/page-spy-api-linux-arm" "2.0.0"
- "@huolala-tech/page-spy-api-linux-arm64" "2.0.0"
- "@huolala-tech/page-spy-api-win32-amd64" "2.0.0"
- "@huolala-tech/page-spy-api-win32-arm" "2.0.0"
- "@huolala-tech/page-spy-api-win32-arm64" "2.0.0"
-
-"@huolala-tech/page-spy-base@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-base/-/page-spy-base-2.1.2.tgz#3d13338f3c8fa0f13b037b45b8f3ac5a397d4986"
- integrity sha512-cLE7LUUlZhFo7bIOl9qoJ+NV5jWjnfJG7QBlKr2CEeVmApLMtjre/ADrZgrNbL1ber+FH4r+KiT1uGyAPZ6tLw==
+ "@huolala-tech/page-spy-api-darwin-amd64" "2.2.0"
+ "@huolala-tech/page-spy-api-darwin-arm64" "2.2.0"
+ "@huolala-tech/page-spy-api-linux-amd64" "2.2.0"
+ "@huolala-tech/page-spy-api-linux-arm" "2.2.0"
+ "@huolala-tech/page-spy-api-linux-arm64" "2.2.0"
+ "@huolala-tech/page-spy-api-win32-amd64" "2.2.0"
+ "@huolala-tech/page-spy-api-win32-arm" "2.2.0"
+ "@huolala-tech/page-spy-api-win32-arm64" "2.2.0"
+
+"@huolala-tech/page-spy-base@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-base/-/page-spy-base-2.1.3.tgz#ace445a2b43bd46807bd7d42bf8404ffaaf82116"
+ integrity sha512-MVFUiaCsetpGYF85T8qd4+FUxlUF8sKFGlOp0sVx5ubLKyNS06TLH+pV5VEWdDeqiIdLCQ4YEpLCUc7YrFjxSg==
dependencies:
- "@huolala-tech/page-spy-types" "^2.1.2"
+ "@huolala-tech/page-spy-types" "^2.1.3"
-"@huolala-tech/page-spy-browser@^2.1.3":
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-browser/-/page-spy-browser-2.1.3.tgz#2539bc03614f363dd284b75cb3db84a65f051257"
- integrity sha512-B8ByAkQ+PN9hF/qjo5t4A1f4Fpppb6xl2++fhJp5lKmtoDEKDaU5S6WaaH/NAnjcKweJFKga+JvGve2ejwpk8A==
+"@huolala-tech/page-spy-browser@^2.1.6":
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-browser/-/page-spy-browser-2.1.6.tgz#609e7cb383e6c311f74ef9b12c8ace76c68f27da"
+ integrity sha512-pa2d+RbBdX0+bedtZknxDb0Vb+/W9dwI+HNpyZtgSy1FjoKV+/Yc4d/UScTHPGNdgG0/Sqjyb+xllLzjVB+oIA==
dependencies:
"@babel/runtime" "^7.13.0"
- "@huolala-tech/page-spy-base" "^2.1.2"
- "@huolala-tech/page-spy-types" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
+ "@huolala-tech/page-spy-types" "^2.1.3"
copy-to-clipboard "^3.3.1"
iseedeadpeople "^1.0.0"
-"@huolala-tech/page-spy-plugin-data-harbor@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-data-harbor/-/page-spy-plugin-data-harbor-2.1.2.tgz#2a9de77107ee8041604c5acf1f6e4d37ed10918b"
- integrity sha512-C4FEVsSqwqP1At2LDJIAL0Mp27KYrFAe2vwZVr/+UQwzaqV4tvGU98UubTUuxuZIc0gYMoH43+KsDhP3ycVqXw==
+"@huolala-tech/page-spy-plugin-data-harbor@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-data-harbor/-/page-spy-plugin-data-harbor-2.1.3.tgz#8cc18bb48f7c83646eeeea37fb4f8e414cfdbe35"
+ integrity sha512-Dmb3VZqItsCnXxVCpwh5BG7mGuMG0zLDhuTVLlJGfBKng66evTIAP3vH7CEyqYt0orQEkkFR5FqRIq0HEl5/Iw==
dependencies:
"@babel/runtime" "^7.13.0"
- "@huolala-tech/page-spy-base" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
copy-to-clipboard "^3.3.3"
fflate "^0.8.1"
-"@huolala-tech/page-spy-plugin-ospy@^2.1.7":
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-ospy/-/page-spy-plugin-ospy-2.1.7.tgz#6d1a08227594e52398f2794f96eff24cbe9fb82b"
- integrity sha512-jRm+bdH0KgB+soYkMwfuMpXcJzVQ3hXl9gekIjlUxquiWeooL0Xn6NbE9JVdpXeiO+bhQ2katzgDHCK1LUmlmQ==
+"@huolala-tech/page-spy-plugin-ospy@^2.1.10":
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-ospy/-/page-spy-plugin-ospy-2.1.10.tgz#eff95e95a3dfc8c414f5dc9bbca7b492ed6462df"
+ integrity sha512-C33ji2hWDMz9mmHYA/mPe6QtjrakbEYLeJswyyPYsRj5RQ4tvYBGUHclUnppbMgnr9mD5+XE3hjdRsLUbFSVUg==
dependencies:
- "@huolala-tech/page-spy-base" "^2.1.2"
- "@huolala-tech/page-spy-browser" "^2.1.3"
- "@huolala-tech/page-spy-plugin-data-harbor" "^2.1.2"
- "@huolala-tech/page-spy-plugin-rrweb" "^2.1.2"
- "@huolala-tech/page-spy-types" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
+ "@huolala-tech/page-spy-browser" "^2.1.6"
+ "@huolala-tech/page-spy-plugin-data-harbor" "^2.1.3"
+ "@huolala-tech/page-spy-plugin-rrweb" "^2.1.3"
+ "@huolala-tech/page-spy-types" "^2.1.3"
-"@huolala-tech/page-spy-plugin-rrweb@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-rrweb/-/page-spy-plugin-rrweb-2.1.2.tgz#37c74d3e98a2d244299ff41e74f284e35c11b84f"
- integrity sha512-W44GnyNn8rdhRUb5+R0TjgKNh4VlQAlPN96YWfR869rTiP+2rnKA8eQOQQXT/ih0aYVxlCqh7dnI/DaVdDot0Q==
+"@huolala-tech/page-spy-plugin-rrweb@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-rrweb/-/page-spy-plugin-rrweb-2.1.3.tgz#934f9a421147aed9fc22db3ac687274ac96a56eb"
+ integrity sha512-kGB0cpkKcHd1phKySDdkX6+MJT/bnIDhI/zM7bUvzikajcC5DhKIovp4N+1Q3TEAmUSJxCthZit10TIhNXRqbA==
dependencies:
"@babel/runtime" "^7.13.0"
- "@huolala-tech/page-spy-base" "^2.1.2"
- "@huolala-tech/page-spy-types" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
+ "@huolala-tech/page-spy-types" "^2.1.3"
rrweb "^2.0.0-alpha.4"
-"@huolala-tech/page-spy-plugin-whole-bundle@^2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-whole-bundle/-/page-spy-plugin-whole-bundle-2.1.5.tgz#5e2b1eea030785b0ba6142bdb88f65a4f255a896"
- integrity sha512-xLITfQ85wRk9GscGI3SbzYjEVH7vSmGxDEWDBaX7dbP4rnxJM6cYGTC2rg+y0Dvt67R9eU+3oXo9mwkPI1hcGQ==
+"@huolala-tech/page-spy-plugin-whole-bundle@^2.1.8":
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-plugin-whole-bundle/-/page-spy-plugin-whole-bundle-2.1.8.tgz#c73482a7ac9b9e2d2ba37932eeb992a08c900628"
+ integrity sha512-Pw9T3gt9kPMwdxQCyYKlfXqLgxzmPylKCOCuGkSbOjpTdBhDhTf4r5qGlyBaj4ceDO9aH9QNhbKUc3J89VM8Hg==
dependencies:
- "@huolala-tech/page-spy-base" "^2.1.2"
- "@huolala-tech/page-spy-browser" "^2.1.3"
- "@huolala-tech/page-spy-plugin-data-harbor" "^2.1.2"
- "@huolala-tech/page-spy-plugin-rrweb" "^2.1.2"
- "@huolala-tech/page-spy-types" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
+ "@huolala-tech/page-spy-browser" "^2.1.6"
+ "@huolala-tech/page-spy-plugin-data-harbor" "^2.1.3"
+ "@huolala-tech/page-spy-plugin-rrweb" "^2.1.3"
+ "@huolala-tech/page-spy-types" "^2.1.3"
-"@huolala-tech/page-spy-types@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-types/-/page-spy-types-2.1.2.tgz#261f44391a9715613eaaf0353a080ef1c6e7e2f6"
- integrity sha512-Zh9MPcwGkHvrXXPHXFq26CAjLUd2GO0FfOfAUTJbonsvvNV0kl+jljUlsdgy2HPSqApqXqxBOOAGwULUAqFZng==
+"@huolala-tech/page-spy-types@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@huolala-tech/page-spy-types/-/page-spy-types-2.1.3.tgz#293295f6669ec13cdce4250ee71236bad7da2314"
+ integrity sha512-3Crfh6ty+EbDeWKuDRkzAroA0SFsYHtwewsWZNDgOFN54DbcxTmesD0UWxLRzhcRoSsXK5pKlOBq/n7R3BmJuw==
dependencies:
- "@huolala-tech/page-spy-base" "^2.1.2"
+ "@huolala-tech/page-spy-base" "^2.1.3"
"@huolala-tech/react-json-view@^1.2.5":
version "1.2.5"