npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@jdplus/descaler

v1.2.0

Published

json数据校验返回值校验, 并执行不同的动作

Downloads

3

Readme

使用说明

=============================== Coverage summary ===============================
Statements   : 81.03% ( 94/116 )
Branches     : 73.25% ( 115/157 )
Functions    : 68.97% ( 20/29 )
Lines        : 100% ( 1/1 )
================================================================================

版本 1.2.0

增加 break 中断功能; action.path 增加相对路径_parent 功能;

引入

npm i @jdplus/descaler

项目中 init 函数使用方式

import { init, descaler } from "@jdplus/descaler";
import { configJSON } from "@/service/descaler.config";
init({
    onError: (e) => {
        //工具异常回调
        // {
        //     msg:"",
        //     err: {e}
        // }
        console.log(e);
    },
    onJSONErr: (e) => {
        //JSON校验异常回调 e:
        // {
        //     msg: "接口兜底捕获接口异常" + apiName,
        //     descalerErr: {
        //          rule,   // 触发的配置规则
        //          apiName,    // 触发的apiName
        //          checkValue,   // 触发校验的值
        //          type,       // 规则中action.type
        //          value,      // 规则action.value
        //          path,       // 规则action.path
        //          json,       // 接口返回值json
        //          apiCatchError   //接口catch捕获异常的error, 如果不是catch捕获,此项为undefined
        //     }
        // }
        console.log(e);
    },
    configJSON: configJSON, // 传入配置文件
    axiosInstance: teaPlus // 传入axios实例, 用于添加响应拦截器
});

descaler 函数单独使用

import { init, descaler } from "@jdplus/descaler";

// 监听descaler异常
init({
    onError: (e) => {
        //工具异常回调
        // {
        //     msg:"",
        //     err: {e}
        // }
        console.log(e);
    },
    onJSONErr: (e) => {
        //JSON校验异常回调 e:
        // {
        //     msg: "接口兜底捕获接口异常" + apiName,
        //     descalerErr: {
        //          rule,   // 触发的配置规则
        //          apiName,    // 触发的apiName
        //          checkValue,   // 触发校验的值
        //          type,       // 规则中action.type
        //          value,      // 规则action.value
        //          path,       // 规则action.path
        //          json,       // 接口返回值json
        //          apiCatchError   //接口catch捕获异常的error, 如果不是catch捕获,此项为undefined
        //     }
        // }
        console.log(e);
    }
});

/**
 * descaler 检测json并
 *
 * @param {object} config 配置参数
 * @param {object} json 需要校验的数据
 * @param {string} apiName 传入后用于监听异常时分辨监听到的异常数据
 * @return {Object} 执行配置参数后的数据
 */

var formatData = descaler(config, json, apiName);

// 配置参数说明
// {
//     rule: {
//         path: "rs.curTime",
//         type: "type",
//         value: "number"
//     },
//     action: {
//         path: "_self",
//         type: "default",
//         value: null
//     }
// }

init configJSON 配置文件说明

//配置文件示例
const configJSON = [
    {
        apiName: "rights/getActivitySwitch",
        check: [
            {
                rule: {
                    path: "rs.curTime",
                    type: "type",
                    value: "number"
                },
                action: {
                    path: "_self",
                    type: "default",
                    value: null
                }
            },
            {
                rule: {
                    path: "rs.doc_super_card_activity_time",
                    type: "JSONParse",
                    value: "JSONString"
                },
                action: {
                    path: "_self",
                    type: "jumpHash",
                    value: "other"
                }
            }
        ]
    },
    {
        apiName: "activityUser/isInWhiteList",
        check: [
            {
                rule: {
                    path: "rs.isInWhiteList",
                    type: "type",
                    value: "boolean"
                },
                action: {
                    path: "_self",
                    type: "default",
                    value: false
                }
            }
        ]
    }
];

rule.path action.path 路径

用于描述校验数据的路径, 正常情况直接传入路径的字符串就可以 举例 "a.b[0].c" 就可以从下面 data 中取到 1 不存在的值会返回 undefined

如果想校验所有的 c, 可以写为 "a.b[***].c"

如果想校验 data1 中的 c, 可以写为 "a.***.c"

path = "a.b"
var data = {
    a:{
        b:[
            {c:1},
            {c:2},
            {c:3},
            {c:4},
        ]
    }
}
var data1 = {
    a:{
        b0:{c:1}
        b1:{c:1}
        b2:{c:1}
        b3:{c:1}
        b4:{c:1}
    }
}

action.path 与 rule.path 类似, 多一个"_self"相对路径, 如果输入"_self", 表示规则处理的值与校验值路径相同, 如果输入"_self._parent._parent"表示寻找当前路径的父级的父级;

rule.type

  • equal 校验值与 rule.value 不相等时触发 action

  • unequal 校验值(基本类型)与 rule.value 相等时触发 action rule.value 支持基本类型值 和数组, 如果 rule.value 为数组, 校验值不存在于数组中时触发 action

  • type 校验值的 type 类型与 rule.value 不一致时触发 action type 支持 string, number, boolean, undefined, null, array, regexp, object, JSONString, emptyObj, notEmptyObject

  • JSONParse 校验值如果为字符串类型 JSON, 就对校验值进行 JSON.parse; 如果不是字符串类型 JSON,则触发 action

  • required 校验值为 null 或者 undefined 时触发 action

  • max 如果校验值大于 rule.value, 触发 action

  • range 如果校验值不为数字类型, 或超过 rule.value[0] rule.value[1]范围, 触发校验规则

  • minlength 如果校验值的 length 小于 rule.value 则触发校验规则

action.type

  • jump
    执行 window.location.href = action.value
  • jumpHash
    执行 window.location.hash = action.value
  • default
    action.path 补充默认值为 action.value
  • unset
    删除 action.path 路径上的值
  • defaultTimeStamp
    action.path 补充当前时间戳为默认值

isBreak: true

当 check 数组有多个规则时, 如果希望在触发了某个 action 后中断后续的校验, 可以在对应的 action 对象中增加 isBreak: true

// e.g.
    {
        apiName: "rights/getActivitySwitch",
        check: [
            {
                rule: {
                    path: "rs.curTime",
                    type: "type",
                    value: "number"
                },
                action: {
                    path: "_self",
                    type: "default",
                    value: null,
                    isBreak: true  //在这个action中增加了isBreak参数, 如果触发了action, 则这个check数组中后续的校验不会执行;
                }
            },
            {
                rule: {
                    path: "rs.doc_super_card_activity_time",
                    type: "JSONParse",
                    value: "JSONString"
                },
                action: {
                    path: "_self",
                    type: "jumpHash",
                    value: "other"
                }
            }
        ]
    }