UNPKG

djembe

Version:

A rhythm maker which emits any data with the given rhythm periodically

2 lines (1 loc) 4.02 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Djembe={})}(this,(function(t){"use strict";function e(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function r(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function n(t){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?r(Object(i),!0).forEach((function(r){e(t,r,i[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function c(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return f(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return f(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var s={steps:32,steppers:7,initialState:null};function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=c(c({},s),t),r=e.steps,n=e.steppers,i=e.initialState;if(r<2)throw new Error("step size must be at least 2");if(i&&i.length!==r)throw new Error("initial state length must be equal to step size");var o=i?a(i):Array(n).fill(0),f=[];function a(t){return t.map((function(t){return t>0?t%r:(r-Math.abs(t)%r)%r}))}function p(t){return(t+1)%r}function l(t){f.forEach((function(e){e(t)}))}function b(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=u(t);return n[e]=p(n[e]),r.push({step:n[e],stepper:e}),0===n[e]&&e<t.length-1?b(n,e+1,r):{nextState:n,tickEvents:r}}function y(){var t=b(o,0,[]),e=t.nextState,r=t.tickEvents;o=e,l(r)}function O(t){if(!f.find(t)){f.push(t);return function(){f=f.filter((function(e){return e!==t}))}}}function j(){return o.map((function(t,e){return{stepper:e,step:t}}))}return{tick:y,subscribe:O,getState:j}}var p={steps:32,steppers:7,ticks:[]};t.Djembe=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],r=n(n({},p),t),i=r.steps,o=r.steppers,c=r.initialState,u=r.ticks,f=a({steps:i,steppers:o,initialState:c});function s(t){l(u.filter((function(e){return!!t.find((function(t){return t.step===e.step&&t.stepper===e.stepper}))})),f.getState())}function l(t,r){e.forEach((function(e){e({ticks:t,state:r})}))}function b(){f.tick()}function y(t){if(!e.find(t)){e.push(t);return function(){e=e.filter((function(e){return e!==t}))}}}function O(t){u=t}return f.subscribe(s),{subscribe:y,tick:b,setTicks:O}},Object.defineProperty(t,"__esModule",{value:!0})}));