open-index/open-npm huggingface dataset:
npm package: @js0205/track-analytics
Description: 一个支持Web和移动端H5的埋点SDK
Author: js0205
Latest version: 1.0.0

# Track Analytics

一个支持Web和移动端H5的埋点SDK。提供自动和手动埋点功能，可以收集用户行为、性能数据、错误信息等。

## 特点

- 支持 Web 和移动端 H5
- 插件化架构，易于扩展
- 自动捕获页面访问、停留时间、点击行为
- 自动监控页面性能和错误
- 支持自定义事件埋点
- 支持离线缓存和批量上报
- 体积小，无外部依赖

## 安装

```bash
npm install track-analytics --save
```

## 快速开始

### 基础使用

```javascript
import createTracker from 'track-analytics';

// 初始化
const tracker = createTracker({
  appId: 'your-app-id',
  reportUrl: 'https://your-api.com/collect'
});

// 使用
tracker.track('button_click', { buttonName: '登录按钮' });
```

### 设置用户信息

```javascript
tracker.setUser({
  userId: '123456',
  userName: 'test_user',
  userRole: 'member'
});
```

### 添加自定义参数

```javascript
tracker.setCustomParams({
  version: '1.0.0',
  channel: 'app_store'
});
```

## 配置选项

| 选项 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| appId | string | 必填 | 应用标识 |
| reportUrl | string | 必填 | 数据上报地址 |
| debug | boolean | false | 是否开启调试模式 |
| reportStrategy | 'immediate' \| 'batch' | 'batch' | 上报策略: 立即上报或批量上报 |
| reportInterval | number | 5000 | 批量上报时间间隔(ms) |
| autoTrackPV | boolean | true | 是否自动上报PV |
| autoTrackStayTime | boolean | true | 是否自动上报页面停留时长 |
| autoTrackClick | boolean | false | 是否自动上报点击事件 |
| autoTrackError | boolean | true | 是否自动上报错误 |
| autoTrackPerformance | boolean | true | 是否自动上报性能 |

## 自动埋点

SDK默认开启以下自动埋点功能：

- **PV埋点**：页面访问量统计
- **页面停留时间**：统计用户在页面停留的时间
- **错误监控**：捕获JS运行时错误、Promise未处理的拒绝、资源加载错误
- **性能监控**：采集页面加载性能、资源加载情况、关键渲染指标

可以通过配置项开启自动点击埋点：

```javascript
const tracker = createTracker({
  appId: 'your-app-id',
  reportUrl: 'https://your-api.com/collect',
  autoTrackClick: true
});
```

## 手动埋点

### 追踪自定义事件

```javascript
// 基础事件埋点
tracker.track('search', { keyword: '埋点' });

// 带更多信息的事件埋点
tracker.track('product_view', {
  productId: '10001',
  productName: '商品名称',
  price: 99.9,
  category: '电子产品'
});
```

### 手动追踪PV

```javascript
// 手动触发PV埋点，可以传递额外参数
tracker.trackPageView({ 
  pageType: 'detail',
  source: 'recommend'
});
```

### 手动追踪错误

```javascript
try {
  // 业务代码
} catch (error) {
  // 手动上报错误
  tracker.trackError(error, { 
    position: 'payment-module',
    fatal: true
  });
}
```

## 自定义埋点元素

在HTML元素上添加`data-track-xxx`属性，自动埋点时会采集这些属性：

```html
<button 
  data-track-id="login_btn"
  data-track-category="user"
  data-track-action="click"
>
  登录
</button>
```

## 插件系统

SDK使用插件系统扩展功能。可以创建自定义插件：

```javascript
import { Plugin } from 'track-analytics';

// 创建自定义插件
class MyCustomPlugin implements Plugin {
  name = 'my-custom-plugin';
  
  install(sdk) {
    // 插件实现逻辑
    console.log('插件已安装');
    
    // 可以访问sdk实例
    sdk.track('plugin_installed', { name: this.name });
  }
  
  destroy() {
    // 清理逻辑
    console.log('插件已卸载');
  }
}

// 使用自定义插件
tracker.use(new MyCustomPlugin());
```

## 浏览器兼容性

- Chrome 60+
- Firefox 55+
- Safari 11+
- Edge 16+
- iOS Safari 11+
- Android Browser 4.4+

## 许可证

MIT
npm package: @js20/markdown-site
Description: This is a TS library that generates a static website from markdown source files, with a bunch of extra functionality. Like sitemap/robots generation, commands that can be executed to generate html inside the templates, etc.
Latest version: 1.20.4

# markdown-site

This is a TS library that generates a static website from markdown source files, with a bunch of extra functionality. Like sitemap/robots generation, commands that can be executed to generate html inside the templates, etc.
npm package: @js20/schema
Description: Schema validation for frontend or backend. E.g.
Latest version: 1.2.1

# @js20/schema

Schema validation for frontend or backend.
E.g.

```ts
//Type definition for typescript compiler
interface User {
  id: number;
  name: string;
  email?: string;
  age?: number;
}

//Runtime definition
const sUser: User = {
    id: sNumber().type(),
    name: sString().type(),
    email: sString().optional().type(),
    age: sNumber().optional().type()
};

//Validated schema
const validatedSchema = getValidatedSchema(sUser);

//This throws
validateBySchema(validatedSchema, {
    something: false
});

//This is ok
validateBySchema(validatedSchema, {
    id: 1,
    name: "John"
});
```

## License

MIT license