You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							2.5 KiB
						
					
					
				"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 | 
						|
  } | 
						|
}
 | 
						|
 |