| 'use strict'; | 
|   | 
| const internals = {}; | 
|   | 
|   | 
| module.exports = function (array1, array2, options = {}) { | 
|   | 
|     if (!array1 || | 
|         !array2) { | 
|   | 
|         return (options.first ? null : []); | 
|     } | 
|   | 
|     const common = []; | 
|     const hash = (Array.isArray(array1) ? new Set(array1) : array1); | 
|     const found = new Set(); | 
|     for (const value of array2) { | 
|         if (internals.has(hash, value) && | 
|             !found.has(value)) { | 
|   | 
|             if (options.first) { | 
|                 return value; | 
|             } | 
|   | 
|             common.push(value); | 
|             found.add(value); | 
|         } | 
|     } | 
|   | 
|     return (options.first ? null : common); | 
| }; | 
|   | 
|   | 
| internals.has = function (ref, key) { | 
|   | 
|     if (typeof ref.has === 'function') { | 
|         return ref.has(key); | 
|     } | 
|   | 
|     return ref[key] !== undefined; | 
| }; |