diff --git a/.jshintrc b/.jshintrc index 2c40c44..899aad5 100644 --- a/.jshintrc +++ b/.jshintrc @@ -11,5 +11,9 @@ "boss": true, "eqnull": true, "node": true, - "es5": true + "es5": true, + "globals": { + "define": false, + "window": false + } } diff --git a/lib/getobject.js b/lib/getobject.js index e4006fe..38fb199 100644 --- a/lib/getobject.js +++ b/lib/getobject.js @@ -8,53 +8,66 @@ 'use strict'; -var getobject = module.exports = {}; - -// Split strings on dot, but only if dot isn't preceded by a backslash. Since -// JavaScript doesn't support lookbehinds, use a placeholder for "\.", split -// on dot, then replace the placeholder character with a dot. -function getParts(str) { - return str.replace(/\\\./g, '\uffff').split('.').map(function(s) { - return s.replace(/\uffff/g, '.'); - }); -} - -// Get the value of a deeply-nested property exist in an object. -getobject.get = function(obj, parts, create) { - if (typeof parts === 'string') { - parts = getParts(parts); +(function (factory) { + var moduleName = 'getobject'; + if (typeof define === 'function' && define.amd) { + define([], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + window[moduleName] = factory(); } +}(function () { + var getobject = {}; - var part; - while (typeof obj === 'object' && obj && parts.length) { - part = parts.shift(); - if (!(part in obj) && create) { - obj[part] = {}; - } - obj = obj[part]; + // Split strings on dot, but only if dot isn't preceded by a backslash. Since + // JavaScript doesn't support lookbehinds, use a placeholder for "\.", split + // on dot, then replace the placeholder character with a dot. + function getParts(str) { + return str.replace(/\\\./g, '\uffff').split('.').map(function(s) { + return s.replace(/\uffff/g, '.'); + }); } - return obj; -}; + // Get the value of a deeply-nested property exist in an object. + getobject.get = function(obj, parts, create) { + if (typeof parts === 'string') { + parts = getParts(parts); + } + + var part; + while (typeof obj === 'object' && obj && parts.length) { + part = parts.shift(); + if (!(part in obj) && create) { + obj[part] = {}; + } + obj = obj[part]; + } -// Set a deeply-nested property in an object, creating intermediary objects -// as we go. -getobject.set = function(obj, parts, value) { - parts = getParts(parts); + return obj; + }; - var prop = parts.pop(); - obj = getobject.get(obj, parts, true); - if (obj && typeof obj === 'object') { - return (obj[prop] = value); - } -}; + // Set a deeply-nested property in an object, creating intermediary objects + // as we go. + getobject.set = function(obj, parts, value) { + parts = getParts(parts); + + var prop = parts.pop(); + obj = getobject.get(obj, parts, true); + if (obj && typeof obj === 'object') { + return (obj[prop] = value); + } + }; + + // Does a deeply-nested property exist in an object? + getobject.exists = function(obj, parts) { + parts = getParts(parts); -// Does a deeply-nested property exist in an object? -getobject.exists = function(obj, parts) { - parts = getParts(parts); + var prop = parts.pop(); + obj = getobject.get(obj, parts); - var prop = parts.pop(); - obj = getobject.get(obj, parts); + return typeof obj === 'object' && obj && prop in obj; + }; - return typeof obj === 'object' && obj && prop in obj; -}; + return getobject; +})); \ No newline at end of file