UNPKG

@webcomponents/webcomponentsjs

Version:
50 lines 2.12 kB
/** @license Copyright (c) 2017 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ import PromisePolyfill from 'promise-polyfill/src/index.js'; /* Assign the ES6 promise polyfill to window ourselves instead of using the "auto" polyfill to work around https://github.com/webcomponents/webcomponentsjs/issues/837 */ if (!window.Promise) { window.Promise = PromisePolyfill; // save Promise API /* eslint-disable no-self-assign */ // PromisePolyfill.prototype['catch'] = PromisePolyfill.prototype.catch; PromisePolyfill.prototype['then'] = PromisePolyfill.prototype.then; // PromisePolyfill.prototype['finally'] = PromisePolyfill.prototype.finally; PromisePolyfill['all'] = PromisePolyfill.all; PromisePolyfill['race'] = PromisePolyfill.race; PromisePolyfill['resolve'] = PromisePolyfill.resolve; PromisePolyfill['reject'] = PromisePolyfill.reject; /* eslint-enable */ // approach copied from // https://github.com/Polymer/polymer/blob/v3.0.2/lib/utils/async.js const node = document.createTextNode(''); const twiddleNode = function twiddleNode() { node.textContent = node.textContent.length > 0 ? '' : 'a'; }; /** @type {!Array<function():void>} */ const callbacks = []; new MutationObserver(() => { const len = callbacks.length; for (let i = 0; i < len; i++) { callbacks[i](); } callbacks.splice(0, len); }).observe(node, { characterData: true }); // set _immediateFn to a MutationObserver for close-to-native timing PromisePolyfill._immediateFn = (fn) => { callbacks.push(fn); twiddleNode(); }; } //# sourceMappingURL=promise.js.map