module.exports = function properlyBoxed(method) { // Check node 0.6.21 bug where third parameter is not boxed var properlyBoxesNonStrict = true; var properlyBoxesStrict = true; var threwException = false; if (typeof method === 'function') { try { // eslint-disable-next-line max-params method.call('f', function (_, __, O) { if (typeof O !== 'object') { properlyBoxesNonStrict = false; } }); method.call( [null], function () { 'use strict'; properlyBoxesStrict = typeof this === 'string'; // eslint-disable-line no-invalid-this }, 'x' ); } catch (e) { threwException = true; } return !threwException && properlyBoxesNonStrict && properlyBoxesStrict; } return false; };