Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

journey-ad/detector-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1 Commit

Repository files navigation

Detector.js

Warning

此项目通过人工智能辅助生成,可能存在未知的问题或错误,使用前请充分测试以确保稳定性

基于 JavaScript Proxy API 的深度监控工具,实现对象与函数交互的全面拦截

detector.js 是一个轻量级监控库,能够精确追踪 JavaScript 对象和函数的所有交互行为,包括属性访问、值修改、函数调用及构造函数实例化。
基于原生 Proxy API 构建,提供结构化的事件系统,适用于调试分析、状态监控、性能追踪和响应式系统开发。

核心特性

  • 深度拦截:递归封装嵌套对象、数组和函数返回值
  • 完整事件覆盖:支持 getsetapplyconstructdeleteProperty 等操作类型,以及 Promiseapply:resolvedapply:rejected 状态
  • 异步监控:通过劫持 Promisethen/catch 方法,实现异步函数执行结果的状态追踪
  • 智能过滤系统:通过 includeexclude 配置,实现对特定路径的精准监控
  • 直观路径表示:自动将内部路径数组转换为标准 JavaScript 访问语法(如 'a.b[2].c')
  • 内存安全保障:采用 WeakMapWeakSet 防止内存泄漏,妥善处理循环引用
  • 健壮性设计:在 Proxy 创建失败或事件处理异常时优雅降级,确保主程序稳定运行

快速开始

在线演示


安装使用

detector.js 采用 UMD 格式,支持多种引入方式:

浏览器直接引入:

<script src="./detector.js"></script>
<script>
 // createDetector 方法将在全局可用
 const detector = createDetector(target, onEvent, opts);
</script>

或是通过打包器如 webpackrollup 等以 ES Module 方式引入:

import { createDetector } from './detector.js';
const detector = createDetector(target, onEvent, opts);

API 文档

核心函数为 createDetector:

createDetector(target, onEvent, opts)

参数:

  • target: 需要监控的目标对象或函数
  • onEvent: 事件触发时的回调函数,接收事件对象作为参数
  • opts: 可选配置对象

事件对象结构:

onEvent 回调函数接收的事件对象包含以下属性:

type Event = {
 type: 'get' | 'set' | 'apply' | 'apply:resolved' | 'apply:rejected' | 'construct' | 'deleteProperty'; // 事件类型
 timestamp: number; // 事件触发的时间戳
 target?: any; // 事件触发的目标对象
 accessor: string; // JS语法访问路径,如 'a.b[2].c'
 path: Array<string | Symbol>; // 访问路径数组,如 ['a', 'b', 2, 'c']
 prop?: string | Symbol; // 访问的属性名
 args?: Array<any>; // 调用时的参数列表
 value?: any; // set 操作的 value
 result?: any; // get 或 apply 得到的结果
 isPromise?: boolean; // 是否为 Promise 类型
 error?: any; // 错误对象
};

type 事件类型

  • get: 属性访问操作
  • set: 属性赋值操作
  • apply: 函数调用操作
  • apply:resolved: Promise 成功状态
  • apply:rejected: Promise 失败状态
  • construct: 构造函数调用
  • deleteProperty: 属性删除操作

配置选项 (opts):

  • depthLimit?: number: 递归封装的最大深度,默认无限制
  • include?: (string|RegExp)[]: 路径白名单,仅监控匹配的属性访问
  • exclude?: (string|RegExp)[]: 路径黑名单,忽略匹配的属性访问

使用示例

1. 对象属性监控

监控对象的属性访问和修改操作:

import { createDetector } from './detector.js';
const user = {
 name: 'Alice',
 age: 30,
 address: {
 city: 'Wonderland'
 }
};
const detector = createDetector(user, event => {
 console.log(`[${event.type}]`, `路径: ${event.accessor}`);
 if (event.type === 'set') {
 console.log(`- 值:`, event.value);
 }
});
// 访问属性
console.log(detector.name); // [get] 路径: name
console.log(detector.address.city); // [get] 路径: address
 // [get] 路径: address.city
// 设置属性
detector.age = 31; // [set] 路径: age - 值: 31
detector.address.city = 'New York'; // [set] 路径: address.city - 值: New York

2. 函数调用监控

监控函数调用的参数和返回值:

import { createDetector } from './detector.js';
const calculator = {
 add: (a, b) => a + b,
 multiply: (a, b) => a * b
};
const detector = createDetector(calculator, event => {
 if (event.type === 'apply') {
 console.log(`[${event.type}]`, `函数: ${event.accessor}`, `参数: [${event.args}]`);
 console.log(`- 结果:`, event.result);
 }
});
detector.add(5, 10); // [apply] 函数: add 参数: [5,10] - 结果: 15

3. 路径过滤配置

使用 includeexclude 实现精准监控:

import { createDetector } from './detector.js';
const data = {
 public: { id: 1 },
 private: { key: 'secret' },
 status: 'active'
};
const detector = createDetector(data, event => {
 console.log(`[${event.type}] 路径: ${event.accessor}`);
}, {
 // 仅监控 'public' 路径下的操作
 include: ['public']
});
detector.public.id; // [get] 路径: public.id
detector.private.key; // (无输出)
detector.status = 'inactive'; // (无输出)

许可证

MIT License

About

基于 JavaScript Proxy API 的深度监控工具,实现对象与函数交互的全面拦截

Topics

Resources

License

Stars

Watchers

Forks

AltStyle によって変換されたページ (->オリジナル) /