1.0.0 • Published 1 year ago

@ryniaubenpm2/corrupti-a-laboriosam v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@ryniaubenpm2/corrupti-a-laboriosam Version Badge

github actions coverage License Downloads

npm badge

Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for fully completed data descriptors and accessor descriptors.

Usage

const isDescriptor = require('@ryniaubenpm2/corrupti-a-laboriosam');
const assert = require('assert');

const defaults = { configurable: false, enumerable: false };
const dataDefaults = { ...defaults, writable: false};

assert.ok(isDescriptor({ ...dataDefaults, value: 'foo' }));
assert.ok(isDescriptor({ ...defaults, get() {}, set() {} }));
assert.ok(!isDescriptor({ ...defaults, get: 'foo', set() {} }));

You may also check for a descriptor by passing an object as the first argument and property name (string) as the second argument.

const obj = { foo: 'abc' };

Object.defineProperty(obj, 'bar', { value: 'xyz' });
Reflect.defineProperty(obj, 'baz', { value: 'xyz' });

assert.equal(isDescriptor(obj, 'foo'), true);
assert.equal(isDescriptor(obj, 'bar'), true);
assert.equal(isDescriptor(obj, 'baz'), true);

Examples

value type

Returns false when not an object

assert.equal(isDescriptor('a'), false);
assert.equal(isDescriptor(null), false);
assert.equal(isDescriptor([]), false);

data descriptor

Returns true when the object has valid properties with valid values.

assert.equal(isDescriptor({ ...dataDefaults, value: 'foo' }), true);
assert.equal(isDescriptor({ ...dataDefaults, value() {} }), true);

Returns false when the object has invalid properties

assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', bar: 'baz' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', bar: 'baz' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', enumerable: 'baz' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', configurable: 'baz' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', get() {} }), false);
assert.equal(isDescriptor({ ...dataDefaults, get() {}, value() {} }), false);

false when a value is not the correct type

assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', enumerable: 'foo' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', configurable: 'foo' }), false);
assert.equal(isDescriptor({ ...dataDefaults, value: 'foo', writable: 'foo' }), false);

accessor descriptor

true when the object has valid properties with valid values.

assert.equal(isDescriptor({ ...defaults, get() {}, set() {} }), true);
assert.equal(isDescriptor({ ...defaults, get() {} }), true);
assert.equal(isDescriptor({ ...defaults, set() {} }), true);

false when the object has invalid properties

assert.equal(isDescriptor({ ...defaults, get() {}, set() {}, bar: 'baz' }), false);
assert.equal(isDescriptor({ ...defaults, get() {}, set() {}, enumerable: 'baz' }), false);
assert.equal(isDescriptor({ ...defaults, get() {}, writable: true }), false);
assert.equal(isDescriptor({ ...defaults, get() {}, value: true }), false);

Returns false when an accessor is not a function

assert.equal(isDescriptor({ ...defaults, get() {}, set: 'baz' }), false);
assert.equal(isDescriptor({ ...defaults, get: 'foo', set() {} }), false);
assert.equal(isDescriptor({ ...defaults, get: 'foo', bar: 'baz' }), false);
assert.equal(isDescriptor({ ...defaults, get: 'foo', set: 'baz' }), false);

Returns false when a value is not the correct type

assert.equal(isDescriptor({ ...defaults, get() {}, set() {}, enumerable: 'foo' }), false);
assert.equal(isDescriptor({ ...defaults, set() {}, configurable: 'foo' }), false);
assert.equal(isDescriptor({ ...defaults, get() {}, configurable: 'foo' }), false);

Related projects

You might also be interested in these projects:

  • is-accessor-descriptor: Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.
  • is-data-descriptor: Returns true if a value has the characteristics of a valid JavaScript data descriptor.
  • is-object: Returns true if the value is an object and not an array or null.

Tests

Simply clone the repo, npm install, and run npm test

