update devDependencies, fix lint issues
[squeep-lazy-property] / index.js
index e30ed5b4c2edeed3f00d4f8f9de6b2f46d5a3912..23a79b3af907bcbf051125f9507a722ac93a35a2 100644 (file)
--- a/index.js
+++ b/index.js
@@ -7,9 +7,9 @@
 
 /**
  * Shorthand helper for building descriptors up from a prototype chain.
- * @param {*} proto
- * @param {...any} objs
- * @returns {Object}
+ * @param {object} proto prototype object
+ * @param {object[]} objs objects to assign to derived object, in order
+ * @returns {object} new object
  */
 function createAssign(proto, ...objs) {
   return Object.assign(Object.create(proto), ...objs);
@@ -41,6 +41,16 @@ const defaultAccessorDescriptor = createAssign(defaultCommonDescriptor, {
   set: undefined,
 });
 
+/**
+ * @typedef {object} PropertyDescriptor
+ * @property {boolean=} configurable some things can be changed
+ * @property {boolean=} enumerable shows up in places
+ * @property {boolean=} writable value can be changed
+ * @property {any=} value value
+ * @property {Function=} get getter
+ * @property {Function=} set setter
+ */
+
 /**
  * Defer calling initializer to set value for name until name is read.
  * If a lazy property is defined on an object which is used as a prototype,
@@ -49,14 +59,12 @@ const defaultAccessorDescriptor = createAssign(defaultCommonDescriptor, {
  * object, or for any inherited object and set the property on that object.
  * The objectBound flag also controls the 'this' object of the initializer
  * when called.
- * @param {Object} obj
- * @param {String} name
- * @param {() => {*}} initializer
- * @param {Object=} descriptor
- * @param {Boolean=} descriptor.configurable
- * @param {Boolean=} descriptor.enumerable
- * @param {Boolean=} descriptor.writable
- * @param {Boolean=} objectBound
+ * @param {object} obj object
+ * @param {string} name property name
+ * @param {Function} initializer function which returns value to set on property upon first access
+ * @param {PropertyDescriptor=} descriptor optional descriptor
+ * @param {boolean=} objectBound bind initializer to obj
+ * @returns {object} obj with lazy property
  */
 function lazy(obj, name, initializer, descriptor, objectBound = true) {
   if (typeof initializer !== 'function') {
@@ -84,7 +92,7 @@ function lazy(obj, name, initializer, descriptor, objectBound = true) {
       set: function (value) {
         Object.defineProperty(this, name, createAssign(defaultDataDescriptor, {
           value,
-        }))
+        }));
       },
     }),