pax_global_header00006660000000000000000000000064136204234300014507gustar00rootroot0000000000000052 comment=ce6c733a67f82ea84ba8f30fc853217da80154e3 next-tick-1.1.0/000077500000000000000000000000001362042343000134145ustar00rootroot00000000000000next-tick-1.1.0/.editorconfig000066400000000000000000000004401362042343000160670ustar00rootroot00000000000000# EditorConfig is awesome: http://EditorConfig.org # top-most EditorConfig file root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = tab trim_trailing_whitespace = true [*.md] indent_size = 2 indent_style = space trim_trailing_whitespace = false next-tick-1.1.0/.github/000077500000000000000000000000001362042343000147545ustar00rootroot00000000000000next-tick-1.1.0/.github/FUNDING.yml000066400000000000000000000000321362042343000165640ustar00rootroot00000000000000tidelift: "npm/next-tick" next-tick-1.1.0/.gitignore000066400000000000000000000001061362042343000154010ustar00rootroot00000000000000.DS_Store /node_modules /npm-debug.log /.lintcache /package-lock.json next-tick-1.1.0/.lint000066400000000000000000000003121362042343000143570ustar00rootroot00000000000000@root module es5 indent 2 maxlen 100 tabs ass bitwise nomen plusplus vars predef+ queueMicrotask, process, setImmediate, setTimeout, clearTimeout, document, MutationObserver, WebKitMutationObserver next-tick-1.1.0/.travis.yml000066400000000000000000000003341362042343000155250ustar00rootroot00000000000000language: node_js node_js: - 0.12 - 4 - 6 - 8 - 10 notifications: email: - medikoo+next-tick@medikoo.com script: npm test jobs: include: - stage: lint node_js: 8 script: npm run lint next-tick-1.1.0/CHANGELOG.md000066400000000000000000000010351362042343000152240ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. ## [1.1.0](https://github.com/medikoo/next-tick/compare/v1.0.0...v1.1.0) (2020-02-11) ### Features * Add support for queueMicrotask (Closes [#13](https://github.com/medikoo/next-tick/issues/13)) ([471986e](https://github.com/medikoo/next-tick/commit/471986ee5f7179a498850cc03138a5ed5b9a248c)) ## Changelog for previous versions See `CHANGES` file next-tick-1.1.0/CHANGES000066400000000000000000000016631362042343000144150ustar00rootroot00000000000000For recent changelog see CHANGELOG.md ----- v1.0.0 -- 2016.06.09 * In case MutationObserver based solution ensure all callbacks are propagated even if any on the way crashes (fixes #3) * Support older engines (as IE8) which see typeof setTimeout as 'object' * Fix spelling of LICENSE * Configure lint scripts v0.2.2 -- 2014.04.18 - Do not rely on es5-ext's valid-callable. Replace it with simple internal function - In MutationObserver fallback rely on text node instead of attribute and assure mutation event is invoked by real change of data v0.2.1 -- 2014.02.24 - Fix case in import path v0.2.0 -- 2014.02.24 - Assure microtask resultion if MutationObserver is available (thanks @Raynos) #1 - Unify validation of callback. TypeError is throw for any non callable input - Move main module from `lib` to root directory - Improve documentation - Remove Makefile (it's environment agnostic pacakge) v0.1.0 -- 2012.08.29 Initial next-tick-1.1.0/LICENSE000066400000000000000000000014051362042343000144210ustar00rootroot00000000000000ISC License Copyright (c) 2012-2020, Mariusz Nowak, @medikoo, medikoo.com Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. next-tick-1.1.0/README.md000066400000000000000000000030251362042343000146730ustar00rootroot00000000000000# next-tick ## Environment agnostic nextTick polyfill To be used in environment agnostic modules that need nextTick functionality. - When run in Node.js `process.nextTick` is used - In modern engines, microtask resolution is guaranteed by `queueMicrotask` - In older browsers, `MutationObserver` is used as a fallback - In other engines `setImmediate` or `setTimeout(fn, 0)` is used as fallback. - If none of the above is supported module resolves to `null` ## Installation ### NPM In your project path: $ npm install next-tick #### Browser To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/) ## Tests [![Build Status](https://api.travis-ci.org/medikoo/next-tick.png?branch=master)](https://travis-ci.org/medikoo/next-tick) $ npm test ## Security contact information To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. ---
Get professional support for d with a Tidelift subscription
Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies.
next-tick-1.1.0/index.js000066400000000000000000000037671362042343000150760ustar00rootroot00000000000000'use strict'; var ensureCallable = function (fn) { if (typeof fn !== 'function') throw new TypeError(fn + " is not a function"); return fn; }; var byObserver = function (Observer) { var node = document.createTextNode(''), queue, currentQueue, i = 0; new Observer(function () { var callback; if (!queue) { if (!currentQueue) return; queue = currentQueue; } else if (currentQueue) { queue = currentQueue.concat(queue); } currentQueue = queue; queue = null; if (typeof currentQueue === 'function') { callback = currentQueue; currentQueue = null; callback(); return; } node.data = (i = ++i % 2); // Invoke other batch, to handle leftover callbacks in case of crash while (currentQueue) { callback = currentQueue.shift(); if (!currentQueue.length) currentQueue = null; callback(); } }).observe(node, { characterData: true }); return function (fn) { ensureCallable(fn); if (queue) { if (typeof queue === 'function') queue = [queue, fn]; else queue.push(fn); return; } queue = fn; node.data = (i = ++i % 2); }; }; module.exports = (function () { // Node.js if ((typeof process === 'object') && process && (typeof process.nextTick === 'function')) { return process.nextTick; } // queueMicrotask if (typeof queueMicrotask === "function") { return function (cb) { queueMicrotask(ensureCallable(cb)); }; } // MutationObserver if ((typeof document === 'object') && document) { if (typeof MutationObserver === 'function') return byObserver(MutationObserver); if (typeof WebKitMutationObserver === 'function') return byObserver(WebKitMutationObserver); } // W3C Draft // http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html if (typeof setImmediate === 'function') { return function (cb) { setImmediate(ensureCallable(cb)); }; } // Wide available standard if ((typeof setTimeout === 'function') || (typeof setTimeout === 'object')) { return function (cb) { setTimeout(ensureCallable(cb), 0); }; } return null; }()); next-tick-1.1.0/package.json000066400000000000000000000013701362042343000157030ustar00rootroot00000000000000{ "name": "next-tick", "version": "1.1.0", "description": "Environment agnostic nextTick polyfill", "author": "Mariusz Nowak (http://www.medikoo.com/)", "keywords": [ "nexttick", "setImmediate", "setTimeout", "async" ], "repository": { "type": "git", "url": "git://github.com/medikoo/next-tick.git" }, "devDependencies": { "tad": "^3.0.1", "xlint": "^0.2.2", "xlint-jslint-medikoo": "^0.1.4" }, "scripts": { "lint": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream", "lint-console": "node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch", "test": "node node_modules/tad/bin/tad" }, "license": "ISC" } next-tick-1.1.0/test/000077500000000000000000000000001362042343000143735ustar00rootroot00000000000000next-tick-1.1.0/test/index.js000066400000000000000000000010061362042343000160350ustar00rootroot00000000000000'use strict'; module.exports = function (t, a, d) { var invoked; a(t(function () { a(arguments.length, 0, "Arguments"); invoked = true; }), undefined, "Return"); a(invoked, undefined, "Is not run immediately"); setTimeout(function () { a(invoked, true, "Run in next tick"); invoked = []; t(function () { invoked.push(0); }); t(function () { invoked.push(1); }); t(function () { invoked.push(2); }); setTimeout(function () { a.deep(invoked, [0, 1, 2], "Serial"); d(); }, 10); }, 10); };