JSPM

define-accessor-property

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3028
  • Score
    100M100P100Q122715F
  • License MIT

Define an accessor property on an object. Will either throw, or fall back to assignment in loose mode, in an engine without descriptors.

Package Exports

  • define-accessor-property
  • define-accessor-property/package.json

Readme

define-accessor-property Version Badge

github actions coverage License Downloads

npm badge

Define an accessor property on an object. In an engine without descriptors, in loose mode, when only a getter is provided, nonEnumerable is false, and nonConfigurable is false, wil fall back to assignment - otherwise, it will throw.

The two non* options can also be passed null, which will use the existing state if available.

The loose option will mean that if you attempt to set a nonconfigurable/nonwritable accessor property with set, in an environment without descriptor support, it will fall back to normal assignment (and eagerly evaluate the getter).

Usage

var defineAccessorProperty = require('define-accessor-property');
var assert = require('assert');

var str = 'value';
var strThunk = function () { return str; };
var strSetter = function (v) { str = v; };
var random = function () { return Math.random(); };

var obj = {};
defineAccessorProperty(
    obj,
    'key',
    {
        get: strThunk,
        set: strSetter,
    }
);
defineAccessorProperty(
    obj,
    'key2',
    {
        get: random, // at least one of "get" or "set" must be provided
        nonConfigurable: true, // optional
        nonEnumerable: true, // optional
        loose: false, // optional
    }
);

assert.deepEqual(
    Object.getOwnPropertyDescriptors(obj),
    {
        key: {
            configurable: true,
            enumerable: true,
            get: strThunk,
            set: strSetter,
        },
        key2: {
            configurable: false,
            enumerable: false,
            get: random,
            set: undefined,
        },
    }
);