Socket
Socket
Sign inDemoInstall

savoy

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 0.2.2 to 0.3.0

test/eachSeries.spec.js

4

bower.json
{
"name": "savoy",
"main": "savoy.min.js",
"version": "0.2.2",
"version": "0.3.0",
"homepage": "https://github.com/yuanqing/savoy",

@@ -9,3 +9,3 @@ "authors": [

],
"description": "Higher-order functions (synchronous and asynchronous each/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.",
"description": "Higher-order functions (synchronous and asynchronous each/eachSeries/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.",
"license": "MIT",

@@ -12,0 +12,0 @@ "ignore": [

{
"name": "savoy",
"version": "0.2.2",
"description": "Higher-order functions (synchronous and asynchronous each/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.",
"version": "0.3.0",
"description": "Higher-order functions (synchronous and asynchronous each/eachSeries/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.",
"author": "Lim Yuan Qing",

@@ -30,2 +30,3 @@ "license": "MIT",

"each",
"eachSeries",
"filter",

@@ -32,0 +33,0 @@ "flow",

# Savoy.js [![npm Version](http://img.shields.io/npm/v/savoy.svg?style=flat)](https://www.npmjs.org/package/savoy) [![Build Status](https://img.shields.io/travis/yuanqing/savoy.svg?style=flat)](https://travis-ci.org/yuanqing/savoy) [![Coverage Status](https://img.shields.io/coveralls/yuanqing/savoy.svg?style=flat)](https://coveralls.io/r/yuanqing/savoy)
> Higher-order functions (synchronous and asynchronous each/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.
> Higher-order functions (synchronous and asynchronous each/eachSeries/map/filter/fold) and functions for flow control (parallel/series/waterfall) in under 1 KB.
- API is similar to that of the [async](https://github.com/caolan/async) library
- [API](#api) is similar (not identical) to that of the [Async](https://github.com/caolan/async) library
- 2.5 KB [minified](https://github.com/yuanqing/savoy/blob/master/savoy.min.js), or about 0.9 KB minified and gzipped

@@ -11,4 +11,7 @@ - [Legible tests](https://github.com/yuanqing/savoy/blob/master/test), with [100% coverage](https://coveralls.io/r/yuanqing/savoy)

Mainly [this](https://github.com/timoxley/best-practices#reinvent-the-wheel):
Savoy’s higher-order functions differ from Async’s in the following ways:
- The signature of the `fn` iterator is different. The `cb` callback (invoked to signal the end of each iteration of `fn`) is the *first* argument of `fn`. In addition, `fn` is also passed the index/key of the current element, and the original `collection` itself.
- If passed is an Object, `map` and `filter` will return an Object. (If passed an Object, Async’s `map` and `filter` will return an Array.)
Also, mainly [this](https://github.com/timoxley/best-practices#reinvent-the-wheel):
> Inventing your own wheels gives you a deep appreciation and understanding of how wheels work and what makes a good one.

@@ -18,5 +21,6 @@

In all of the method signatures below, `collection` (in each/map/filter/fold) and `fns` (in parallel/series/waterfall) can either be an Array or an Object literal.
In all of the method signatures below, `collection` (in each/eachSeries/map/filter/fold) and `fns` (in parallel/series/waterfall) can either be an Array or an Object literal.
- [`each`](#each)
- [`eachSeries`](#eachSeries)
- [`map`](#map)

@@ -75,2 +79,28 @@ - [`filter`](#filter)

### eachSeries
**savoy.eachSeries(collection, fn)** — *synchronous eachSeries*
- Alias of `savoy.each`.
**savoy.eachSeries(collection, fn, done)** — *asynchronous eachSeries*
```js
savoy.each({ a: 1, b: 2, c: 3 }, function(cb, val, key, obj) {
console.log(val, key, obj);
//=> 1, 'a', { a: 1, b: 2, c: 3 }
//=> 2, 'b', { a: 1, b: 2, c: 3 }
//=> 3, 'c', { a: 1, b: 2, c: 3 }
cb();
}, function(err) {
console.log(err);
//=> null
});
```
- The asynchronous function `fn` is called in *series* over each item in `collection`.
- Invoke the `cb` callback in `fn` to signal the end of each iteration of `fn`.
- The signature of the `cb` callback is `cb(err)`. If `err` is truthy, we stop iterating over the `collection`, and the `done` callback is called exactly once with the `err`.
- When `fn` has completed execution over every item in the `collection`, the `done` callback is called exactly once with a falsy `err`.
### map

@@ -306,2 +336,4 @@

- 0.3.0
- Add `eachSeries`
- 0.2.0

@@ -308,0 +340,0 @@ - Major rewrite to prioritise [performance](https://youtube.com/watch?v=NthmeLEhDDM) over minimising the file size

@@ -201,2 +201,6 @@ (function(exports) {

exports.eachSeries = function(collection, fn, done) {
return done ? asyncSeriesEach(collection, fn, done) : syncParallelEach(collection, fn);
};
exports.map = function(collection, fn, done) {

@@ -203,0 +207,0 @@ return done ? asyncMap(collection, fn, done) : syncMap(collection, fn);

@@ -1,1 +0,1 @@

(function(n){var r=function(){};var t=Array.isArray||function(n){return Object.prototype.toString.call(n)==="[object Array]"};var i=Object.keys||function(n){var r=[];var t;for(t in n){if(n.hasOwnProperty(t)){r.push(t)}}return r};var f=Array.prototype.slice;var u=function(n,r){var f=t(n)?false:i(n);var u=(f||n).length;var a=-1;var e;if(f){while(++a<u){e=f[a];if(r(n[e],e,n)===false){break}}}else{while(++a<u){if(r(n[a],a,n)===false){break}}}};var a=function(n,f,u){var a=t(n)?false:i(n);var e=(a||n).length;var o=-1;var c;var l=0;var v=function(n){if(n){u(n);u=r;return}if(++l===e){u(null)}};if(!e){u(null);return}if(a){while(++o<e){c=a[o];f(v,n[c],c,n)}}else{while(++o<e){f(v,n[o],o,n)}}};var e=function(n,r,f){var u=t(n)?false:i(n);var a=(u||n).length;var e=0;var o;var c=function(n){if(n){f(n);return}if(++e===a){f(null);return}l()};var l=u?function(){o=u[e];r(c,n[o],o,n)}:function(){r(c,n[e],e,n)};if(!a){f(null);return}l()};var o=function(n,r){var i=t(n)?[]:{};u(n,function(n,t,f){i[t]=r(n,t,f)});return i};var c=function(n,r,i){var f=t(n)?[]:{};a(n,function(n,t,i,u){r(function(r,t){f[i]=t;n(r)},t,i,u)},function(n){i(n,f)})};var l=function(n,r){var i;if(t(n)){i=[];u(n,function(n,t,f){if(r(n,t,f)){i.push(n)}})}else{i={};u(n,function(n,t,f){if(r(n,t,f)){i[t]=n}})}return i};var v=function(n,r,i){var f;if(t(n)){f=[];a(n,function(n,t,i,u){r(function(r,u){if(u){f.push({i:i,val:t})}n(r)},t,i,u)},function(n){i(n,o(f.sort(function(n,r){return n.i-r.i}),function(n){return n.val}))})}else{f={};a(n,function(n,t,i,u){r(function(r,u){if(u){f[i]=t}n(r)},t,i,u)},function(n){i(n,f)})}};var s=function(n,r,t){u(n,function(n,i,f){r=t(r,n,i,f)});return r};var p=function(n,r,t,i){e(n,function(n,i,f,u){t(function(t,i){r=i;n(t)},r,i,f,u)},function(n){i(n,r)})};n.each=function(n,r,t){return t?a(n,r,t):u(n,r)};n.map=function(n,r,t){return t?c(n,r,t):o(n,r)};n.filter=function(n,r,t){return t?v(n,r,t):l(n,r)};n.fold=function(n,r,t,i){return i?p(n,r,t,i):s(n,r,t)};n.parallel=function(t,i){n.map(t,function(n,r){r(function(r,t){n(r,t)})},function(n,t){(i||r)(n,t)})};n.series=function(n,i){var f=t(n)?[]:{};e(n,function(n,r,t){r(function(r,i){f[t]=i;n(r)})},function(n){(i||r)(n,f)})};n.waterfall=function(n,u){var a=t(n)?false:i(n);var e=(a||n).length;var o=-1;var c=function(r){if(r){u(r);return}if(++o===e){u.apply(null,arguments);return}var t=f.call(arguments);t[0]=c;(a?n[a[o]]:n[o]).apply(null,t)};u=u||r;c()}})(typeof exports=="undefined"?this.savoy:exports);
(function(n){var r=function(){};var t=Array.isArray||function(n){return Object.prototype.toString.call(n)==="[object Array]"};var i=Object.keys||function(n){var r=[];var t;for(t in n){if(n.hasOwnProperty(t)){r.push(t)}}return r};var f=Array.prototype.slice;var u=function(n,r){var f=t(n)?false:i(n);var u=(f||n).length;var a=-1;var e;if(f){while(++a<u){e=f[a];if(r(n[e],e,n)===false){break}}}else{while(++a<u){if(r(n[a],a,n)===false){break}}}};var a=function(n,f,u){var a=t(n)?false:i(n);var e=(a||n).length;var o=-1;var c;var l=0;var v=function(n){if(n){u(n);u=r;return}if(++l===e){u(null)}};if(!e){u(null);return}if(a){while(++o<e){c=a[o];f(v,n[c],c,n)}}else{while(++o<e){f(v,n[o],o,n)}}};var e=function(n,r,f){var u=t(n)?false:i(n);var a=(u||n).length;var e=0;var o;var c=function(n){if(n){f(n);return}if(++e===a){f(null);return}l()};var l=u?function(){o=u[e];r(c,n[o],o,n)}:function(){r(c,n[e],e,n)};if(!a){f(null);return}l()};var o=function(n,r){var i=t(n)?[]:{};u(n,function(n,t,f){i[t]=r(n,t,f)});return i};var c=function(n,r,i){var f=t(n)?[]:{};a(n,function(n,t,i,u){r(function(r,t){f[i]=t;n(r)},t,i,u)},function(n){i(n,f)})};var l=function(n,r){var i;if(t(n)){i=[];u(n,function(n,t,f){if(r(n,t,f)){i.push(n)}})}else{i={};u(n,function(n,t,f){if(r(n,t,f)){i[t]=n}})}return i};var v=function(n,r,i){var f;if(t(n)){f=[];a(n,function(n,t,i,u){r(function(r,u){if(u){f.push({i:i,val:t})}n(r)},t,i,u)},function(n){i(n,o(f.sort(function(n,r){return n.i-r.i}),function(n){return n.val}))})}else{f={};a(n,function(n,t,i,u){r(function(r,u){if(u){f[i]=t}n(r)},t,i,u)},function(n){i(n,f)})}};var s=function(n,r,t){u(n,function(n,i,f){r=t(r,n,i,f)});return r};var p=function(n,r,t,i){e(n,function(n,i,f,u){t(function(t,i){r=i;n(t)},r,i,f,u)},function(n){i(n,r)})};n.each=function(n,r,t){return t?a(n,r,t):u(n,r)};n.eachSeries=function(n,r,t){return t?e(n,r,t):u(n,r)};n.map=function(n,r,t){return t?c(n,r,t):o(n,r)};n.filter=function(n,r,t){return t?v(n,r,t):l(n,r)};n.fold=function(n,r,t,i){return i?p(n,r,t,i):s(n,r,t)};n.parallel=function(t,i){n.map(t,function(n,r){r(function(r,t){n(r,t)})},function(n,t){(i||r)(n,t)})};n.series=function(n,i){var f=t(n)?[]:{};e(n,function(n,r,t){r(function(r,i){f[t]=i;n(r)})},function(n){(i||r)(n,f)})};n.waterfall=function(n,u){var a=t(n)?false:i(n);var e=(a||n).length;var o=-1;var c=function(r){if(r){u(r);return}if(++o===e){u.apply(null,arguments);return}var t=f.call(arguments);t[0]=c;(a?n[a[o]]:n[o]).apply(null,t)};u=u||r;c()}})(typeof exports=="undefined"?this.savoy:exports);

@@ -147,4 +147,4 @@ /* globals jasmine, describe, it, expect */

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(arr).toEqual([1, 2, 3]);

@@ -201,4 +201,4 @@ jasmine.clock().uninstall();

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(obj).toEqual({ a: 1, b: 2, c: 3 });

@@ -205,0 +205,0 @@ jasmine.clock().uninstall();

@@ -129,4 +129,4 @@ /* globals jasmine, describe, it, expect */

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(arr).toEqual([1, 2, 3]);

@@ -189,4 +189,4 @@ jasmine.clock().uninstall();

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(obj).toEqual({ a: 1, b: 2, c: 3 });

@@ -193,0 +193,0 @@ jasmine.clock().uninstall();

@@ -128,4 +128,4 @@ /* globals jasmine, describe, it, expect */

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(1);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(1);
expect(arr).toEqual([1, 2, 3]);

@@ -187,4 +187,4 @@ jasmine.clock().uninstall();

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(1);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(1);
expect(obj).toEqual({ a: 1, b: 2, c: 3 });

@@ -191,0 +191,0 @@ jasmine.clock().uninstall();

@@ -129,4 +129,4 @@ /* globals jasmine, describe, it, expect */

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(arr).toEqual([1, 2, 3]);

@@ -189,4 +189,4 @@ jasmine.clock().uninstall();

jasmine.clock().tick(1000);
expect(done.calls.count()).toEqual(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toBe(2);
expect(obj).toEqual({ a: 1, b: 2, c: 3 });

@@ -193,0 +193,0 @@ jasmine.clock().uninstall();

@@ -97,3 +97,3 @@ /* globals jasmine, describe, it, expect */

expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.argsFor(0)[0]).toBe(2);
jasmine.clock().uninstall();

@@ -193,3 +193,3 @@ });

expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toEqual(2);
expect(done.calls.argsFor(0)[0]).toBe(2);
jasmine.clock().uninstall();

@@ -196,0 +196,0 @@ });

@@ -97,3 +97,3 @@ /* globals jasmine, describe, it, expect */

expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toEqual(1);
expect(done.calls.argsFor(0)[0]).toBe(1);
jasmine.clock().uninstall();

@@ -193,3 +193,3 @@ });

expect(done.calls.count()).toBe(1);
expect(done.calls.argsFor(0)[0]).toEqual(1);
expect(done.calls.argsFor(0)[0]).toBe(1);
jasmine.clock().uninstall();

@@ -196,0 +196,0 @@ });

@@ -97,3 +97,3 @@ /* globals jasmine, describe, it, expect */

expect(done.calls.count()).toBe(1);
expect(done.calls.allArgs()).toEqual([[1]]);
expect(done.calls.argsFor(0)[0]).toBe(1);
jasmine.clock().uninstall();

@@ -193,3 +193,3 @@ });

expect(done.calls.count()).toBe(1);
expect(done.calls.allArgs()).toEqual([[1]]);
expect(done.calls.argsFor(0)[0]).toBe(1);
jasmine.clock().uninstall();

@@ -196,0 +196,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