New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

predefine

Package Overview
Dependencies
Maintainers
2
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

predefine - npm Package Compare versions

Comparing version 0.0.6 to 0.1.0

71

index.js
'use strict';
var toString = Object.prototype.toString;
/**

@@ -7,13 +9,13 @@ * The properties that need should be on a valid description object. As defined

*
* @type {Array}
* @type {Object}
* @private
*/
var description = [
'configurable', // Property may be changed or deleted.
'enumerable', // Shows up in enumeration of the properties.
'get', // A function that serves as a getter.
'set', // A function that serves as a setter.
'value', // Value associated with the property.
'writable' // Property may be changed using assignment.
];
var description = {
configurable: 'boolean', // Property may be changed or deleted.
enumerable: 'boolean', // Shows up in enumeration of the properties.
get: 'function', // A function that serves as a getter.
set: 'function', // A function that serves as a setter.
value: undefined, // Value associated with the property.
writable: 'boolean' // Property may be changed using assignment.
};

@@ -32,4 +34,28 @@ /**

//
// A descriptor can only be a data or accessor descriptor, never both.
// An data descriptor can only specify:
//
// - configurable
// - enumerable
// - (optional) value
// - (optional) writable
//
// And an accessor descriptor can only specify;
//
// - configurable
// - enumerable
// - (optional) get
// - (optional) set
//
if (
('value' in obj || 'writable' in obj)
&& ('function' === typeof obj.set || 'function' === typeof obj.get)
) return false;
return !!keys.length && keys.every(function allowed(key) {
return !!~description.indexOf(key);
var type = description[key]
, valid = type === undefined || is(obj[key], type);
return key in description && valid;
});

@@ -39,2 +65,14 @@ }

/**
* Get accurate type information for a given JavaScript thing.
*
* @param {Mixed} thing The thing we want to know.
* @param {String} type The class
* @returns {Boolean}
* @api private
*/
function is(thing, type) {
return toString.call(thing).toLowerCase().slice(8, -1) === type;
}
/**
* Predefine, preconfigure an Object.defineProperty.

@@ -44,2 +82,3 @@ *

* @param {Object} pattern The default description.
* @param {Boolean} override Override the pattern.
* @returns {Function} The function definition.

@@ -56,5 +95,9 @@ * @api public

//
if (!predefine.descriptor(description)) description = {
value: description
};
if (
!predefine.descriptor(description)
|| is(description, 'object') && !predefine.descriptor(predefine.mixin({}, pattern, description))
) { description = {
value: description
};
}

@@ -71,3 +114,3 @@ //

Object.defineProperty(obj, method, !clean
? predefine.mixin(pattern, description)
? predefine.mixin({}, pattern, description)
: description

@@ -74,0 +117,0 @@ );

2

package.json
{
"name": "predefine",
"version": "0.0.6",
"version": "0.1.0",
"description": "Predefine your Object.defineProperties to create a more human readable API.",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -34,2 +34,11 @@ describe('predefine', function () {

expect(Object.keys(obj).length).to.equal(0);
readable('cache', {
get: function () { },
set: function () { }
});
expect(obj.cache).to.be.a('object');
expect(obj.cache.get).to.be.a('function');
expect(obj.cache.set).to.be.a('function');
});

@@ -74,2 +83,22 @@

})).to.equal(true);
expect(predefine.descriptor({
set: function() {},
get: function() {}
})).to.equal(true);
expect(predefine.descriptor({
set: function() {},
get: function() {},
value: 'foo'
})).to.equal(false);
expect(predefine.descriptor({
set: true,
get: false,
})).to.equal(false);
expect(predefine.descriptor({
enumerable: function () {}
})).to.equal(false);
});

@@ -76,0 +105,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc