data-parser-js
v1.0.0
Published
A powerful data parsing library with TypeScript support
Downloads
86
Maintainers
Readme
DataParser
English | 简体中文
一个功能强大的数据解析器,用于处理数据的初始化、清理、搜索转换等操作。支持多种数据类型和模块格式,提供灵活的配置选项和自定义回调函数。
功能特性
- 🌟 多模块格式支持:支持 ES 模块、CommonJS 和 UMD 格式
- 📦 多种数据类型:支持字符串、数字、布尔值、数组、对象、日期、正则表达式、Set、Map 等
- 🎯 灵活的配置选项:支持删除空值、默认值、空数组等
- 🔧 自定义回调函数:支持 init、toSearch 等自定义回调
- 🔄 数据转换:支持数据的初始化、清理、搜索转换等
- 💪 类型安全:使用 TypeScript 编写,提供完整的类型定义
- ⚡ 高性能:优化的类型转换和数据处理逻辑
- 🔍 可扩展:支持自定义数据类型和转换规则
安装
# 使用 npm
npm install data-parser-js
# 使用 yarn
yarn add data-parser-js
# 使用 pnpm
pnpm add data-parser-js快速开始
ES 模块
import { DataParser } from 'data-parser-js';CommonJS
const { DataParser } = require('data-parser-js');UMD
<script src="https://unpkg.com/data-parser-js/dist/index.umd.js"></script>
<script>
const { DataParser } = window.DataParser;
</script>基本用法
1. 初始化
// 定义模型
const model = {
name: { type: String, default: 'default' },
age: { type: Number, default: 18 },
active: { type: Boolean, default: true }
};
// 创建解析器实例
const parser = new DataParser(model);
// 初始化数据
const data = parser.init({ name: 'John', age: 25, active: false });
console.log(data); // { name: 'John', age: 25, active: false }2. 搜索格式转换
// 定义模型
const model = {
pageNum: { type: Number, default: 1, deleteDefaultFromSearch: true },
pageSize: { type: Number, default: 10, deleteDefaultFromSearch: true },
keywords: { type: String, default: '' }
};
const parser = new DataParser(model);
// 转换为搜索格式
const searchData = parser.toSearch({ pageNum: 1, pageSize: 20, keywords: 'test' });
console.log(searchData); // { pageSize: 20, keywords: 'test' }3. 数据清理
// 定义模型
const model = {
name: { type: String, default: null, deleteNullOnDispose: true },
email: { type: String, default: '', deleteNullOnDispose: true }
};
const parser = new DataParser(model);
// 清理数据
const cleanData = parser.dispose({ name: null, email: '' });
console.log(cleanData); // {}核心功能
1. 数据初始化 (init)
将原始数据转换为符合模型定义的数据结构,应用默认值和类型转换。
2. 数据清理 (dispose)
清理数据,删除空值和无效数据,可配置是否删除 null 和空字符串。
3. 搜索格式转换 (toSearch)
将数据转换为搜索格式,可配置是否删除默认值、null 值和空数组。
4. 数据转换 (toData)
将数据转换为标准格式,可配置是否删除数组中的空项。
配置选项
全局配置
| 配置项 | 类型 | 默认值 | 描述 | |--------|------|--------|------| | deleteNullOnDispose | boolean | true | 在 dispose 操作中删除 null 值和空字符串 | | deleteDefaultFromSearch | boolean | true | 在 toSearch 操作中删除默认值 | | deleteNullFromSearch | boolean | true | 在 toSearch 操作中删除 null 值 | | deleteEmptyArrayFromSearch | boolean | true | 在 toSearch 操作中删除空数组 | | deleteNullArrayItemFromData | boolean | true | 在 toData 操作中删除数组中的空项 | | arrayStringSeparator | string | ',' | 数组字符串的分隔符 | | castType | boolean | true | 是否启用类型转换 |
模型项配置
| 配置项 | 类型 | 描述 | |--------|------|------| | type | Function | 数据类型构造函数 | | default | any | 默认值 | | init | Function | 初始化回调函数 | | toSearch | Function | 搜索转换回调函数 | | deleteNullOnDispose | boolean | 在 dispose 操作中删除 null 值 | | deleteDefaultFromSearch | boolean | 在 toSearch 操作中删除默认值 | | deleteNullFromSearch | boolean | 在 toSearch 操作中删除 null 值 | | deleteEmptyArrayFromSearch | boolean | 在 toSearch 操作中删除空数组 | | deleteNullArrayItemFromData | boolean | 在 toData 操作中删除数组空项 | | arrayStringSeparator | string | 数组字符串分隔符 | | castType | boolean | 是否启用类型转换 |
API 文档
DataParser 类
constructor(model: any, config?: DataParserConfig)
创建 DataParser 实例。
model: 数据模型定义config: 解析器配置
init(data: any): any
初始化数据。
data: 原始数据- 返回: 初始化后的数据
dispose(data: any): any
清理数据。
data: 原始数据- 返回: 清理后的数据
toSearch(data: any): any
转换为搜索格式。
data: 原始数据- 返回: 搜索格式数据
toData(data: any): any
转换为标准数据格式。
data: 原始数据- 返回: 标准格式数据
示例
1. 数组处理
const model = {
tags: { type: Array, default: [], arrayStringSeparator: ';' }
};
const parser = new DataParser(model);
const data = parser.init({ tags: 'tag1;tag2;tag3' });
console.log(data); // { tags: ['tag1', 'tag2', 'tag3'] }2. 日期和正则表达式
const model = {
createdAt: { type: Date, default: null },
pattern: { type: RegExp, default: /default/ }
};
const parser = new DataParser(model);
const data = parser.init({ createdAt: '2023-01-01', pattern: 'test.*' });
console.log(data); // { createdAt: Date(2023-01-01), pattern: /test.*/ }3. Set 和 Map
const model = {
uniqueTags: { type: Set, default: new Set() },
metadata: { type: Map, default: new Map() }
};
const parser = new DataParser(model);
const data = parser.init({
uniqueTags: 'tag1,tag2,tag1',
metadata: { key1: 'value1', key2: 'value2' }
});
console.log(data); // { uniqueTags: Set(['tag1', 'tag2']), metadata: Map({ key1: 'value1', key2: 'value2' }) }4. 嵌套对象
const model = {
user: {
name: { type: String, default: 'default' },
address: {
city: { type: String, default: 'default city' },
zip: { type: Number, default: 12345 }
}
}
};
const parser = new DataParser(model);
const data = parser.init({
user: { name: 'John', address: { city: 'New York' } }
});
console.log(data); // { user: { name: 'John', address: { city: 'New York', zip: 12345 } } }5. 自定义回调函数
const model = {
firstName: { type: String, default: '' },
lastName: { type: String, default: '' },
fullName: {
type: String,
default: '',
init: (key, value, data) => {
return `${data.firstName} ${data.lastName}`.trim();
}
}
};
const parser = new DataParser(model);
const data = parser.init({ firstName: 'John', lastName: 'Doe' });
console.log(data); // { firstName: 'John', lastName: 'Doe', fullName: 'John Doe' }测试和覆盖率
运行测试
# 运行单元测试
npm test
# 运行测试并生成覆盖率报告
npm run test:coverage覆盖率
| 文件 | 语句覆盖率 | 分支覆盖率 | 函数覆盖率 | 行覆盖率 | |------|------------|------------|------------|----------| | 所有文件 | 73.02% | 62.35% | 83.78% | 73.2% | | data-parser.ts | 73% | 56.17% | 80.95% | 72.86% | | utils.ts | 75.3% | 74.38% | 100% | 75% |
构建和开发
构建
# 构建所有模块格式
npm run build
# 开发模式,监听文件变化
npm run dev目录结构
├── src/ # 源代码目录
│ ├── index.ts # 入口文件
│ ├── data-parser.ts # 数据解析器主类
│ └── utils.ts # 工具函数
├── dist/ # 构建输出目录
│ ├── index.esm.js # ES 模块
│ ├── index.cjs.js # CommonJS
│ ├── index.umd.js # UMD
│ └── index.d.ts # TypeScript 类型定义
├── examples/ # 示例目录
│ └── basic-usage.js # 基本用法示例
├── __tests__/ # 测试目录
│ ├── data-parser.test.ts # 数据解析器测试
│ └── utils.test.ts # 工具函数测试
├── tsconfig.json # TypeScript 配置
├── rollup.config.js # Rollup 配置
├── package.json # 项目配置
└── README.md # 项目文档许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
版本变更
v1.0.0
- 初始版本
- 支持多种数据类型和模块格式
- 提供完整的类型定义
- 支持灵活的配置选项和自定义回调函数
联系方式
- 项目地址:https://github.com/mlinquan/data-parser-js
- 报告问题:https://github.com/mlinquan/data-parser-js/issues
- 提交代码:https://github.com/mlinquan/data-parser-js/pulls
DataParser - 让数据处理更简单! 🚀
