Socket
Socket
Sign inDemoInstall

brcast

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

brcast - npm Package Compare versions

Comparing version 2.0.2 to 3.0.0

16

CHANGELOG.md

@@ -5,2 +5,18 @@ # Change Log

<a name="3.0.0"></a>
# [3.0.0](https://github.com/vesparny/brcast/compare/v2.0.2...v3.0.0) (2017-08-02)
### Performance Improvements
* improve performance by not allocating an unsubscribe function for ([e70f01e](https://github.com/vesparny/brcast/commit/e70f01e))
### BREAKING CHANGES
* subscribe does not return a function anymore, but a
subscriptionId instead
<a name="2.0.2"></a>

@@ -7,0 +23,0 @@ ## [2.0.2](https://github.com/vesparny/brcast/compare/v2.0.1...v2.0.2) (2017-07-27)

42

dist/brcast.cjs.js
function createBroadcast (initialState) {
var listeners = {};
var id = 0;
var id = 1;
var _state = initialState;
var getState = function () { return _state; };
function getState () {
return _state
}
var setState = function (state) {
function setState (state) {
_state = state;
var keys = Object.keys(listeners);
for (var i = 0; i < keys.length; i += 1) {
var i = 0;
var len = keys.length;
for (; i < len; i++) {
// if a listener gets unsubscribed during setState we just skip it
if (typeof listeners[keys[i]] !== 'undefined') {
listeners[keys[i]](state);
}
if (listeners[keys[i]]) { listeners[keys[i]](state); }
}
};
}
var subscribe = function (listener) {
if (typeof listener !== 'function') { throw new Error('listener must be a function.') }
// subscribe to changes and return the subscriptionId
function subscribe (listener) {
if (typeof listener !== 'function') {
throw new Error('listener must be a function.')
}
var currentId = id;
var isSubscribed = true;
listeners[currentId] = listener;
id += 1;
return function unsubscribe () {
// in case unsubscribe gets called multiple times we simply return
if (!isSubscribed) { return }
isSubscribed = false;
delete listeners[currentId];
}
};
return currentId
}
return { getState: getState, setState: setState, subscribe: subscribe }
// remove subscription by removing the listener function
function unsubscribe (id) {
listeners[id] = undefined;
}
return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }
}
module.exports = createBroadcast;

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

function createBroadcast(t){var e={},r=0,n=t;return{getState:function(){return n},setState:function(t){n=t;for(var r=Object.keys(e),o=0;o<r.length;o+=1)void 0!==e[r[o]]&&e[r[o]](t)},subscribe:function(t){if("function"!=typeof t)throw new Error("listener must be a function.");var n=r,o=!0;return e[n]=t,r+=1,function(){o&&(o=!1,delete e[n])}}}}module.exports=createBroadcast;
function createBroadcast(t){var e={},r=1,n=t;return{getState:function(){return n},setState:function(t){n=t;for(var r=Object.keys(e),o=0,u=r.length;o<u;o++)e[r[o]]&&e[r[o]](t)},subscribe:function(t){if("function"!=typeof t)throw new Error("listener must be a function.");var n=r;return e[n]=t,r+=1,n},unsubscribe:function(t){e[t]=void 0}}}module.exports=createBroadcast;
//# sourceMappingURL=brcast.cjs.min.js.map
function createBroadcast (initialState) {
var listeners = {};
var id = 0;
var id = 1;
var _state = initialState;
var getState = function () { return _state; };
function getState () {
return _state
}
var setState = function (state) {
function setState (state) {
_state = state;
var keys = Object.keys(listeners);
for (var i = 0; i < keys.length; i += 1) {
var i = 0;
var len = keys.length;
for (; i < len; i++) {
// if a listener gets unsubscribed during setState we just skip it
if (typeof listeners[keys[i]] !== 'undefined') {
listeners[keys[i]](state);
}
if (listeners[keys[i]]) { listeners[keys[i]](state); }
}
};
}
var subscribe = function (listener) {
if (typeof listener !== 'function') { throw new Error('listener must be a function.') }
// subscribe to changes and return the subscriptionId
function subscribe (listener) {
if (typeof listener !== 'function') {
throw new Error('listener must be a function.')
}
var currentId = id;
var isSubscribed = true;
listeners[currentId] = listener;
id += 1;
return function unsubscribe () {
// in case unsubscribe gets called multiple times we simply return
if (!isSubscribed) { return }
isSubscribed = false;
delete listeners[currentId];
}
};
return currentId
}
return { getState: getState, setState: setState, subscribe: subscribe }
// remove subscription by removing the listener function
function unsubscribe (id) {
listeners[id] = undefined;
}
return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }
}
export default createBroadcast;

@@ -9,33 +9,37 @@ (function (global, factory) {

var listeners = {};
var id = 0;
var id = 1;
var _state = initialState;
var getState = function () { return _state; };
function getState () {
return _state
}
var setState = function (state) {
function setState (state) {
_state = state;
var keys = Object.keys(listeners);
for (var i = 0; i < keys.length; i += 1) {
var i = 0;
var len = keys.length;
for (; i < len; i++) {
// if a listener gets unsubscribed during setState we just skip it
if (typeof listeners[keys[i]] !== 'undefined') {
listeners[keys[i]](state);
}
if (listeners[keys[i]]) { listeners[keys[i]](state); }
}
};
}
var subscribe = function (listener) {
if (typeof listener !== 'function') { throw new Error('listener must be a function.') }
// subscribe to changes and return the subscriptionId
function subscribe (listener) {
if (typeof listener !== 'function') {
throw new Error('listener must be a function.')
}
var currentId = id;
var isSubscribed = true;
listeners[currentId] = listener;
id += 1;
return function unsubscribe () {
// in case unsubscribe gets called multiple times we simply return
if (!isSubscribed) { return }
isSubscribed = false;
delete listeners[currentId];
}
};
return currentId
}
return { getState: getState, setState: setState, subscribe: subscribe }
// remove subscription by removing the listener function
function unsubscribe (id) {
listeners[id] = undefined;
}
return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }
}

@@ -42,0 +46,0 @@

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

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.brcast=t()}(this,function(){function e(e){var t={},n=0,o=e;return{getState:function(){return o},setState:function(e){o=e;for(var n=Object.keys(t),r=0;r<n.length;r+=1)void 0!==t[n[r]]&&t[n[r]](e)},subscribe:function(e){if("function"!=typeof e)throw new Error("listener must be a function.");var o=n,r=!0;return t[o]=e,n+=1,function(){r&&(r=!1,delete t[o])}}}}return e});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.brcast=t()}(this,function(){return function(e){var t={},n=1,o=e;return{getState:function(){return o},setState:function(e){o=e;for(var n=Object.keys(t),r=0,u=n.length;r<u;r++)t[n[r]]&&t[n[r]](e)},subscribe:function(e){if("function"!=typeof e)throw new Error("listener must be a function.");var o=n;return t[o]=e,n+=1,o},unsubscribe:function(e){t[e]=void 0}}}});
//# sourceMappingURL=brcast.umd.min.js.map
export default function createBroadcast (initialState) {
let listeners = {}
let id = 0
let id = 1
let _state = initialState
const getState = () => _state
function getState () {
return _state
}
const setState = state => {
function setState (state) {
_state = state
const keys = Object.keys(listeners)
for (let i = 0; i < keys.length; i += 1) {
let i = 0
const len = keys.length
for (; i < len; i++) {
// if a listener gets unsubscribed during setState we just skip it
if (typeof listeners[keys[i]] !== 'undefined') {
listeners[keys[i]](state)
}
if (listeners[keys[i]]) listeners[keys[i]](state)
}
}
const subscribe = listener => {
if (typeof listener !== 'function') { throw new Error('listener must be a function.') }
// subscribe to changes and return the subscriptionId
function subscribe (listener) {
if (typeof listener !== 'function') {
throw new Error('listener must be a function.')
}
const currentId = id
let isSubscribed = true
listeners[currentId] = listener
id += 1
return function unsubscribe () {
// in case unsubscribe gets called multiple times we simply return
if (!isSubscribed) return
isSubscribed = false
delete listeners[currentId]
}
return currentId
}
return { getState, setState, subscribe }
// remove subscription by removing the listener function
function unsubscribe (id) {
listeners[id] = undefined
}
return { getState, setState, subscribe, unsubscribe }
}

@@ -7,10 +7,18 @@ import brcast from './index'

test('exposes the public API', () => {
const broadcast = brcast()
const methods = Object.keys(broadcast)
expect(methods.length).toBe(4)
expect(methods).toContain('subscribe')
expect(methods).toContain('unsubscribe')
expect(methods).toContain('getState')
expect(methods).toContain('setState')
})
test('throws if listener is not a function', () => {
const broadcast = brcast()
expect(() => broadcast.subscribe()).toThrow()
expect(() => broadcast.subscribe('throw')).toThrow()
expect(() => broadcast.subscribe({})).toThrow()
expect(() => broadcast.subscribe(() => {})).not.toThrow()

@@ -39,6 +47,5 @@ })

const broadcast = brcast(1)
const subscription = broadcast.subscribe(handler)
const subscriptionId = broadcast.subscribe(handler)
broadcast.subscribe(handler1)
expect(typeof subscription).toBe('function')
subscription()
broadcast.unsubscribe(subscriptionId)
broadcast.setState(2)

@@ -53,6 +60,6 @@ broadcast.setState(3)

const broadcast = brcast(1)
const subscription = broadcast.subscribe(handler)
const subscriptionId = broadcast.subscribe(handler)
subscription()
subscription()
broadcast.unsubscribe(subscriptionId)
broadcast.unsubscribe(subscriptionId)
broadcast.setState(2)

@@ -69,5 +76,5 @@ expect(handler.mock.calls.length).toBe(0)

broadcast.subscribe(handler)
const unSub1 = broadcast.subscribe(() => {
const sub1Id = broadcast.subscribe(() => {
handler1()
unSub1()
broadcast.unsubscribe(sub1Id)
})

@@ -86,5 +93,5 @@ broadcast.subscribe(handler2)

const unsubscribeHandles = []
const unsubscribeIds = []
const doUnsubscribeAll = () =>
unsubscribeHandles.forEach(unsubscribe => unsubscribe())
unsubscribeIds.forEach(id => broadcast.unsubscribe(id))

@@ -95,4 +102,4 @@ const handler = jest.fn()

unsubscribeHandles.push(broadcast.subscribe(handler))
unsubscribeHandles.push(
unsubscribeIds.push(broadcast.subscribe(handler))
unsubscribeIds.push(
broadcast.subscribe(() => {

@@ -103,3 +110,3 @@ handler1()

)
unsubscribeHandles.push(broadcast.subscribe(handler2))
unsubscribeIds.push(broadcast.subscribe(handler2))

@@ -106,0 +113,0 @@ broadcast.setState(2)

{
"name": "brcast",
"amdName": "brcast",
"version": "2.0.2",
"version": "3.0.0",
"description": "Tiny data broadcaster with 0 dependencies",

@@ -46,3 +46,3 @@ "jsnext:main": "index.js",

"babel-register": "^6.24.1",
"cross-env": "^4.0.0",
"cross-env": "^5.0.1",
"gzip-size-cli": "^2.0.0",

@@ -55,5 +55,5 @@ "husky": "^0.14.3",

"rimraf": "^2.5.2",
"rollup": "^0.41.4",
"rollup": "^0.45.2",
"rollup-plugin-buble": "^0.15.0",
"rollup-plugin-uglify": "^1.0.1",
"rollup-plugin-uglify": "^2.0.1",
"standard": "^10.0.2",

@@ -60,0 +60,0 @@ "standard-version": "^4.0.0"

@@ -6,3 +6,3 @@ # Brcast

[![Travis](https://img.shields.io/travis/vesparny/brcast.svg)](https://travis-ci.org/vesparny/brcast)
[![Code Coverage](https://img.shields.io/codecov/c/github/vesparny/fair-analytics.svg?style=flat-square)](https://codecov.io/github/vesparny/fair-analytics)
[![Code Coverage](https://img.shields.io/codecov/c/github/vesparny/brcast.svg?style=flat-square)](https://codecov.io/github/vesparny/brcast)
[![David](https://img.shields.io/david/vesparny/brcast.svg)](https://david-dm.org/vesparny/brcast)

@@ -25,2 +25,3 @@ [![npm](https://img.shields.io/npm/v/brcast.svg)](https://www.npmjs.com/package/brcast)

- [Usage](#usage)
- [API](#API)
- [Testing](#tests)

@@ -63,3 +64,3 @@ - [License](#license)

// subscribe
let unsubscribe = broadcast.subscribe(state => console.log(state))
const subscriptionId = broadcast.subscribe(state => console.log(state))

@@ -72,7 +73,64 @@ // setState sets the state and invoke all subscription callbacks passing in the state

// unsubscribe: invoke the function returned by broadcast.subscribe(state => console.log(state))
// to unbind the handler
unsubscribe()
// unsubscribe to unbind the handler
broadcast.unsubscribe(subscriptionId)
```
## API
### `brcast([initialState])`
Creates a `broadcast` object.
#### Arguments
1 - [`initialState`] *(any)*: The initial state.
#### Returns
(`broadcast`): An object that holds the state.
### `broadcast.setState(state)`
Store the new state.
#### Arguments
1 - `state` *(any)*: The new state.
#### Returns
Nothing.
### `broadcast.getState()`
Get the stored state.
#### Returns
(`Any`): The stored state.
### `broadcast.subscribe(handler)`
Subscribe to state changes.
#### Arguments
1 - `handler` *(Function)*: The callback to be invoked any time the state changes.
#### Returns
(`Number`): The subscription id to be used to unsubscribe.
### `broadcast.unsubscribe(subscriptionId)`
Unsubscribe the change listener.
#### Arguments
1 - `subscriptionId` *(Number)*: The subscription id returned by subscribing.
#### Returns
Nothing.
## Tests

@@ -79,0 +137,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc