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.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							79 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
 | |
|   }
 | |
| }
 |