match.parse(params, matchObj);
match.parseConfig(params, matchObj, tmpConfig);
etc:
映射普通字段
const match = import 'lib-match';
let params = {
title: 'title',
};
let data = match.parse(params, {
title: '$${{title}}',
msg: 'this is string',
});
assert.deepEqual(data, {
title: 'title',
msg: 'this is string',
});
映射对象属性
let params = {
title: 'title',
data: {
city: '北京市',
province: '北京',
},
};
let data = match.parse(params, {
title: '$${{title}}',
data: {
city: '$${{data.city}}',
pro: '$${{data.province}}',
},
});
assert.deepEqual(data, {
title: 'title',
data: {
city: '北京市',
province: '北京',
},
});
映射对象所有字段为空
let params = {};
let data = match.parse(params, {
title: '$${{abc}}',
data: {
id: '$${{name.id}}',
},
text: {
title: '$${{name.abc}}',
},
});
assert.deepEqual(data, {
data: {},
text: {},
});
映射字段带有默认值
let params = {
title: 'title',
id: 1,
type: 0,
};
let data = match.parse(params, {
title: '$${{ids}} || 123',
id: '$${{ids}} || "123"',
id2: '$${{ids}} || true',
id3: '$${{ids}} || null',
id4: '$${{ids}} || undefined',
id5: '$${{ids}} || NaN',
name: '$${{name}} || []',
value: '$${{value}} || {}',
type: '$${{type}} ||| 1',
});
assert.deepEqual(data, {
title: 123,
id: '123',
id2: true,
id3: null,
id4: undefined,
id5: NaN,
name: [],
value: {},
type: 1,
});
字段存在 但是为 false 类型(!!(val === false)
let params = {
type: 0,
};
let data = match.parse(params, {
type: '$${{type}} ||| 1',
type2: '$${{ids}} ||| 1',
type3: '$${{ids}} || $${{type}} ||| 1',
type4: '$${{type}} || $${{ids}} ||| 1',
});
assert.deepEqual(data, {
type: 1,
type2: 1,
type3: 1,
type4: 0,
});
||(或者|||) 语法嵌套
let params = {
id: 0,
c: 1,
city: 2,
type: 0,
};
let data = match.parse(params, {
id: '$${{ids}} || 123',
city: '$${{c}} || $${{city}} || 1',
city2: '$${{province}} || 4',
city3: '$${{c2}} || $${{city}} || 1',
city3: '$${{c2}} || $${{city}} || 1',
type1: '$${{ids}} || $${{type}} ||| 1',
type2: '$${{type}} || $${{ids}} ||| 1',
});
let assert.deepEqual(data, {
id: 123,
city: 1,
city2: 4,
city3: 2,
type1: 1,
type2: 0,
});
映射入口为数组
let params = [
{
code: 200,
msg: 'ok',
data: [1, 2, 3],
},
{
code: 500,
msg: 'error',
data: [4, 5, 6],
},
];
let data = match.parse(params, {
code: '${0.code}',
msg: '${1.msg}',
data: function(data) {
return data[0].data.concat(data[1].data);
},
});
let assert.deepEqual(data, {
code: 200,
msg: 'error',
data: [1, 2, 3, 4, 5, 6],
});
映射返回数组/对象数组
let params = {
code: 200,
msg: 'success',
data: [
{
id: 1,
type: 'a',
},
{
id: 2,
},
],
};
let data = match.parse(params, {
data: [
'data',
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
],
});
assert.deepEqual(data, [
{
id: 1,
title: 'string',
type: 2,
},
{
id: 2,
title: 'string',
type: 'abc',
},
]);
params = [
{
id: 1,
type: 'a',
},
{
id: 2,
},
];
data = match.parse(params, [
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);
assert.deepEqual(data, [
{
id: 1,
title: 'string',
type: 'a',
},
{
id: 2,
title: 'string',
type: 'abc',
},
]);
params = {
data: [
{
id: 1,
type: 'a',
},
{
id: 2,
},
],
};
data = match.parse(params, [
'data',
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);
assert.deepEqual(data, [
{
id: 1,
title: 'string',
type: 'a',
},
{
id: 2,
title: 'string',
type: 'abc',
},
]);
params = {
data: {
table: [
{
id: 1,
type: 2,
},
{
id: 2,
},
],
},
};
data = match.parse(params, [
'data.table',
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);
assert.deepEqual(data, [
{
id: 1,
title: 'string',
type: 2,
},
{
id: 2,
title: 'string',
type: 'abc',
},
]);
params = null;
data = match.parse(params, [
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);
assert.deepEqual(data, []);
params = {};
data = match.parse(params, [
'data',
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);
assert.deepEqual(data, []);
params = {
code: 200,
msg: 'ok',
data: null,
};
data = match.parse(params, {
code: '$${{code}}',
msg: '$${{msg}}',
data: [
'data',
{
id: '$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
],
});
assert.deepEqual(data, {
code: 200,
msg: 'ok',
data: [],
});
通过字符串字段名映射数组对象(只需要一个字段)
let params = {
code: 200,
msg: 'ok',
data: [
{
id: 1,
name: 2,
},
{
id: 2,
name: 3,
},
],
};
let data = match.parse(params, ['data', 'id']);
assert.deepEqual(data, [1, 2]);
data = match.parse(params, {
code: '$${{code}}',
msg: '$${{msg}}',
data: ['data', 'id'],
});
assert.deepEqual(data, {
code: 200,
msg: 'ok',
data: [1, 2],
});
映射 function
let params = {
pid: 2,
id: 3,
};
let data = match.parse(params, {
pid: 1,
id: function(data) {
return data.pid + data.id + this.pid;
},
});
映射带有临时 config
params = {
pid: 1,
id: 2,
cityId: 2,
};
data = match.parseConfig(
params,
{
id: '$${{ID}}',
pid: '$${{pid}}',
},
{
autoComplete: true,
filterUndefined: false,
},
);
expect(data).to.be.eql({
id: undefined,
pid: 1,
cityId: 2,
});
data = match.parse(params, {
id: '$${{id}}',
});
expect(data).to.be.eql({
id: 2,
});
data = match.parseConfig(
params,
{
id: '$${{id}}',
pid: '$${{pid}}',
},
{
ignoreTokenKey: ['id'],
},
);
expect(data).to.be.eql({
id: '$${{id}}',
pid: 1,
});
data = match.parse(params, {
id: '$${{id}}',
});
expect(data).to.be.eql({
id: 2,
});
映射带有类型转换
let params = {
pid: 'false',
name: 1,
id: '2',
city: 1,
district: '1.56',
};
let data = match.parse(params, {
pid: '(boolean)$${{pid}}',
pid2: '!(boolean)$${{pid}}',
Pid: '(Boolean)$${{pid}}',
Pid2: '!(Boolean)$${{pid}}',
name: '(Boolean)$${{name}}',
id: '(int)$${{id}}',
city: '(string)$${{city}}',
dis: '(float)$${{district}}',
});
data = match.parse([params], {
pid: '(boolean)${0.pid}',
pid2: '!(boolean)${0.pid}',
Pid: '(Boolean)${0.pid}',
Pid2: '!(Boolean)${0.pid}',
name: '(Boolean)${0.name}',
id: '(int)${0.id}',
city: '(string)${0.city}',
dis: '(float)${0.district}',
});
params = [
{
id: 1,
type: 2,
},
{
id: 2,
},
];
data = match.parse(params, [
{
id: '(string)$${{id}}',
title: 'string',
type: "$${{type}} || 'abc'",
},
]);