source: trip-planner-front/node_modules/kind-of/index.js@ 8d391a1

Last change on this file since 8d391a1 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 3.5 KB
Line 
1var toString = Object.prototype.toString;
2
3module.exports = function kindOf(val) {
4 if (val === void 0) return 'undefined';
5 if (val === null) return 'null';
6
7 var type = typeof val;
8 if (type === 'boolean') return 'boolean';
9 if (type === 'string') return 'string';
10 if (type === 'number') return 'number';
11 if (type === 'symbol') return 'symbol';
12 if (type === 'function') {
13 return isGeneratorFn(val) ? 'generatorfunction' : 'function';
14 }
15
16 if (isArray(val)) return 'array';
17 if (isBuffer(val)) return 'buffer';
18 if (isArguments(val)) return 'arguments';
19 if (isDate(val)) return 'date';
20 if (isError(val)) return 'error';
21 if (isRegexp(val)) return 'regexp';
22
23 switch (ctorName(val)) {
24 case 'Symbol': return 'symbol';
25 case 'Promise': return 'promise';
26
27 // Set, Map, WeakSet, WeakMap
28 case 'WeakMap': return 'weakmap';
29 case 'WeakSet': return 'weakset';
30 case 'Map': return 'map';
31 case 'Set': return 'set';
32
33 // 8-bit typed arrays
34 case 'Int8Array': return 'int8array';
35 case 'Uint8Array': return 'uint8array';
36 case 'Uint8ClampedArray': return 'uint8clampedarray';
37
38 // 16-bit typed arrays
39 case 'Int16Array': return 'int16array';
40 case 'Uint16Array': return 'uint16array';
41
42 // 32-bit typed arrays
43 case 'Int32Array': return 'int32array';
44 case 'Uint32Array': return 'uint32array';
45 case 'Float32Array': return 'float32array';
46 case 'Float64Array': return 'float64array';
47 }
48
49 if (isGeneratorObj(val)) {
50 return 'generator';
51 }
52
53 // Non-plain objects
54 type = toString.call(val);
55 switch (type) {
56 case '[object Object]': return 'object';
57 // iterators
58 case '[object Map Iterator]': return 'mapiterator';
59 case '[object Set Iterator]': return 'setiterator';
60 case '[object String Iterator]': return 'stringiterator';
61 case '[object Array Iterator]': return 'arrayiterator';
62 }
63
64 // other
65 return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
66};
67
68function ctorName(val) {
69 return typeof val.constructor === 'function' ? val.constructor.name : null;
70}
71
72function isArray(val) {
73 if (Array.isArray) return Array.isArray(val);
74 return val instanceof Array;
75}
76
77function isError(val) {
78 return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');
79}
80
81function isDate(val) {
82 if (val instanceof Date) return true;
83 return typeof val.toDateString === 'function'
84 && typeof val.getDate === 'function'
85 && typeof val.setDate === 'function';
86}
87
88function isRegexp(val) {
89 if (val instanceof RegExp) return true;
90 return typeof val.flags === 'string'
91 && typeof val.ignoreCase === 'boolean'
92 && typeof val.multiline === 'boolean'
93 && typeof val.global === 'boolean';
94}
95
96function isGeneratorFn(name, val) {
97 return ctorName(name) === 'GeneratorFunction';
98}
99
100function isGeneratorObj(val) {
101 return typeof val.throw === 'function'
102 && typeof val.return === 'function'
103 && typeof val.next === 'function';
104}
105
106function isArguments(val) {
107 try {
108 if (typeof val.length === 'number' && typeof val.callee === 'function') {
109 return true;
110 }
111 } catch (err) {
112 if (err.message.indexOf('callee') !== -1) {
113 return true;
114 }
115 }
116 return false;
117}
118
119/**
120 * If you need to support Safari 5-7 (8-10 yr-old browser),
121 * take a look at https://github.com/feross/is-buffer
122 */
123
124function isBuffer(val) {
125 if (val.constructor && typeof val.constructor.isBuffer === 'function') {
126 return val.constructor.isBuffer(val);
127 }
128 return false;
129}
Note: See TracBrowser for help on using the repository browser.