/
propWrapper.js
57 lines (50 loc) · 1.79 KB
/
propWrapper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* @fileoverview Utility functions for propWrapperFunctions setting
*/
'use strict';
function searchPropWrapperFunctions(name, propWrapperFunctions) {
const splitName = name.split('.');
return Array.from(propWrapperFunctions).some(func => {
if (splitName.length === 2 && func.object === splitName[0] && func.property === splitName[1]) {
return true;
}
return name === func || func.property === name;
});
}
function getPropWrapperFunctions(context) {
return new Set(context.settings.propWrapperFunctions || []);
}
function isPropWrapperFunction(context, name) {
if (typeof name !== 'string') {
return false;
}
const propWrapperFunctions = getPropWrapperFunctions(context);
return searchPropWrapperFunctions(name, propWrapperFunctions);
}
function getExactPropWrapperFunctions(context) {
const propWrapperFunctions = getPropWrapperFunctions(context);
const exactPropWrappers = Array.from(propWrapperFunctions).filter(func => func.exact === true);
return new Set(exactPropWrappers);
}
function isExactPropWrapperFunction(context, name) {
const exactPropWrappers = getExactPropWrapperFunctions(context);
return searchPropWrapperFunctions(name, exactPropWrappers);
}
function formatPropWrapperFunctions(propWrapperFunctions) {
return Array.from(propWrapperFunctions, func => {
if (func.object && func.property) {
return `'${func.object}.${func.property}'`;
}
if (func.property) {
return `'${func.property}'`;
}
return `'${func}'`;
}).join(', ');
}
module.exports = {
formatPropWrapperFunctions: formatPropWrapperFunctions,
getExactPropWrapperFunctions: getExactPropWrapperFunctions,
getPropWrapperFunctions: getPropWrapperFunctions,
isExactPropWrapperFunction: isExactPropWrapperFunction,
isPropWrapperFunction: isPropWrapperFunction
};