Socket
Socket
Sign inDemoInstall

setimmediate

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.4 to 1.0.5

5

package.json
{
"name": "setimmediate",
"description": "A shim for the setImmediate efficient script yielding API",
"version": "1.0.4",
"version": "1.0.5",
"author": "YuzuJS",

@@ -14,2 +14,5 @@ "contributors": [

"main": "setImmediate.js",
"files": [
"setImmediate.js"
],
"scripts": {

@@ -16,0 +19,0 @@ "lint": "jshint setImmediate.js",

87

setImmediate.js

@@ -12,22 +12,47 @@ (function (global, undefined) {

var doc = global.document;
var setImmediate;
var registerImmediate;
function addFromSetImmediateArguments(args) {
tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);
return nextHandle++;
function setImmediate(callback) {
// Callback can either be a function or a string
if (typeof callback !== "function") {
callback = new Function("" + callback);
}
// Copy function arguments
var args = new Array(arguments.length - 1);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i + 1];
}
// Store and register the task
var task = { callback: callback, args: args };
tasksByHandle[nextHandle] = task;
registerImmediate(nextHandle);
return nextHandle++;
}
// This function accepts the same arguments as setImmediate, but
// returns a function that requires no arguments.
function partiallyApplied(handler) {
var args = [].slice.call(arguments, 1);
return function() {
if (typeof handler === "function") {
handler.apply(undefined, args);
} else {
(new Function("" + handler))();
}
};
function clearImmediate(handle) {
delete tasksByHandle[handle];
}
function run(task) {
var callback = task.callback;
var args = task.args;
switch (args.length) {
case 0:
callback();
break;
case 1:
callback(args[0]);
break;
case 2:
callback(args[0], args[1]);
break;
case 3:
callback(args[0], args[1], args[2]);
break;
default:
callback.apply(undefined, args);
break;
}
}
function runIfPresent(handle) {

@@ -39,3 +64,3 @@ // From the spec: "Wait until any invocations of this algorithm started before this one have completed."

// "too much recursion" error.
setTimeout(partiallyApplied(runIfPresent, handle), 0);
setTimeout(runIfPresent, 0, handle);
} else {

@@ -46,3 +71,3 @@ var task = tasksByHandle[handle];

try {
task();
run(task);
} finally {

@@ -56,11 +81,5 @@ clearImmediate(handle);

function clearImmediate(handle) {
delete tasksByHandle[handle];
}
function installNextTickImplementation() {
setImmediate = function() {
var handle = addFromSetImmediateArguments(arguments);
process.nextTick(partiallyApplied(runIfPresent, handle));
return handle;
registerImmediate = function(handle) {
process.nextTick(function () { runIfPresent(handle); });
};

@@ -104,6 +123,4 @@ }

setImmediate = function() {
var handle = addFromSetImmediateArguments(arguments);
registerImmediate = function(handle) {
global.postMessage(messagePrefix + handle, "*");
return handle;
};

@@ -119,6 +136,4 @@ }

setImmediate = function() {
var handle = addFromSetImmediateArguments(arguments);
registerImmediate = function(handle) {
channel.port2.postMessage(handle);
return handle;
};

@@ -129,4 +144,3 @@ }

var html = doc.documentElement;
setImmediate = function() {
var handle = addFromSetImmediateArguments(arguments);
registerImmediate = function(handle) {
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted

@@ -142,3 +156,2 @@ // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.

html.appendChild(script);
return handle;
};

@@ -148,6 +161,4 @@ }

function installSetTimeoutImplementation() {
setImmediate = function() {
var handle = addFromSetImmediateArguments(arguments);
setTimeout(partiallyApplied(runIfPresent, handle), 0);
return handle;
registerImmediate = function(handle) {
setTimeout(runIfPresent, 0, handle);
};

@@ -154,0 +165,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc