Sha256: dc7b9a6bcbbe00c55e0040775cd6aed65f6a91fbbf5cf9cb49992e7d09ee6467

Contents?: true

Size: 1.57 KB

Versions: 84

Compression:

Stored size: 1.57 KB

Contents

'use strict';

var keys = require('object-keys');
var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';

var toStr = Object.prototype.toString;
var concat = Array.prototype.concat;
var origDefineProperty = Object.defineProperty;

var isFunction = function (fn) {
	return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
};

var arePropertyDescriptorsSupported = function () {
	var obj = {};
	try {
		origDefineProperty(obj, 'x', { enumerable: false, value: obj });
		// eslint-disable-next-line no-unused-vars, no-restricted-syntax
		for (var _ in obj) { // jscs:ignore disallowUnusedVariables
			return false;
		}
		return obj.x === obj;
	} catch (e) { /* this is IE 8. */
		return false;
	}
};
var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();

var defineProperty = function (object, name, value, predicate) {
	if (name in object && (!isFunction(predicate) || !predicate())) {
		return;
	}
	if (supportsDescriptors) {
		origDefineProperty(object, name, {
			configurable: true,
			enumerable: false,
			value: value,
			writable: true
		});
	} else {
		object[name] = value;
	}
};

var defineProperties = function (object, map) {
	var predicates = arguments.length > 2 ? arguments[2] : {};
	var props = keys(map);
	if (hasSymbols) {
		props = concat.call(props, Object.getOwnPropertySymbols(map));
	}
	for (var i = 0; i < props.length; i += 1) {
		defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
	}
};

defineProperties.supportsDescriptors = !!supportsDescriptors;

module.exports = defineProperties;

Version data entries

84 entries across 83 versions & 13 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/define-properties/index.js
disco_app-0.18.0 test/dummy/node_modules/define-properties/index.js
disco_app-0.18.2 test/dummy/node_modules/define-properties/index.js
disco_app-0.16.1 test/dummy/node_modules/define-properties/index.js
disco_app-0.15.2 test/dummy/node_modules/define-properties/index.js
disco_app-0.18.4 test/dummy/node_modules/define-properties/index.js
disco_app-0.18.1 test/dummy/node_modules/define-properties/index.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/define-properties/index.js
disco_app-0.14.0 test/dummy/node_modules/define-properties/index.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/define-properties/index.js
tang-0.2.1 spec/tang_app/node_modules/define-properties/index.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/define-properties/index.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/define-properties/index.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/define-properties/index.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/define-properties/index.js
tang-0.2.0 spec/tang_app/node_modules/define-properties/index.js
tang-0.1.0 spec/tang_app/node_modules/define-properties/index.js
tang-0.0.9 spec/tang_app/node_modules/define-properties/index.js
enju_library-0.3.8 spec/dummy/node_modules/define-properties/index.js
condenser-0.3 lib/condenser/processors/node_modules/define-properties/index.js