dependenciesenvironmentTypeScriptbluebirdgetopthookspreserve-symlinksObject.getPrototypeOfjoiString.prototype.trimjavascriptECMAScript 2015Symbol.toStringTagworkspace:*openisConcatSpreadableweaksetES2017Promisefast-clone256signales6routingbrowserlistpatchTypedArraychannelArraycompile lessargvjestJSON-Schemaes7fast-deep-copysuperstructIteratorelectronsortedobjUnderscoreio-tslrutermfindcssECMAScript 2021amazonutil.inspecttakesinatrafastcopythrottlespeedlinkvaluestructuredClonefullwidthinreadfile systemES2018Array.prototype.flattensearchhardlinkssymlinkscss-in-jsenvhandlersmetadataUint32Arraymoduletouchieenderbindes-abstracttrimRighttrimStartFloat32Arraysortprettybootstrap lessloggerdescriptorsansinegativestringhasreducechromelinuxES2021hashstylesheetstylingcharacterbundlingomitenvironmentslesspackagesexpressionArray.prototype.filterbddphonemergegroupObject.ispackagetoobjectcloudfronthttpskeyeast-asian-widthwhatwgincludesrapidmatchfunctionpipezodbcryptintrinsicbusyrestfulcopytypedkoreanArrayBuffer#slicepathpruneduplexUint8ArrayregexObservablelengthownES2019ES2023filesuperagentmatchAllredux-toolkitworkerjshintES5TypeBoxbannernested csstrimEndtrimLeftHyBibootstrap cssequalitycomparecryptdatastructurepreprocessorrdswafloadbalancingeslint-pluginform-validationvalidWeakMapflattenECMAScript 2022es8spectapeformatfastifyelmoffsetaccessibilitycloudformationoutputcommand-linerm -rfwalkingtypeerrorrmdirMicrosoftclass-validatorstreamsi18nserializerconcurrencypicomatchmobilefromprotocol-bufferspredictableirqgradients css3cryptoeslinterror-handlingcodesUint16ArrayjQueryimportflatmixinsreadableflagdomoperating-systemprivatestringifierajvdeep-cloneprogressdataviewbyteapioptimistemitslotlazylastcommanderparseECMAScript 2023minimalcallbindArray.prototype.findLastgenericslinewrapfasttsObject.keyspositiveYAMLless cssqueueiterationrequirejsonarktypeexpressreplaypromisesinputcollection.es6fastcloneES6styled-componentsreact-hook-formcall-bounditerateshamvisualpolyfillforEaches5errorquotemake dirmakereactassertionratelimitsettertyped array[[Prototype]]awaitinstallerhasOwnPropertyes2016Object.fromEntriesshrinkwrapbufferhttplintcode pointsargumentInt16Arraysharedarraybuffereslintpluginreact-hooksjasmineArray.prototype.flatMapwatchingkinesisregulardynamodbsomel10niamextensionbyteOffsetconsoledescriptionrangeerrorauthrestdeepES2015computed-typesmapreduceArrayBuffer.prototype.sliceES8wordbreaksafeawesomesaucemkdirpcolourpropertiespostcss-pluginsymbolstyles@@toStringTagwatchFilerouterwarningnegative zerotoArrayperformantArray.prototype.flatenumerableinferenceargparsenodeeventDispatcherprotoECMAScript 2018look-upfixed-widthtaskbeanstalkregular expressionsimmerremovejapanesequerystringnodejsartsyntaxerrorsignalsgdprvariables in cssnopechromiumtostringtagzerotypeofwidtharraystesterpropreusetypanionlogdataViewclassesstaterfc4122call-bindstyleguideruntimecallboundbrowserpromisedeepcopyECMAScript 6consumeeslintconfigairbnbxhrgetintrinsicuninstallpropertyECMAScript 2017containsArray.prototype.findLastIndexec2__proto__Array.prototype.includesimportexportRxmiddlewaremimetypesmkdirgradients css0loggingstreamdom-testing-librarylibphonenumberdebuggerInt32ArrayconnecttoSortedaccessorqueryparentsbatchprefixstatusappString.prototype.matchAllcallclassnameresolvearraybufferfpstraverseflagsisObservablescacheformattingesStyleSheetES3css nestingsameValueZeroreact-testing-libraryWebSocketsa11ydefinePropertywritable$.extendtslibRFC-6455schemeless mixinsless.jsbundleres2015frameworkdotenvavaidleasciisymlinkregexpcolumnautoscalingECMAScript 2019cjksyntaxless compilerfsrobustreducerpersistentmime-dbnpmrateBigUint64ArraysliceObjecttimecallbacksettypemochaterminalhookformrequestprototypecloudtrailregular expressionyamlshebangbrowserslistproxyutilitycensorstdlibes-shimslimitloadingmonorepoextendPushperformanceflatMapguidsettingsgetOwnPropertyDescriptorlistenersECMAScript 2016circularArrayBuffermovelockfilequeueMicrotaskparsinglimitedsigtermpyyamltoolkit
1.0.0

1 year ago