JavaScript Data Descriptor Validator
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
-
TypeError: isDataDescriptor is not a function
cause Attempting to destructure the imported module in CommonJS, or incorrectly importing the default export in ESM.fixFor CommonJS: `const isDataDescriptor = require('is-data-descriptor');`. For ESM: `import isDataDescriptor from 'is-data-descriptor';`. -
ReferenceError: require is not defined
cause Using `require()` syntax in an ECMAScript Module (ESM) context (e.g., a file with `"type": "module"` in `package.json` or a `.mjs` file).fixUse the ESM import syntax: `import isDataDescriptor from 'is-data-descriptor';`.
Warnings
- gotcha The `is-data-descriptor` utility will return `false` if the descriptor object contains any properties that are not part of the standard data descriptor keys (`value`, `writable`, `enumerable`, `configurable`). This includes common typos or properties associated with accessor descriptors (`get`, `set`). It does not throw an error but quietly indicates invalidity.
- gotcha A descriptor object must define either `value` or `writable` (or both) to be considered a valid data descriptor by this utility. A descriptor with only `enumerable` and/or `configurable` set will return `false`.
Install
-
npm install is-data-descriptor -
yarn add is-data-descriptor -
pnpm add is-data-descriptor
Imports
- isDataDescriptor
import { isDataDescriptor } from 'is-data-descriptor';import isDataDescriptor from 'is-data-descriptor';
- isDataDescriptor
const { isDataDescriptor } = require('is-data-descriptor');const isDataDescriptor = require('is-data-descriptor'); - isDataDescriptor
import * as isDataDescriptorModule from 'is-data-descriptor'; const isDataDescriptor = isDataDescriptorModule.default;
Quickstart
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();