Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kenote/parse-string
Parse the string into a Map.
https://github.com/kenote/parse-string
filter format map msgbody parser validator
Last synced: about 15 hours ago
JSON representation
Parse the string into a Map.
- Host: GitHub
- URL: https://github.com/kenote/parse-string
- Owner: kenote
- License: mit
- Created: 2020-10-24T02:43:51.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-11-02T06:59:18.000Z (about 1 year ago)
- Last Synced: 2024-07-07T13:06:02.038Z (5 months ago)
- Topics: filter, format, map, msgbody, parser, validator
- Language: TypeScript
- Homepage:
- Size: 30.3 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# parse-string
Parse the string into a Map.
[![NPM Version][npm-image]][npm-url]
[![NPM Downloads][downloads-image]][downloads-url]
[![Build Status][travis-image]][travis-url]
[![Gratipay][licensed-image]][licensed-url]## Installation
```bash
$ npm install parse-string
#
$ yarn add parse-string
```## Features
- parse string into Map
- format data
- filter and verify data.
- verify signature.## API
### toValue (type: 'string' | 'number' | 'date' | 'map' = 'string'): (value: any) => any
Convert specified type value.
- `type` - target type
- `value` - value of need convert### formatData (formats?: ParseData.format | ParseData.format[], customize?: Record): (value: any) => any
Format Data.
- `formats` - formatting options
- `customize` - map of custom function
- `value` - value of need format### parseData (options: ParseData.options, customize?: Record): (data: string) => Record
Parse the string to the specified result.
- `options` - parsing options
- `customize` - map of custom function
- `data` - data of need parse### parseBody (options: ParseData.parse[], customize?: Record): (msgbody: Record) => Record
Parse the msbody to the specified result.
- `options` - parsing options
- `customize` - map of custom function
- `msbody` - msbody of need parse### filterData (options: FilterData.options[], customize?: Record): (data: Record) => Record
Filter and verify data.
- `options` - filter options
- `customize` - map of custom function
- `data` - data of need filter### validSign (options: string, sign: string = 'sign'): (data: Record) => boolean
Verify signature.
- `options` - style of signature
- `sign` - feild of signature
- `data` - data of submit## Usages
Example: Parse string
```js
import { parseData } from 'parse-string'const customize = {
add: (a, b) => a + b
}const options = {
separator: /\;/,
collection: [
{
key: 'date',
type: 'string',
format: [
{
type: 'string',
regexp: /^(\d{4})(\d{2})(\d{2})$/,
substr: '$1-$2-$3'
},
{
type: 'date'
}
]
},
{
key: 'amount',
type: 'number'
},
{
key: 'user',
type: 'map'
},
{
key: 'username',
result: {
defaultValue: '$__user'
},
format: {
type: 'map',
maps: 'username'
}
},
{
key: 'group',
result: {
defaultValue: '$__user'
},
format: {
type: 'map',
maps: 'group.name'
}
},
{
key: 'level',
result: {
defaultValue: '$__user'
},
format: {
type: 'map',
maps: 'group.level'
}
},
{
key: 'money1',
result: {
defaultValue: '$__amount',
formula: {
exec: (a, b) => a + b,
opts: [ '$__amount', '$__level' ]
}
}
},
{
key: 'money2',
result: {
defaultValue: '$__amount',
formula: {
exec: 'add',
opts: [ '$__amount', '$__level' ]
}
}
}
],
omits: [ 'user' ]
}const data = '20201027;39554;{username:\'thondery\',group:{name:\'管理员\',level:9999}}'
parseData(options, customize)(data)
// {
// date: 2020-10-27T00:00:00.000Z,
// amount: 39554,
// username: 'thondery',
// group: '管理员',
// level: 9999,
// money1: 49553,
// money2: 49553
// }
```Example: Filter and verify data
```js
import { filterData, validSign } from 'parse-string'const customize = {
isPassword: value => /^(?=.*[A-Za-z])[A-Za-z0-9$@$!%*#?&]/.test(value)
}const options = [
{
key: 'username',
type: 'string',
rules: [
{ required: true, message: '用户名不能为空' },
{ min: 4, max: 12, message: '用户名长度不能小于4或大于12(字符)' },
{ pattern: '^[a-zA-Z]{1}[a-zA-Z0-9\_\-]', message: '用户名格式错误' }
]
},
{
key: 'password',
type: 'string',
rules: [
{ required: true, message: '密码不能为空' },
{ min: 6, max: 15, message: '密码长度不能小于6或大于15(字符)' },
{ validator: 'isPassword', message: '密码格式错误' }
]
},
{
key: 'items',
type: 'string[]',
defaultValue: []
},
{
key: 'sign',
type: 'string',
md5: '${password}${username}'
}
]const data = { username: 'thondery', password: 'a123456', items: '1001,1002,1003' }
try {
let result = filterData(options, customize)(data)
// {
// username: 'thondery',
// password: 'a123456',
// items: ['1001', '1002', '1003'],
// sign: '61a0375131b33b72b56e4e244d0b2f29'
// }
} catch (error) {
console.error(error.message)
}validSign('${password}${username}', 'sign')({ username: 'thondery', password: 'a123456', sign: '61a0375131b33b72b56e4e244d0b2f29' })
// true or false
```## License
this repo is released under the [MIT License](https://github.com/kenote/parse-string/blob/main/LICENSE).
[npm-image]: https://img.shields.io/npm/v/parse-string.svg
[npm-url]: https://www.npmjs.com/package/parse-string
[downloads-image]: https://img.shields.io/npm/dm/parse-string.svg
[downloads-url]: https://www.npmjs.com/package/parse-string
[travis-image]: https://travis-ci.com/kenote/parse-string.svg?branch=main
[travis-url]: https://travis-ci.com/kenote/parse-string
[licensed-image]: https://img.shields.io/badge/license-MIT-blue.svg
[licensed-url]: https://github.com/kenote/parse-string/blob/main/LICENSE