Permalink
codeql-action/node_modules/define-properties/index.js
Newer
100644
53 lines (44 sloc)
1.4 KB
Ignoring revisions in .git-blame-ignore-revs.
1
'use strict';
2
3
var keys = require('object-keys');
4
var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
5
6
var toStr = Object.prototype.toString;
7
var concat = Array.prototype.concat;
8
var origDefineProperty = Object.defineProperty;
9
10
var isFunction = function (fn) {
11
return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
12
};
13
14
var hasPropertyDescriptors = require('has-property-descriptors')();
15
16
var supportsDescriptors = origDefineProperty && hasPropertyDescriptors;
17
18
var defineProperty = function (object, name, value, predicate) {
19
if (name in object) {
20
if (predicate === true) {
21
if (object[name] === value) {
22
return;
23
}
24
} else if (!isFunction(predicate) || !predicate()) {
25
return;
26
}
27
}
28
if (supportsDescriptors) {
29
origDefineProperty(object, name, {
30
configurable: true,
31
enumerable: false,
32
value: value,
33
writable: true
34
});
35
} else {
36
object[name] = value; // eslint-disable-line no-param-reassign
37
}
38
};
39
40
var defineProperties = function (object, map) {
41
var predicates = arguments.length > 2 ? arguments[2] : {};
42
var props = keys(map);
43
if (hasSymbols) {
44
props = concat.call(props, Object.getOwnPropertySymbols(map));
45
}
46
for (var i = 0; i < props.length; i += 1) {
47
defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
48
}
49
};
50
51
defineProperties.supportsDescriptors = !!supportsDescriptors;
52
53
module.exports = defineProperties;