| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- "use strict"
 
-     // global key for user preferred registration
 
- var REGISTRATION_KEY = '@@any-promise/REGISTRATION',
 
-     // Prior registration (preferred or detected)
 
-     registered = null
 
- /**
 
-  * Registers the given implementation.  An implementation must
 
-  * be registered prior to any call to `require("any-promise")`,
 
-  * typically on application load.
 
-  *
 
-  * If called with no arguments, will return registration in
 
-  * following priority:
 
-  *
 
-  * For Node.js:
 
-  *
 
-  * 1. Previous registration
 
-  * 2. global.Promise if node.js version >= 0.12
 
-  * 3. Auto detected promise based on first sucessful require of
 
-  *    known promise libraries. Note this is a last resort, as the
 
-  *    loaded library is non-deterministic. node.js >= 0.12 will
 
-  *    always use global.Promise over this priority list.
 
-  * 4. Throws error.
 
-  *
 
-  * For Browser:
 
-  *
 
-  * 1. Previous registration
 
-  * 2. window.Promise
 
-  * 3. Throws error.
 
-  *
 
-  * Options:
 
-  *
 
-  * Promise: Desired Promise constructor
 
-  * global: Boolean - Should the registration be cached in a global variable to
 
-  * allow cross dependency/bundle registration?  (default true)
 
-  */
 
- module.exports = function(root, loadImplementation){
 
-   return function register(implementation, opts){
 
-     implementation = implementation || null
 
-     opts = opts || {}
 
-     // global registration unless explicitly  {global: false} in options (default true)
 
-     var registerGlobal = opts.global !== false;
 
-     // load any previous global registration
 
-     if(registered === null && registerGlobal){
 
-       registered = root[REGISTRATION_KEY] || null
 
-     }
 
-     if(registered !== null
 
-         && implementation !== null
 
-         && registered.implementation !== implementation){
 
-       // Throw error if attempting to redefine implementation
 
-       throw new Error('any-promise already defined as "'+registered.implementation+
 
-         '".  You can only register an implementation before the first '+
 
-         ' call to require("any-promise") and an implementation cannot be changed')
 
-     }
 
-     if(registered === null){
 
-       // use provided implementation
 
-       if(implementation !== null && typeof opts.Promise !== 'undefined'){
 
-         registered = {
 
-           Promise: opts.Promise,
 
-           implementation: implementation
 
-         }
 
-       } else {
 
-         // require implementation if implementation is specified but not provided
 
-         registered = loadImplementation(implementation)
 
-       }
 
-       if(registerGlobal){
 
-         // register preference globally in case multiple installations
 
-         root[REGISTRATION_KEY] = registered
 
-       }
 
-     }
 
-     return registered
 
-   }
 
- }
 
 
  |