JavaScript Data Descriptor Validator

2.1.3 · active · verified Sun Apr 19

The `is-data-descriptor` package is a focused utility designed to accurately determine if a given JavaScript value conforms to the characteristics of a valid data property descriptor, as defined by the ECMAScript specification. Currently stable at version 2.1.3, it is part of the `inspect-js` family of descriptor validation libraries. Unlike `is-descriptor`, which checks for any valid descriptor type, this package specifically targets data descriptors, verifying the presence and correct types of properties like `value`, `writable`, `enumerable`, and `configurable`, while ensuring the absence of accessor properties (`get`, `set`). Its release cadence is typically slow, reflecting its stable and specific functionality. A key characteristic is that it will not throw an error for extraneous, invalid properties present on the descriptor object, which might differ from strict validation expectations in some scenarios. It is primarily used in Node.js environments and build processes where strict object property definition validation is required.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `is-data-descriptor` to check various objects for valid data descriptor characteristics, including both valid and invalid examples.

import assert from 'assert';
import isDataDescriptor from 'is-data-descriptor';

function validateDescriptors() {
  // Valid data descriptors
  assert.equal(isDataDescriptor({ value: 'foo' }), true, 'Basic value descriptor');
  assert.equal(isDataDescriptor({ value: function () {} }), true, 'Function value descriptor');
  assert.equal(isDataDescriptor({ value: true, enumerable: true, configurable: false, writable: true }), true, 'Full data descriptor');

  // Invalid inputs or non-data descriptors
  assert.equal(isDataDescriptor('a'), false, 'Primitive string is not a descriptor');
  assert.equal(isDataDescriptor(null), false, 'Null is not a descriptor');
  assert.equal(isDataDescriptor([]), false, 'Array is not a descriptor');
  assert.equal(isDataDescriptor({ get: function() {} }), false, 'Accessor descriptor is not a data descriptor');
  assert.equal(isDataDescriptor({ value: 'foo', get: function() {} }), false, 'Mixed descriptor is invalid');
  assert.equal(isDataDescriptor({ value: 'foo', bar: 'baz' }), false, 'Extra invalid property makes it invalid');

  console.log('All data descriptor validations passed!');
}

validateDescriptors();

view raw JSON →