
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Promise for requestAnimationFrame / plus features like nextFrames, frameSequence, delay, throttleFrames, waitFrames
create a Promise that resolves in the next Animationframe @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve in the next Animationframe
waiting x frames before the Promise will resolve @param {Number} frame - the number of frames the Promise waits before resolving @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
resolve when fn returns a truthy value. @param {Function} fn a function that will be called every frame to check for changes @param {...[type]} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
until fn returns a truthy value do not resolve. @param {Function} fn a function that will be called every frame to check for changes @param {...[type]} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
create an animationframe loop that calls a function (callback) in every frame @param {Function} cb - gets called in every frame - for rendering mostly @return {Function} a function which cancels the initialed loop by calling it
create a throttled animationframe loop that calls a function (callback) in every specified @param {Function} cb gets called in every specified frame @param {Number} throttle in wich interval cb is called @return {Function} a function which cancels the initialed loop by calling it
delays the call to nextFrame with setTimeout @param {Number} ms delay in ms @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the delayed animationframe
call a function sequencely every next frame on every iterating position of an array @param {Array} collection keeps all values that will be used as the argument for the function @param {Function} fn will be called with array values as aruments @return {Promise} which will resolve after the sequence
import { nextFrame, loop, sequence, delay, throttleFrames, waitFrames } from 'nextframe';
const now = require('performance-now');
const increment = val => ++val;
const sequenceValues = [1, 2, 3, 4];
let frameCount = 0;
let throttleCount = 0;
const start = now();
/****************************
nextFrame / frame
****************************/
nextFrame()
.then(() => {
console.log('next frame');
})
/****************************
delay
****************************/
delay(1000).then(() => {
console.log('delayed ' + (now() - start) + 'ms');
});
/****************************
sequence / frameSequence
****************************/
sequence(sequenceValues, increment)
.then(result => console.log(result));
/****************************
loop / nextFrames / onEnterFrame
****************************/
const cancelLoop = loop(() => {
console.log('frame', ++frameCount);
if (frameCount >= 100) {
cancelLoop();
}
});
/****************************
throttleFrames / throttle
****************************/
const cancelThrottle = throttleFrames(() => {
console.log('throttle', ++throttleCount);
if (throttleCount >= 10) {
cancelThrottle();
}
}, 10);
/****************************
waitFrames / wait
****************************/
waitFrames(50).then((count) => {
console.log(count + ' frames waited');
})
(passing)
import test from 'ava';
import now from 'performance-now';
import nextFrame, { nextFrames, delay, sequence, waitFrames, throttleFrames } from './lib';
test('call next frame with argument', async t => {
const value = await nextFrame('check');
t.is(value, 'check');
});
test('delay 1s', async t => {
const start = now();
const value = await delay(1000, 'check');
const duration = now() - start;
t.is(value, 'check');
t.truthy(duration >= 1000 && duration <= 1100);
});
test('sequence', async t => {
const values = [1, 2, 3, 4];
const increment = val => ++val;
const result = await sequence(values, increment);
t.deepEqual(result, [2, 3, 4, 5]);
});
test('nextFrames loop', async t => {
const p = new Promise(resolve => {
let i = 0;
const cancel = nextFrames(() => {
++i;
if (i >= 20) {
cancel();
resolve(20);
}
})
})
const result = await p;
t.is(result, 20);
});
test('wait 50 frames', async t => {
let i = 0;
const cancel = nextFrames(() => ++i);
const result = await waitFrames(50);
cancel();
t.is(result, 50);
t.is(i, 50);
});
test('throttle frames', async t => {
let i = 0;
let throttleCount = 0;
const p = new Promise(resolve => {
const cancel = nextFrames(() => ++i);
const cancelThrottle = throttleFrames(() => {
if (++throttleCount >= 10) {
cancelThrottle();
cancel();
resolve(throttleCount)
}
}, 10);
});
const result = await p;
t.is(result, 10);
t.is(i, 100);
});
FAQs
Promise for requestAnimationFrame, plus delayed and sequenced frames
The npm package nextframe receives a total of 6 weekly downloads. As such, nextframe popularity was classified as not popular.
We found that nextframe demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.