.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / object-copy / node_modules / is-accessor-descriptor / index.js
1 /*!
2  * is-accessor-descriptor <https://github.com/jonschlinkert/is-accessor-descriptor>
3  *
4  * Copyright (c) 2015, Jon Schlinkert.
5  * Licensed under the MIT License.
6  */
7
8 'use strict';
9
10 var typeOf = require('kind-of');
11
12 // accessor descriptor properties
13 var accessor = {
14   get: 'function',
15   set: 'function',
16   configurable: 'boolean',
17   enumerable: 'boolean'
18 };
19
20 function isAccessorDescriptor(obj, prop) {
21   if (typeof prop === 'string') {
22     var val = Object.getOwnPropertyDescriptor(obj, prop);
23     return typeof val !== 'undefined';
24   }
25
26   if (typeOf(obj) !== 'object') {
27     return false;
28   }
29
30   if (has(obj, 'value') || has(obj, 'writable')) {
31     return false;
32   }
33
34   if (!has(obj, 'get') || typeof obj.get !== 'function') {
35     return false;
36   }
37
38   // tldr: it's valid to have "set" be undefined
39   // "set" might be undefined if `Object.getOwnPropertyDescriptor`
40   // was used to get the value, and only `get` was defined by the user
41   if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') {
42     return false;
43   }
44
45   for (var key in obj) {
46     if (!accessor.hasOwnProperty(key)) {
47       continue;
48     }
49
50     if (typeOf(obj[key]) === accessor[key]) {
51       continue;
52     }
53
54     if (typeof obj[key] !== 'undefined') {
55       return false;
56     }
57   }
58   return true;
59 }
60
61 function has(obj, key) {
62   return {}.hasOwnProperty.call(obj, key);
63 }
64
65 /**
66  * Expose `isAccessorDescriptor`
67  */
68
69 module.exports = isAccessorDescriptor;