| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | "use strict"    // global key for user preferred registrationvar 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  }}
 |