From e2c9b59917d713ab0c0a5bf97c7739a880f5724f Mon Sep 17 00:00:00 2001 From: Eliastik <26941242+Eliastik@users.noreply.github.com> Date: Thu, 9 May 2024 16:00:11 +0200 Subject: [PATCH] Setup Jest - unit tests --- .github/workflows/build.yml | 5 +- .gitignore | 2 + dist/cjs/SimpleSoundStudioLibrary.js | 2 +- dist/cjs/SimpleSoundStudioLibrary.js.map | 2 +- dist/esm/SimpleSoundStudioLibrary.js | 2 +- dist/esm/SimpleSoundStudioLibrary.js.map | 2 +- dist/index.d.ts | 58 +- dist/workers/RecorderWorker.js | 2 +- jest.config.ts | 23 + lib/index.ts | 6 +- lib/utils/Functions.ts | 4 +- package-lock.json | 5631 +++++++++++++++++----- package.json | 7 +- tests/FilterManager.test.ts | 13 + 14 files changed, 4521 insertions(+), 1238 deletions(-) create mode 100644 jest.config.ts create mode 100644 tests/FilterManager.test.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89d71a7..4c87b2c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,7 @@ on: - master jobs: - build: + build-and-test: runs-on: ubuntu-latest steps: @@ -23,3 +23,6 @@ jobs: - name: Build and Lint run: npm run build + + - name: Test + run: npm test diff --git a/.gitignore b/.gitignore index 1cd83ec..cedd9c7 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,5 @@ dist/**/dts/**/*.d.ts # service worker .rollup.cache + +coverage \ No newline at end of file diff --git a/dist/cjs/SimpleSoundStudioLibrary.js b/dist/cjs/SimpleSoundStudioLibrary.js index e4d2693..98b3328 100644 --- a/dist/cjs/SimpleSoundStudioLibrary.js +++ b/dist/cjs/SimpleSoundStudioLibrary.js @@ -10,5 +10,5 @@ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -***************************************************************************** */!function(t){!function(i){var r="object"==typeof globalThis?globalThis:"object"==typeof e?e:"object"==typeof self?self:"object"==typeof this?this:function(){try{return Function("return this;")()}catch(t){}}()||function(){try{return(0,eval)("(function() { return this; })()")}catch(t){}}(),n=o(t);function o(t,e){return function(i,r){Object.defineProperty(t,i,{configurable:!0,writable:!0,value:r}),e&&e(i,r)}}void 0!==r.Reflect&&(n=o(r.Reflect,n)),function(t,e){var i=Object.prototype.hasOwnProperty,r="function"==typeof Symbol,n=r&&void 0!==Symbol.toPrimitive?Symbol.toPrimitive:"@@toPrimitive",o=r&&void 0!==Symbol.iterator?Symbol.iterator:"@@iterator",s="function"==typeof Object.create,a={__proto__:[]}instanceof Array,u=!s&&!a,c={create:s?function(){return lt(Object.create(null))}:a?function(){return lt({__proto__:null})}:function(){return lt({})},has:u?function(t,e){return i.call(t,e)}:function(t,e){return e in t},get:u?function(t,e){return i.call(t,e)?t[e]:void 0}:function(t,e){return t[e]}},h=Object.getPrototypeOf(Function),l="function"==typeof Map&&"function"==typeof Map.prototype.entries?Map:ut(),d="function"==typeof Set&&"function"==typeof Set.prototype.entries?Set:ct(),f="function"==typeof WeakMap?WeakMap:ht(),p=r?Symbol.for("@reflect-metadata:registry"):void 0,g=nt(),v=ot(g);function m(t,e,i,r){if(k(i)){if(!K(t))throw new TypeError;if(!z(e))throw new TypeError;return C(t,e)}if(!K(t))throw new TypeError;if(!W(e))throw new TypeError;if(!W(r)&&!k(r)&&!L(r))throw new TypeError;return L(r)&&(r=void 0),M(t,e,i=H(i),r)}function y(t,e){function i(i,r){if(!W(i))throw new TypeError;if(!k(r)&&!Q(r))throw new TypeError;O(t,e,i,r)}return i}function E(t,e,i,r){if(!W(i))throw new TypeError;return k(r)||(r=H(r)),O(t,e,i,r)}function _(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),I(t,e,i)}function b(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),P(t,e,i)}function S(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),B(t,e,i)}function A(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),N(t,e,i)}function w(t,e){if(!W(t))throw new TypeError;return k(e)||(e=H(e)),D(t,e)}function R(t,e){if(!W(t))throw new TypeError;return k(e)||(e=H(e)),x(t,e)}function T(t,e,i){if(!W(e))throw new TypeError;if(k(i)||(i=H(i)),!W(e))throw new TypeError;k(i)||(i=H(i));var r=at(e,i,!1);return!k(r)&&r.OrdinaryDeleteMetadata(t,e,i)}function C(t,e){for(var i=t.length-1;i>=0;--i){var r=(0,t[i])(e);if(!k(r)&&!L(r)){if(!z(r))throw new TypeError;e=r}}return e}function M(t,e,i,r){for(var n=t.length-1;n>=0;--n){var o=(0,t[n])(e,i,r);if(!k(o)&&!L(o)){if(!W(o))throw new TypeError;r=o}}return r}function I(t,e,i){if(P(t,e,i))return!0;var r=it(e);return!L(r)&&I(t,r,i)}function P(t,e,i){var r=at(e,i,!1);return!k(r)&&j(r.OrdinaryHasOwnMetadata(t,e,i))}function B(t,e,i){if(P(t,e,i))return N(t,e,i);var r=it(e);return L(r)?void 0:B(t,r,i)}function N(t,e,i){var r=at(e,i,!1);if(!k(r))return r.OrdinaryGetOwnMetadata(t,e,i)}function O(t,e,i,r){at(i,r,!0).OrdinaryDefineOwnMetadata(t,e,i,r)}function D(t,e){var i=x(t,e),r=it(t);if(null===r)return i;var n=D(r,e);if(n.length<=0)return i;if(i.length<=0)return n;for(var o=new d,s=[],a=0,u=i;a=0&&t=this._keys.length?(this._index=-1,this._keys=e,this._values=e):this._index++,{value:i,done:!1}}return{value:void 0,done:!0}},t.prototype.throw=function(t){throw this._index>=0&&(this._index=-1,this._keys=e,this._values=e),t},t.prototype.return=function(t){return this._index>=0&&(this._index=-1,this._keys=e,this._values=e),{value:t,done:!0}},t}();return function(){function e(){this._keys=[],this._values=[],this._cacheKey=t,this._cacheIndex=-2}return Object.defineProperty(e.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),e.prototype.has=function(t){return this._find(t,!1)>=0},e.prototype.get=function(t){var e=this._find(t,!1);return e>=0?this._values[e]:void 0},e.prototype.set=function(t,e){var i=this._find(t,!0);return this._values[i]=e,this},e.prototype.delete=function(e){var i=this._find(e,!1);if(i>=0){for(var r=this._keys.length,n=i+1;n= than the number of constructor arguments of its base class."},P=function(t,e){return"@postConstruct error in class "+t+": "+e},B=function(t,e){return"@preDestroy error in class "+t+": "+e},N=function(t,e){return"onDeactivation() error in class "+t+": "+e},O="Maximum call stack size exceeded",D=function(){function t(){}return t.prototype.getConstructorMetadata=function(t){return{compilerGeneratedMetadata:Reflect.getMetadata(h,t),userGeneratedMetadata:Reflect.getMetadata(u,t)||{}}},t.prototype.getPropertiesMetadata=function(t){return Reflect.getMetadata(c,t)||[]},t}(),x={MultipleBindingsAvailable:2,NoBindingsAvailable:0,OnlyOneBindingAvailable:1};function F(t){return t instanceof RangeError||t.message===O}function k(t){return"function"==typeof t?t.name:"symbol"==typeof t?t.toString():t}function L(t,e,i){var r="",n=i(t,e);return 0!==n.length&&(r="\nRegistered bindings:",n.forEach((function(t){var e="Object";null!==t.implementationType&&(e=V(t.implementationType)),r=r+"\n "+e,t.constraint.metaData&&(r=r+" - "+t.constraint.metaData)}))),r}function G(t,e){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===e||G(t.parentRequest,e))}function W(t){t.childRequests.forEach((function(t){if(G(t,t.serviceIdentifier)){var e=function(t){var e=function t(e,i){void 0===i&&(i=[]);var r=k(e.serviceIdentifier);return i.push(r),null!==e.parentRequest?t(e.parentRequest,i):i}(t);return e.reverse().join(" --\x3e ")}(t);throw new Error(C+" "+e)}W(t)}))}function V(t){if(t.name)return t.name;var e=t.toString(),i=e.match(/^function\s*([^\s(]+)/);return i?i[1]:"Anonymous function: "+e}var U=function(){function t(t){this.id=y(),this.container=t}return t.prototype.addPlan=function(t){this.plan=t},t.prototype.setCurrentRequest=function(t){this.currentRequest=t},t}(),j=function(){function t(t,e){this.key=t,this.value=e}return t.prototype.toString=function(){return this.key===i?"named: "+String(this.value).toString()+" ":"tagged: { key:"+this.key.toString()+", value: "+String(this.value)+" }"},t}(),q=function(t,e){this.parentContext=t,this.rootRequest=e},H=function(){function t(t){this._cb=t}return t.prototype.unwrap=function(){return this._cb()},t}(),K=function(){function t(t){this.str=t}return t.prototype.startsWith=function(t){return 0===this.str.indexOf(t)},t.prototype.endsWith=function(t){var e,i=t.split("").reverse().join("");return e=this.str.split("").reverse().join(""),this.startsWith.call({str:e},i)},t.prototype.contains=function(t){return-1!==this.str.indexOf(t)},t.prototype.equals=function(t){return this.str===t},t.prototype.value=function(){return this.str},t}(),Y=function(){function t(t,e,r,n){this.id=y(),this.type=t,this.serviceIdentifier=r;var o="symbol"==typeof e?e.toString().slice(7,-1):e;this.name=new K(o||""),this.identifier=e,this.metadata=new Array;var s=null;"string"==typeof n?s=new j(i,n):n instanceof j&&(s=n),null!==s&&this.metadata.push(s)}return t.prototype.hasTag=function(t){for(var e=0,i=this.metadata;e0,c=a.length>i.length,h=function(t,e,i,r,n){for(var o=[],s=0;s0?a:J(t,i)}return 0}function tt(t){var e={};return t.forEach((function(t){e[t.key.toString()]=t.value})),{inject:e[s],multiInject:e[a],targetName:e[r],unmanaged:e[n]}}var et=function(){function t(t,e,i,r,n){this.id=y(),this.serviceIdentifier=t,this.parentContext=e,this.parentRequest=i,this.target=n,this.childRequests=[],this.bindings=Array.isArray(r)?r:[r],this.requestScope=null===i?new Map:null}return t.prototype.addChildRequest=function(e,i,r){var n=new t(e,this.parentContext,this,i,r);return this.childRequests.push(n),n},t}();function it(t){return t._bindingDictionary}function rt(t,e,i,r,n){var o=ot(i.container,n.serviceIdentifier),s=[];return o.length===x.NoBindingsAvailable&&i.container.options.autoBindInjectable&&"function"==typeof n.serviceIdentifier&&t.getConstructorMetadata(n.serviceIdentifier).compilerGeneratedMetadata&&(i.container.bind(n.serviceIdentifier).toSelf(),o=ot(i.container,n.serviceIdentifier)),s=e?o:o.filter((function(t){var e=new et(t.serviceIdentifier,i,r,t,n);return t.constraint(e)})),function(t,e,i,r){switch(e.length){case x.NoBindingsAvailable:if(i.isOptional())return e;var n=k(t),o=w;throw o+=function(t,e){if(e.isTagged()||e.isNamed()){var i="",r=e.getNamedTag(),n=e.getCustomTags();return null!==r&&(i+=r.toString()+"\n"),null!==n&&n.forEach((function(t){i+=t.toString()+"\n"}))," "+t+"\n "+t+" - "+i}return" "+t}(n,i),o+=L(r,n,ot),new Error(o);case x.OnlyOneBindingAvailable:return e;case x.MultipleBindingsAvailable:default:if(i.isArray())return e;n=k(t),o=A+" "+n;throw o+=L(r,n,ot),new Error(o)}}(n.serviceIdentifier,s,n,i.container),s}function nt(t,e,i,r,n,o){var s,a;if(null===n){s=rt(t,e,r,null,o),a=new et(i,r,null,s,o);var u=new q(r,a);r.addPlan(u)}else s=rt(t,e,r,n,o),a=n.addChildRequest(o.serviceIdentifier,s,o);s.forEach((function(e){var i=null;if(o.isArray())i=a.addChildRequest(e.serviceIdentifier,e,o);else{if(e.cache)return;i=a}if(e.type===g.Instance&&null!==e.implementationType){var n=function(t,e){return Q(t,V(e),e,!1)}(t,e.implementationType);if(!r.container.options.skipBaseClassChecks){var s=J(t,e.implementationType);if(n.length0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0){var n=function(t,e){return t.reduce((function(t,i){var r=e(i);return i.target.type===v.ConstructorArgument?t.constructorInjections.push(r):(t.propertyRequests.push(i),t.propertyInjections.push(r)),t.isAsync||(t.isAsync=ut(r)),t}),{constructorInjections:[],propertyInjections:[],propertyRequests:[],isAsync:!1})}(e,i),o=gt(gt({},n),{constr:t});r=n.isAsync?function(t){return vt(this,void 0,void 0,(function(){var e,i;return mt(this,(function(r){switch(r.label){case 0:return[4,bt(t.constructorInjections)];case 1:return e=r.sent(),[4,bt(t.propertyInjections)];case 2:return i=r.sent(),[2,_t(gt(gt({},t),{constructorInjections:e,propertyInjections:i}))]}}))}))}(o):_t(o)}else r=new t;return r}function _t(t){var e,i=new((e=t.constr).bind.apply(e,yt([void 0],t.constructorInjections,!1)));return t.propertyRequests.forEach((function(e,r){var n=e.target.identifier,o=t.propertyInjections[r];e.target.isOptional()&&void 0===o||(i[n]=o)})),i}function bt(t){return vt(this,void 0,void 0,(function(){var e,i,r,n;return mt(this,(function(o){for(e=[],i=0,r=t;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0?this._map.set(t,e):this._map.delete(t)},t}(),Qt=function(){function t(){this._map=new Map}return t.prototype.remove=function(t){if(this._map.has(t)){var e=this._map.get(t);return this._map.delete(t),e}return this._getEmptyHandlersStore()},t.prototype.addDeactivation=function(t,e,i){this._getModuleActivationHandlers(t).onDeactivations.add(e,i)},t.prototype.addActivation=function(t,e,i){this._getModuleActivationHandlers(t).onActivations.add(e,i)},t.prototype.clone=function(){var e=new t;return this._map.forEach((function(t,i){e._map.set(i,{onActivations:t.onActivations.clone(),onDeactivations:t.onDeactivations.clone()})})),e},t.prototype._getModuleActivationHandlers=function(t){var e=this._map.get(t);return void 0===e&&(e=this._getEmptyHandlersStore(),this._map.set(t,e)),e},t.prototype._getEmptyHandlersStore=function(){return{onActivations:new zt,onDeactivations:new zt}},t}(),Zt=function(){return Zt=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]=0;a--)(n=t[a])&&(s=(o<3?n(s):o>3?n(e,i,s):n(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s}function le(t,e){return function(i,r){e(i,r,t)}}function de(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function fe(t,e,i,r){return new(i||(i=Promise))((function(n,o){function s(t){try{u(r.next(t))}catch(t){o(t)}}function a(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))}var pe;"function"==typeof SuppressedError&&SuppressedError,exports.EventType=void 0,(pe=exports.EventType||(exports.EventType={})).LOADING_BUFFERS="loadingBuffers",pe.LOADING_BUFFERS_ERROR="loadingBuffersError",pe.FETCHING_BUFFERS="fetchingBuffers",pe.FETCHING_BUFFERS_ERROR="fetchingBuffersError",pe.FINISHED_FETCHING_BUFFERS="finishedFetchingBuffers",pe.LOADED_BUFFERS="loadedBuffers",pe.COMPATIBILITY_MODE_AUTO_ENABLED="compatibilityModeAutoEnabled",pe.RENDERING_AUDIO_PROBLEM_DETECTED="renderingAudioProblemDetected",pe.AUDIO_RENDERING_FINISHED="audioRenderingFinished",pe.OFFLINE_AUDIO_RENDERING_FINISHED="offlineAudioRenderingFinished",pe.PLAYING_STOPPED="playingStopped",pe.PLAYING_STARTED="playingStarted",pe.PLAYING_FINISHED="playingFinished",pe.PLAYING_UPDATE="playingUpdate",pe.RECORDER_INIT="recorderInit",pe.RECORDER_SUCCESS="recorderSuccess",pe.RECORDER_ERROR="recorderError",pe.RECORDER_UPDATE_CONSTRAINTS="recorderUpdateConstraints",pe.RECORDER_RECORDING="recorderRecording",pe.RECORDER_STOPPED="recorderStopped",pe.RECORDER_PAUSED="recorderPaused",pe.RECORDER_RESETED="recorderReseted",pe.RECORDER_COUNT_UPDATE="recorderCountUpdate",pe.SAMPLE_RATE_CHANGED="sampleRateChanged",pe.DECODING_AUDIO_FILE="decodingAudioFile",pe.DECODED_AUDIO_FILE="decodedAudioFile",pe.ERROR_DECODING_AUDIO_FILE="errorDecodingAudioFile",pe.RECORDER_NOT_FOUND_ERROR="recorderNotFoundError",pe.RECORDER_UNKNOWN_ERROR="recorderUnknownError",pe.UPDATE_AUDIO_TREATMENT_PERCENT="updateAudioTreatmentPercent",pe.UPDATE_REMAINING_TIME_ESTIMATED="updateRemainingTimeEstimated",pe.CANCELLED_AND_LOADED_INITIAL_AUDIO="cancelledAndLoadedInitialAudio",pe.CANCELLING_AUDIO_PROCESSING="cancellingAudioProcessing";const ge={AUDIO_EDITOR:"audioEditor",VOICE_RECORDER:"voiceRecorder",BUFFER_PLAYER:"bufferPlayer",AUDIO_CONTEXT_MANAGER:"audioContextManager",AUDIO_PROCESSOR:"audioProcessor",BUFFER_MANAGER:"bufferManager",FILTER_MANAGER:"filterManager",RENDERER_MANAGER:"rendererManager",SAVE_BUFFER_MANAGER:"saveBufferManager",EXPORT_WAV_COMMAND:"exportWAV",EXPORT_MP3_COMMAND:"exportMP3",AUDIO_WAV:"audio/wav",AUDIO_MP3:"audio/mp3",RECORD_COMMAND:"record",INIT_COMMAND:"init",FILTERS_NAMES:{REVERB:"reverb",ECHO:"echo",BASS_BOOST:"bassboost",BITCRUSHER:"bitcrusher",HIGH_PASS:"highpass",LIMITER:"limiter",LOW_PASS:"lowpass",PASSTHROUGH:"passthroughfilter",RETURN_AUDIO:"returnAudio",SOUNDTOUCH:"soundtouch",TELEPHONIZER:"telephonizer",VOCODER:"vocoder"},WORKLET_PATHS:{BITCRUSHER:"BitCrusher.worklet.js",LIMITER:"Limiter.worklet.js",SOUNDTOUCH:"Soundtouch.worklet.js",RECORDER_WORKLET:"RecorderWorklet.js",PASSTHROUGH:"Passthrough.worklet.js"},WORKLET_NAMES:{BITCRUSHER:"bitcrusher-processor",LIMITER:"limiter-processor",SOUNDTOUCH:"soundtouch-worklet",RECORDER_WORKLET:"recorder-worklet",PASSTHROUGH:"passthrough"},PREFERENCES_KEYS:{COMPATIBILITY_MODE_ENABLED:"compatibility-mode-enabled",COMPATIBILITY_MODE_CHECKED:"compatibility-mode-checked",ENABLE_AUDIO_WORKLET:"enable-audio-worklet",ENABLE_SOUNDTOUCH_AUDIO_WORKLET:"enable-soundtouch-audio-worklet",BUFFER_SIZE:"buffer-size",SAMPLE_RATE:"sample-rate",DISABLE_INITIAL_RENDERING:"disable-initial-rendering",BITRATE_MP3:"bitrate-mp3"},ENABLE_SOUNDTOUCH_AUDIO_WORKLET:!0,ENABLE_AUDIO_WORKLET:!0,ENABLE_RECORDER_AUDIO_WORKLET:!0,SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE:16384,DEFAULT_REVERB_ENVIRONMENT:{name:"Medium Damping Cave E002 M2S",url:"impulse_response.wav",size:1350278,addDuration:4,link:"http://www.cksde.com/p_6_250.htm"},VOCODER_MODULATOR:"modulator.mp3",DEFAULT_BUFFER_SIZE:0,VALID_BUFFER_SIZE:[0,256,512,1024,2048,4096,8192,16384],VALID_MP3_BITRATES:[32,64,96,128,160,256,320],DEFAULT_SAMPLE_RATE:0,VALID_SAMPLE_RATES:[0,8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,176400,192e3],TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL:100,TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR:.9,DISABLE_INITIAL_RENDERING:!0,DEFAULT_SAVE_FORMAT:"wav",DEFAULT_MP3_BITRATE:320};let ve=class{constructor(){this.listeners={},this.listeners={}}on(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)}emit(t,e){this.listeners[t]&&this.listeners[t].forEach((t=>{t(e)}))}off(t,e){this.listeners[t]&&(this.listeners[t]=this.listeners[t].filter((t=>t!==e)))}};ve=he([oe(),de("design:paramtypes",[])],ve);var me=ve;let ye=class{constructor(t,e){this.previousSampleRate=ge.DEFAULT_SAMPLE_RATE,this.eventEmitter=t||new me,this.configService=e,this.setup()}setup(){this.configService&&(this.previousSampleRate=this.configService.getSampleRate(),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.SAMPLE_RATE_CHANGED,this.previousSampleRate)),this.currentContext||this.createNewContext(this.previousSampleRate)}createNewContextIfNeeded(t){if(this.configService&&this.configService.isCompatibilityModeEnabled()&&t){if(this.currentSampleRate!=t.sampleRate)return this.createNewContext(t.sampleRate),this.previousSampleRate=t.sampleRate,!0}else{let t=ge.DEFAULT_SAMPLE_RATE;if(this.configService&&(t=this.configService.getSampleRate()),t!=this.previousSampleRate)return this.createNewContext(t),this.previousSampleRate=t,!0}return!1}createNewContext(t){this._currentContext&&(this.oldAudioContext=this._currentContext,this.destroyOldContext());const e={latencyHint:"interactive"};0!=t&&(e.sampleRate=t),this._currentContext=new AudioContext(e),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.SAMPLE_RATE_CHANGED,this.currentSampleRate)}destroyOldContext(){this.oldAudioContext&&(this.oldAudioContext.close(),this.oldAudioContext=null)}get currentSampleRate(){return this.currentContext?this.currentContext.sampleRate:0}get currentContext(){return this._currentContext}};ye=he([oe(),le(0,ae(ce.EventEmitter)),le(1,ae(ce.ConfigService)),de("design:paramtypes",[Object,Object])],ye);var Ee=ye;let _e=class{constructor(){this.enabled=!1,this.defaultEnabled=!1,this.bufferFetcherService=null,this.bufferDecoderService=null,this.configService=null,this.eventEmitter=null}isEnabled(){return this.enabled}isDefaultEnabled(){return this.defaultEnabled}setDefaultEnabled(t){this.defaultEnabled=t}setEnabled(t){this.enabled=t}enable(){this.setEnabled(!0)}disable(){this.setEnabled(!1)}toggle(){this.setEnabled(!this.isEnabled())}injectDependencies(t,e,i,r){this.bufferFetcherService=t,this.bufferDecoderService=e,this.configService=i,this.eventEmitter=r}};he([ae(ce.BufferFetcherService),de("design:type",Object)],_e.prototype,"bufferFetcherService",void 0),he([ae(ce.BufferDecoderService),de("design:type",Object)],_e.prototype,"bufferDecoderService",void 0),he([ae(ce.ConfigService),de("design:type",Object)],_e.prototype,"configService",void 0),he([ae(ce.EventEmitter),de("design:type",Object)],_e.prototype,"eventEmitter",void 0),_e=he([oe()],_e);var be=_e;const Se={calcAudioDuration:(t,e)=>{if(t){let i=t.duration+1;return e&&(i/=e),i}return 0},loadAudioBuffer:(t,e)=>fe(void 0,void 0,void 0,(function*(){const i=yield Se.readAsArrayBufferPromisified(e),r=yield t.decodeAudioData(i);return Se.decodeBuffer(t,r)})),readAsArrayBufferPromisified:t=>new Promise(((e,i)=>{const r=new FileReader;r.onload=t=>{var r;const n=null===(r=null==t?void 0:t.target)||void 0===r?void 0:r.result;n instanceof ArrayBuffer?e(n):i()},t&&r.readAsArrayBuffer(t)})),decodeBuffer:(t,e)=>{if(1==e.numberOfChannels){t.resume();const i=e.duration,r=t.sampleRate,n=t.createBuffer(2,r*i+2*r,r),o=e.getChannelData(0),s=n.getChannelData(0),a=n.getChannelData(1);for(let t=0;t{const e=[];for(let i=0;i{const i=new Float32Array(e);for(let r=0;rt.getChannelData(e).reduce(((t,e)=>t+e),0),sumAudioBuffer(t){let e=0;for(let i=0;ivoid 0!==t&&void 0!==t.audioWorklet,isSettingValueValid:t=>!(void 0===t||isNaN(Number(t))||"string"==typeof t&&""===t.trim()),calculateAudioDuration(t,e,i){if(t&&e){return this.calcAudioDuration(t,i)+e.getAddingTime()}return 0},resetAudioRenderingProgress(t){t&&(t.emit(exports.EventType.UPDATE_AUDIO_TREATMENT_PERCENT,0),t.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,-1))},forceDownload(t,e){const i=window.document.createElement("a"),r=(window.URL||window.webkitURL).createObjectURL(t);window.document.body.appendChild(i),i.href=r,i.download=e||"output.wav",i.click(),window.URL.revokeObjectURL(r)}};let Ae=class extends be{constructor(t,e,i,r,n,o,s){super(),this.principalBuffer=null,this.filterManager=t,this.rendererManager=e,this.contextManager=i,this.saveBufferManager=r,this.audioProcessor=n,this.bufferManager=o,this.bufferPlayer=s,this.setup()}setup(){this.bufferPlayer&&(this.bufferPlayer.onBeforePlaying((()=>fe(this,void 0,void 0,(function*(){this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager&&this.contextManager.currentContext&&this.audioProcessor&&(yield this.audioProcessor.setupOutput(this.principalBuffer,this.contextManager.currentContext))})))),this.bufferPlayer.on(exports.EventType.PLAYING_FINISHED,(()=>{this.bufferPlayer&&this.bufferPlayer.loop&&this.bufferPlayer.start()})))}addFilters(...t){this.filterManager&&this.filterManager.addFilters(...t)}addRenderers(...t){this.rendererManager&&this.rendererManager.addRenderers(...t)}get currentSampleRate(){return this.contextManager?this.contextManager.currentSampleRate:0}get defaultDeviceSampleRate(){const t=new AudioContext;let e=0;return t&&(e=t.sampleRate,t.close()),e}loadBufferFromFile(t){return fe(this,void 0,void 0,(function*(){if(this.principalBuffer=null,this.audioProcessor&&(yield this.audioProcessor.prepareContext(this.principalBuffer)),!(this.contextManager&&this.contextManager.currentContext&&this.bufferDecoderService&&this.audioProcessor))throw new Error("Audio Context is not ready!");if(this.principalBuffer=yield this.bufferDecoderService.decodeBufferFromFile(t),this.audioProcessor.initialRenderingDone=!1,!this.principalBuffer)throw new Error("Error decoding audio file");this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),Se.resetAudioRenderingProgress(this.eventEmitter)}))}loadBuffer(t){this.principalBuffer=t,this.audioProcessor&&(this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),this.audioProcessor.initialRenderingDone=!1)}getOutputBuffer(){return this.audioProcessor?this.audioProcessor.renderedBuffer:null}renderAudio(){return fe(this,void 0,void 0,(function*(){return!!this.audioProcessor&&(yield this.audioProcessor.renderAudio(this.principalBuffer))}))}isAudioWorkletAvailable(){return!(!this.contextManager||!this.contextManager.currentContext)&&Se.isAudioWorkletCompatible(this.contextManager.currentContext)}getFiltersState(){return this.filterManager&&this.rendererManager?Object.assign(Object.assign({},this.filterManager.getFiltersState()),this.rendererManager.getRenderersState()):{}}getFiltersSettings(){return this.filterManager?this.filterManager.getFiltersSettings():new Map}reconnectNodesIfNeeded(){return fe(this,void 0,void 0,(function*(){if(this.contextManager&&this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager.currentContext&&this.principalBuffer&&this.filterManager&&this.filterManager.entrypointFilter){yield this.filterManager.connectNodes(this.contextManager.currentContext,this.principalBuffer,!0,this.bufferPlayer.compatibilityMode);const t=this.filterManager.entrypointFilter.getSpeed();this.bufferPlayer.speedAudio=t,this.bufferPlayer.duration=Se.calculateAudioDuration(this.principalBuffer,this.filterManager,t)*t}}))}toggleFilter(t){this.rendererManager&&this.rendererManager.toggleRenderer(t),this.filterManager&&(this.filterManager.toggleFilter(t),this.reconnectNodesIfNeeded())}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.changeFilterSettings(t,e),yield this.reconnectNodesIfNeeded())}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.resetFilterSettings(t),yield this.reconnectNodesIfNeeded())}))}resetAllFiltersState(){this.rendererManager&&this.rendererManager.resetAllRenderersState(),this.filterManager&&(this.filterManager.resetAllFiltersState(),this.reconnectNodesIfNeeded())}exit(){this.bufferPlayer&&(this.bufferPlayer.stop(),this.bufferPlayer.reset()),this.cancelAudioRendering(),this.principalBuffer=null}cancelAudioRendering(){this.audioProcessor&&this.audioProcessor.cancelAudioRendering()}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}off(t,e){this.eventEmitter&&this.eventEmitter.off(t,e)}saveBuffer(t){return fe(this,void 0,void 0,(function*(){var e;return!(!this.saveBufferManager||!this.audioProcessor)&&(yield null===(e=this.saveBufferManager)||void 0===e?void 0:e.saveBuffer(this.audioProcessor.renderedBuffer,t))}))}set downloadingInitialData(t){this.bufferManager&&(this.bufferManager.downloadingInitialData=t)}get downloadingInitialData(){return!!this.bufferManager&&this.bufferManager.downloadingInitialData}get order(){return-1}get id(){return ge.AUDIO_EDITOR}};Ae=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.SaveBufferManager)),le(4,ae(ce.AudioProcessor)),le(5,ae(ce.BufferManager)),le(6,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object,Object,Object,Object,Object])],Ae);var we=Ae;let Re=class extends be{constructor(t,e,i,r,n){super(),this._renderedBuffer=null,this.audioRenderingLastCanceled=!1,this.initialRenderingDone=!1,this.sumInputBuffer=0,this.contextManager=i,this.bufferPlayer=r,this.filterManager=t,this.rendererManager=e,this.bufferManager=n}prepareContext(t){return fe(this,void 0,void 0,(function*(){if(this.contextManager){this.contextManager.createNewContextIfNeeded(t)&&this.bufferManager&&(yield this.bufferManager.resetBufferFetcher()),this.contextManager.currentContext&&this.contextManager.currentContext.resume()}}))}renderAudio(t){return fe(this,void 0,void 0,(function*(){if(yield this.prepareContext(t),!this.contextManager||!this.contextManager.currentContext)throw new Error("AudioContext is not yet available");if(!this.filterManager)throw new Error("Filter manager is not available");if(!this.rendererManager)throw new Error("Renderer manager is not available");if(!this.filterManager.entrypointFilter)throw new Error("Entrypoint filter is not available");if(!t)throw new Error("No principal buffer available");if(!this.initialRenderingDone&&this.configService&&this.configService.isInitialRenderingDisabled()&&!this.configService.isCompatibilityModeEnabled())return this.loadInitialBuffer(t),this.initialRenderingDone=!0,!0;this.configService&&this.bufferPlayer&&!this.configService.isCompatibilityModeEnabled()&&this.bufferPlayer.compatibilityMode&&this.bufferPlayer.stop();const e=this.filterManager.entrypointFilter.getSpeed(),i=Se.calculateAudioDuration(t,this.filterManager,e),r=new OfflineAudioContext(2,this.contextManager.currentContext.sampleRate*i,this.contextManager.currentContext.sampleRate),n=this.configService&&this.configService.isCompatibilityModeEnabled()?this.contextManager.currentContext:r;return this._renderedBuffer=yield this.rendererManager.executeAudioRenderers(t,n),this.currentOfflineContext=null,this.audioRenderingLastCanceled=!1,Se.resetAudioRenderingProgress(this.eventEmitter),this.filterManager.setupTotalSamples(i,this.contextManager.currentContext),yield this.setupOutput(t,n,i,r)}))}setupPlayerSpeed(t){if(this.filterManager&&this.filterManager.entrypointFilter){const e=this.filterManager.entrypointFilter.getSpeed();t.speedAudio=e}}setupOutput(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(this._renderedBuffer&&this.configService&&this.eventEmitter&&this.bufferPlayer&&this.filterManager){if(yield this.filterManager.initializeWorklets(e),yield this.filterManager.connectNodes(e,this._renderedBuffer,!1,this.configService.isCompatibilityModeEnabled()),this.setupPlayerSpeed(this.bufferPlayer),!this.configService.isCompatibilityModeEnabled()&&r&&this.filterManager.currentNodes){this.currentOfflineContext=r,this.filterManager.currentNodes.output.connect(e.destination);const n=yield r.startRendering();if(this.contextManager&&!this.loadRenderedAudio(t,n))return yield this.setupOutput(t,this.contextManager.currentContext,i);if(this.audioRenderingLastCanceled)return!1;this.eventEmitter.emit(exports.EventType.OFFLINE_AUDIO_RENDERING_FINISHED)}else this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes.output,i),this.initialRenderingDone=!0;return this.eventEmitter.emit(exports.EventType.AUDIO_RENDERING_FINISHED),!0}return!1}))}loadRenderedAudio(t,e){if(this.eventEmitter&&this.bufferPlayer){if(this.audioRenderingLastCanceled)this.initialRenderingDone||(this.loadInitialBuffer(t),this.eventEmitter.emit(exports.EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO));else{if(0==Se.sumAudioBuffer(e)&&0!==this.sumInputBuffer){if(this.configService&&!this.configService.isCompatibilityModeChecked())return this.setCompatibilityModeChecked(!0),this.configService.enableCompatibilityMode(),this.eventEmitter.emit(exports.EventType.COMPATIBILITY_MODE_AUTO_ENABLED),!1;this.eventEmitter.emit(exports.EventType.RENDERING_AUDIO_PROBLEM_DETECTED)}this._renderedBuffer=e,this.bufferPlayer.loadBuffer(this._renderedBuffer)}this.initialRenderingDone=!0}return!0}loadInitialBuffer(t){this.bufferPlayer&&(this._renderedBuffer=t,this.bufferPlayer.loadBuffer(t))}cancelAudioRendering(){this.currentOfflineContext&&!this.audioRenderingLastCanceled&&this.filterManager&&(this.audioRenderingLastCanceled=!0,this.filterManager.disconnectOldNodes(!1),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.CANCELLING_AUDIO_PROCESSING))}setCompatibilityModeChecked(t){this.configService&&this.configService.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED,""+t)}get renderedBuffer(){return this._renderedBuffer}get order(){return-1}get id(){return ge.AUDIO_PROCESSOR}};Re=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.BufferPlayer)),le(4,ae(ce.BufferManager)),de("design:paramtypes",[Object,Object,Object,Object,Object])],Re);var Te=Re;let Ce=class extends be{constructor(t,e,i,r){super(),this.downloadingInitialData=!1,this.audioBuffersToFetch=[],this.bufferFetcherService=e,this.eventEmitter=i||new me,this.filterManager=t,this.filterManager=t,this.audioBuffersToFetch=r,this.setup()}setup(){this.audioBuffersToFetch.length>0&&this.fetchBuffers(!1)}fetchBuffers(t){return fe(this,void 0,void 0,(function*(){if(!this.downloadingInitialData&&this.bufferFetcherService){this.downloadingInitialData=!0,this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADING_BUFFERS);try{yield this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch),this.downloadingInitialData=!1,this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADED_BUFFERS)}catch(e){this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADING_BUFFERS_ERROR)}}}))}resetBufferFetcher(){return fe(this,void 0,void 0,(function*(){this.bufferFetcherService&&(this.bufferFetcherService.reset(),yield this.fetchBuffers(!0),this.filterManager&&(yield this.filterManager.resetFilterBuffers()))}))}get order(){return-1}get id(){return ge.BUFFER_MANAGER}};Ce=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.BufferFetcherService)),le(2,ae(ce.EventEmitter)),le(3,ae(ce.AudioBuffersToFetch)),de("design:paramtypes",[Object,Object,Object,Array])],Ce);var Me=Ce;let Ie=class extends be{constructor(t,e){super(),this.filters=[],this._entryPointFilter=null,this._currentNodes=null,this.filters=t,this._entryPointFilter=e,this.setup()}setup(){for(const t of this.filters)t.initializeDefaultSettings()}addFilters(...t){for(const e of t)e.initializeDefaultSettings(),e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.filters.push(...t)}getFiltersState(){const t={};return this.filters.forEach((e=>{t[e.id]=e.isEnabled()})),t}getFiltersSettings(){const t=new Map;for(const e of this.filters)t.set(e.id,e.getSettings());return t}toggleFilter(t){const e=this.filters.find((e=>e.id===t));e&&e.toggle()}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){const i=this.filters.find((e=>e.id===t));if(i)for(const t of Object.keys(e))yield i.setSetting(t,e[t])}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){const e=this.filters.find((e=>e.id===t));e&&(yield e.resetSettings())}))}resetAllFiltersState(){this.filters.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}connectNodes(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(!this._entryPointFilter)return;let n=null;if(i&&this._currentNodes)n=this._currentNodes.input;else{const i=yield this._entryPointFilter.getEntrypointNode(t,e,!r);n=i.input}const o=[];let s=n;this.disconnectOldNodes(i);const a=this.filters.sort(((t,e)=>t.order-e.order)).filter(((t,e)=>t!==this._entryPointFilter&&(t.isEnabled()||e>=this.filters.length-1)));for(const e of a){const i=e.getNode(t);s&&s.connect(i.input),s=i.output,o.push(i)}this._entryPointFilter&&this._entryPointFilter.updateState(),this._currentNodes={input:n,output:s,intermediateNodes:o.filter((t=>t.input!=s&&t.output!=s&&t.input!=n&&t.output!=n))}}))}disconnectOldNodes(t){if(this._currentNodes&&(this._currentNodes.input.disconnect(),t||this._currentNodes.output.disconnect(),this._currentNodes.intermediateNodes))for(const t of this._currentNodes.intermediateNodes)t.input.disconnect(),t.output.disconnect()}initializeWorklets(t){return fe(this,void 0,void 0,(function*(){for(const e of this.filters)e.isWorklet()&&(yield e.initializeWorklet(t))}))}getAddingTime(){let t=0;for(const e of this.filters)e.isEnabled()&&(t+=e.getAddingTime());return t}setupTotalSamples(t,e){if(e){const i=t*e.sampleRate;for(const t of this.filters)t.totalSamples=i}}resetFilterBuffers(){return fe(this,void 0,void 0,(function*(){for(const t of this.filters)yield t.bufferFetcherReseted()}))}get entrypointFilter(){return this._entryPointFilter}get currentNodes(){return this._currentNodes}get order(){return-1}get id(){return ge.FILTER_MANAGER}};Ie=he([oe(),le(0,ue(ce.Filters)),le(1,ae(ce.EntryPointFilter)),de("design:paramtypes",[Array,Object])],Ie);var Pe=Ie;let Be=class extends be{constructor(t=[]){super(),this.renderers=[],this.renderers=t}addRenderers(...t){for(const e of t)e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.renderers.push(...t)}getRenderersState(){const t={};return this.renderers.forEach((e=>{t[e.id]=e.isEnabled()})),t}toggleRenderer(t){const e=this.renderers.find((e=>e.id===t));e&&e.toggle()}resetAllRenderersState(){this.renderers.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}executeAudioRenderers(t,e){return fe(this,void 0,void 0,(function*(){let i=t;for(const t of this.renderers.sort(((t,e)=>t.order-e.order)))t.isEnabled()&&(i=yield t.renderAudio(e,i));return i}))}get order(){return-1}get id(){return ge.RENDERER_MANAGER}};Be=he([oe(),le(0,ue(ce.Renderers)),de("design:paramtypes",[Array])],Be);var Ne=Be;function Oe(t){return new Worker((t||"")+"RecorderWorker.js")}let De=class{constructor(t){this.worker=null,this.node=null,this.context=null,this.config={bufferLen:4096,sampleRate:44100,numChannels:2,mimeType:"audio/wav",workletBasePath:"worklets/",workerBasePath:"workers/",bitrate:ge.DEFAULT_MP3_BITRATE,callback:()=>{}},this.callbacks={getBuffer:[],exportWAV:[],exportMP3:[]},this.recording=!1,Object.assign(this.config,t)}setup(t){return fe(this,void 0,void 0,(function*(){this.node&&(this.node instanceof AudioWorkletNode&&this.node.port.postMessage("stop"),this.node.disconnect()),t&&(this.context=t.context,yield this.createRecorderNode(),this.node&&this.context&&(t.connect(this.node),this.node.connect(this.context.destination))),this.context&&!this.worker&&(this.worker=Oe(this.config.workerBasePath),this.worker&&(this.worker.postMessage({command:"init",config:{sampleRate:this.context.sampleRate,numChannels:this.config.numChannels,bitrate:this.config.bitrate}}),this.worker.onmessage=t=>{let e=null;switch(t.data.command){case"getBuffer":e=this.callbacks.getBuffer;break;case ge.EXPORT_WAV_COMMAND:e=this.callbacks.exportWAV;break;case ge.EXPORT_MP3_COMMAND:e=this.callbacks.exportMP3}if(e){const i=e.pop();"function"==typeof i&&i(t.data.data)}}))}))}createRecorderNode(){return fe(this,void 0,void 0,(function*(){if(this.context)if(Se.isAudioWorkletCompatible(this.context)&&ge.ENABLE_RECORDER_AUDIO_WORKLET)try{yield this.createRecorderWorklet()}catch(t){this.createRecorderScriptProcessorNode()}else this.createRecorderScriptProcessorNode()}))}createRecorderWorklet(){return fe(this,void 0,void 0,(function*(){if(this.context&&(yield this.context.audioWorklet.addModule(this.config.workletBasePath+ge.WORKLET_PATHS.RECORDER_WORKLET),this.node=new AudioWorkletNode(this.context,ge.WORKLET_NAMES.RECORDER_WORKLET),this.node&&this.node.port)){const t=this.node.parameters.get("numChannels");t&&(t.value=this.config.numChannels,t.setValueAtTime(this.config.numChannels,0)),this.node.port.onmessage=t=>{this.worker&&"record"==t.data.command&&t.data.buffer.length>0&&this.worker.postMessage({command:"record",buffer:t.data.buffer})}}}))}createRecorderScriptProcessorNode(){this.context&&(this.node=this.context.createScriptProcessor.call(this.context,this.config.bufferLen,this.config.numChannels,this.config.numChannels),this.node.onaudioprocess=t=>{if(!this.recording)return;const e=[];for(let i=0;i{this.savingBuffer&&this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback)}))}saveBuffer(t,e){return fe(this,void 0,void 0,(function*(){if(this.savingBuffer)throw new Error("The buffer is currently saving");if(!this.bufferPlayer)throw new Error("No buffer player was found");this.savingBuffer=!0;let i=!1;return i=this.bufferPlayer.compatibilityMode?yield this.saveBufferCompatibilityMode(e):yield this.saveBufferDirect(t,e),this.savingBuffer=!1,i}))}saveBufferDirect(t,e){return new Promise(((i,r)=>{var n;if(!t||this.contextManager&&!this.contextManager.currentContext)return r("No rendered buffer or AudioContext not initialized");const o=Oe(null===(n=this.configService)||void 0===n?void 0:n.getWorkerBasePath());if(o){const r=[];for(let e=0;e{t.data.command!=ge.EXPORT_WAV_COMMAND&&t.data.command!=ge.EXPORT_MP3_COMMAND||this.downloadAudioBlob(t.data.data,e),o.terminate(),this.savingBuffer=!1,i(!0)},o.postMessage({command:ge.INIT_COMMAND,config:{sampleRate:t.sampleRate,numChannels:2,bitrate:(null==e?void 0:e.bitrate)||ge.DEFAULT_MP3_BITRATE}}),o.postMessage({command:ge.RECORD_COMMAND,buffer:r}),o.postMessage({command:"mp3"===(null==e?void 0:e.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?ge.EXPORT_MP3_COMMAND:ge.EXPORT_WAV_COMMAND,type:ge.AUDIO_WAV})}}))}saveBufferCompatibilityMode(t){return new Promise(((e,i)=>{if(!this.bufferPlayer)return i("No buffer player found");this.bufferPlayer.start().then((()=>{if(!this.configService)return i("No config service found");if(!this.filterManager)return i("No filter manager found");const r=new De({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"mp3"==(null==t?void 0:t.format)?ge.AUDIO_MP3:ge.AUDIO_WAV,bitrate:(null==t?void 0:t.bitrate)||ge.DEFAULT_MP3_BITRATE});r.setup(this.filterManager.currentNodes.output).then((()=>{r.record(),this.playingStoppedCallback=()=>{r.kill(),this.savingBuffer=!1,this.eventEmitter&&(this.eventEmitter.off(exports.EventType.PLAYING_FINISHED,i),this.playingStoppedCallback&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback)),e(!0)};const i=()=>{this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback),r.stop();const n=n=>{this.downloadAudioBlob(n,t),this.savingBuffer=!1,this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_FINISHED,i),r.kill(),e(!0)};"mp3"===(null==t?void 0:t.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?r.exportMP3(n):r.exportWAV(n)};this.eventEmitter&&(this.eventEmitter.on(exports.EventType.PLAYING_FINISHED,i),this.eventEmitter.on(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback))}))}))}))}downloadAudioBlob(t,e){Se.forceDownload(t,"audio-"+(new Date).toISOString()+"."+((null==e?void 0:e.format)||ge.DEFAULT_SAVE_FORMAT))}get order(){return-1}get id(){return ge.SAVE_BUFFER_MANAGER}};Fe=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.AudioContextManager)),le(2,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object])],Fe);var ke=Fe;let Le=class extends be{constructor(t){super(),this.buffer=null,this.source=null,this.currentTime=0,this.displayTime=0,this.duration=0,this.intervals=[],this.playing=!1,this.loop=!1,this.speedAudio=1,this.onBeforePlayingCallback=()=>fe(this,void 0,void 0,(function*(){})),this.compatibilityMode=!1,this.currentNode=null,this._contextManager=t}init(t){this.playing=!1,this._contextManager&&this._contextManager.currentContext&&(this._contextManager.currentContext.resume(),!this.compatibilityMode&&this.buffer&&(null==this.source||t||this.source.disconnect(),this.source=this._contextManager.currentContext.createBufferSource(),this.source.buffer=this.buffer,this.duration=this.buffer.duration*this.speedAudio,this.source.connect(this._contextManager.currentContext.destination))),this.updateInfos()}loadBuffer(t){this.compatibilityMode=!1,this.reset(),this.buffer=t,this.init()}setCompatibilityMode(t,e){this.compatibilityMode=!0,this.reset(),this.init(),null!=e&&(this.duration=e*this.speedAudio),this.currentNode=t,this.updateInfos()}reset(t){this.clearIntervals(),this.currentTime=0,this.displayTime=0,t||this.stop()}stop(){var t;this.clearIntervals(),null!=this.source&&null!=this.source&&this.playing&&(this.source.stop(0),this.playing=!1),this.currentNode&&(this.currentNode.disconnect(),this.compatibilityMode&&(this.currentTime=0,this.displayTime=0)),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.PLAYING_STOPPED),this.updateInfos()}clearIntervals(){for(const t of this.intervals)clearInterval(t);this.intervals=[]}start(t){return fe(this,void 0,void 0,(function*(){var e;if(this.source||this.compatibilityMode){if(t||this.stop(),this.init(t),yield this.onBeforePlayingCallback(),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.PLAYING_STARTED),this.compatibilityMode){if(!(this.currentNode&&this._contextManager&&this._contextManager.currentContext))return;this.currentNode.connect(this._contextManager.currentContext.destination)}else{if(!this.source)return;this.source.start(0,t?0:this.currentTime/this.speedAudio),this.playing=!0}let i=performance.now();this.intervals.push(window.setInterval((()=>{var e,r;const n=performance.now(),o=n-i;i=n,this.currentTime+=o/1e3*this.speedAudio,this.displayTime=this.currentTime,this.currentTime>this.duration?this.loop?this.compatibilityMode?null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.PLAYING_FINISHED):(this.reset(t),this.start()):(null===(r=this.eventEmitter)||void 0===r||r.emit(exports.EventType.PLAYING_FINISHED),this.reset(t)):this.updateInfos()}),100))}}))}playDirect(){return fe(this,void 0,void 0,(function*(){this.compatibilityMode?this.start(!1):this.start(!0)}))}pause(){this.stop()}updateInfos(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.PLAYING_UPDATE)}setTimePercent(t){this.compatibilityMode||(this.currentTime=Math.round(this.duration*(t/100)),this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}setTime(t){this.compatibilityMode||(this.currentTime=t,this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}onBeforePlaying(t){this.onBeforePlayingCallback=t}toggleLoop(){this.loop=!this.loop}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}get currentTimeDisplay(){return("0"+Math.trunc(this.displayTime/60)).slice(-2)+":"+("0"+Math.trunc(this.displayTime%60)).slice(-2)}get maxTimeDisplay(){return("0"+Math.trunc(this.duration/60)).slice(-2)+":"+("0"+Math.trunc(this.duration%60)).slice(-2)}get percent(){return 100-Math.round((this.duration-this.displayTime)/this.duration*100)}get remainingTimeDisplay(){return("0"+Math.trunc((this.duration-this.displayTime)/60)).slice(-2)+":"+("0"+Math.trunc((this.duration-this.displayTime)%60)).slice(-2)}get order(){return-1}get id(){return ge.BUFFER_PLAYER}};Le=he([oe(),le(0,ae(ce.AudioContextManager)),de("design:paramtypes",[Object])],Le);var Ge=Le;let We=class{constructor(t,e,i){this.buffers=new Map,this.bufferErrors=[],this.configService=null,this.contextManager=t,this.eventEmitter=i||new me,this.configService=e}fetchBuffer(t,e){return fe(this,void 0,void 0,(function*(){var i,r,n,o;const s=(this.configService?this.configService.getSoundBasePath():"")+t;if(null==this.buffers.get(this.getKeyFromLocation(s))||e){null===(i=this.eventEmitter)||void 0===i||i.emit(exports.EventType.FETCHING_BUFFERS,s);try{const t=yield fetch(s);if(!t.ok)throw this.bufferErrors.push(s),null===(r=this.eventEmitter)||void 0===r||r.emit(exports.EventType.FETCHING_BUFFERS_ERROR,s),exports.EventType.FETCHING_BUFFERS_ERROR;{const e=yield t.arrayBuffer();if(this.contextManager&&this.contextManager.currentContext){const t=yield this.contextManager.currentContext.decodeAudioData(e);this.buffers.set(this.getKeyFromLocation(s),Se.decodeBuffer(this.contextManager.currentContext,t))}}null===(n=this.eventEmitter)||void 0===n||n.emit(exports.EventType.FINISHED_FETCHING_BUFFERS,s)}catch(t){throw this.bufferErrors.push(s),null===(o=this.eventEmitter)||void 0===o||o.emit(exports.EventType.FETCHING_BUFFERS_ERROR,s),exports.EventType.FETCHING_BUFFERS_ERROR}}}))}fetchAllBuffers(t){return fe(this,void 0,void 0,(function*(){for(const e of t)yield this.fetchBuffer(e)}))}getAudioBuffer(t){return this.buffers.get(this.getKeyFromLocation(t))}getOrFetchAudioBuffer(t){return fe(this,void 0,void 0,(function*(){return null==this.getAudioBuffer(t)&&(yield this.fetchBuffer(t)),this.getAudioBuffer(t)}))}getDownloadedBuffersList(){return Array.from(this.buffers.keys())}getKeyFromLocation(t){return t.substring(t.lastIndexOf("/")+1)}reset(){this.buffers.clear()}};We=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.ConfigService)),le(2,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object,Object])],We);var Ve=We;let Ue=class{constructor(t,e){this.contextManager=t,this.eventEmitter=e||new me}decodeBufferFromFile(t){return fe(this,void 0,void 0,(function*(){this.eventEmitter&&this.eventEmitter.emit(exports.EventType.DECODING_AUDIO_FILE);try{if(this.contextManager&&this.contextManager.currentContext){const e=yield Se.loadAudioBuffer(this.contextManager.currentContext,t);return this.eventEmitter&&this.eventEmitter.emit(exports.EventType.DECODED_AUDIO_FILE),e}}catch(t){console.error(t),this.eventEmitter&&(this.eventEmitter.emit(exports.EventType.DECODED_AUDIO_FILE),this.eventEmitter.emit(exports.EventType.ERROR_DECODING_AUDIO_FILE))}return null}))}};Ue=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object])],Ue);var je=Ue;class qe extends be{}class He extends be{constructor(){super(...arguments),this.defaultSettings=null,this._totalSamples=0}getAddingTime(){return 0}initializeDefaultSettings(){this.defaultSettings=this.getSettings()}getDefaultSettings(){return this.defaultSettings}resetSettings(){return fe(this,void 0,void 0,(function*(){if(this.defaultSettings)for(const t in this.defaultSettings)this.defaultSettings&&void 0!==this.defaultSettings[t]&&(yield this.setSetting(t,this.defaultSettings[t]))}))}isWorklet(){return!1}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){return!1}))}set totalSamples(t){this._totalSamples=t}}class Ke{constructor(t,e){this._value=0,this._minValue=0,this._maxValue=Number.MAX_SAFE_INTEGER,this._defaultValue=0,this.context=null,this.automationRate="a-rate",this._defaultValue=void 0!==e?e:0,this._value=this._defaultValue,this.context=t}get value(){return this._value}set value(t){this._value=Math.max(this._minValue,Math.min(this._maxValue,t))}get minValue(){return this._minValue}get maxValue(){return this._maxValue}get defaultValue(){return this._defaultValue}setValueAtTime(t,e){return console.warn("setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}linearRampToValueAtTime(t,e){return console.warn("linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}exponentialRampToValueAtTime(t,e){return console.warn("exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}cancelAndHoldAtTime(t){throw new Error("Method not implemented.")}cancelScheduledValues(t){throw new Error("Method not implemented.")}setTargetAtTime(t,e,i){throw new Error("Method not implemented.")}setValueCurveAtTime(t,e,i){throw new Error("Method not implemented.")}}class Ye{constructor(t,e,i){this._parameters=new Map,this._port=null,this.currentContext=null,this.workletProcessor=e,this.currentContext=t,this._scriptProcessorNode=t.createScriptProcessor(i,2,2),this.setupPort(),this.setupProcessor(),this.setupWorkletScope(t)}setupPort(){const t=new MessageChannel;t.port1.onmessage=t=>{this.workletProcessor&&this.workletProcessor.port2&&this.workletProcessor.port2.postMessage(t.data)},this.workletProcessor&&this.workletProcessor.port2&&(this.workletProcessor.port2.onmessage=e=>{t.port1.postMessage(e.data)}),this._port=t.port2}setupProcessor(){if(!this._scriptProcessorNode)return;this._scriptProcessorNode.onaudioprocess=t=>{if(this.workletProcessor){const e=[Se.convertAudioBufferToFloat32Array(t.inputBuffer)],i=[Se.convertAudioBufferToFloat32Array(t.outputBuffer)],r=[];for(const[t,e]of this._parameters.entries())r.push([t,Se.convertAudioParamToFloat32Array(e,1)]);const n=Object.fromEntries(r);this.workletProcessor.process(e,i,n)}};const t=this.workletProcessor.defaultParameterDescriptors;t&&t.forEach((t=>{this.currentContext&&this._parameters.set(t.name,new Ke(this.currentContext,t.defaultValue))}))}setupWorkletScope(t){"undefined"!=typeof window&&(window.sampleRate=t.sampleRate)}get port(){return this._port}get parameters(){return this._parameters}get node(){return this._scriptProcessorNode}get context(){var t;return null===(t=this._scriptProcessorNode)||void 0===t?void 0:t.context}}class ze{static registerProcessor(t,e){ze.processorsMap.set(t,e)}static getProcessor(t){const e=ze.processorsMap.get(t);return e?new e:null}}ze.processorsMap=new Map;class Qe{constructor(){this.messageChannel=null,this.messageChannel=new MessageChannel}process(t,e,i){return!0}get port(){return this.messageChannel&&this.messageChannel.port1}get port2(){return this.messageChannel&&this.messageChannel.port2}get parameters(){throw new Error("Method not implemented.")}get parameterDescriptors(){throw new Error("Method not implemented.")}get defaultParameterDescriptors(){return[]}}"undefined"==typeof window||"AudioWorkletProcessor"in window||(window.AudioWorkletProcessor=Qe,window.registerProcessor=ze.registerProcessor),"undefined"==typeof global||"AudioWorkletProcessor"in global||(global.AudioWorkletProcessor=Qe,global.registerProcessor=ze.registerProcessor);class Ze extends He{constructor(){super(...arguments),this.currentWorkletNode=null,this.fallbackToScriptProcessor=!1,this.keepCurrentNodeIfPossible=!1}initializeWorklet(t){return fe(this,void 0,void 0,(function*(){if(this.stop(),!Se.isAudioWorkletCompatible(t))return console.error("Audio Worklets not supported on this browser. Fallback to ScriptProcessor"),void(this.fallbackToScriptProcessor=!0);const e=(this.configService?this.configService.getWorkletBasePath():"")+this.workletPath;yield t.audioWorklet.addModule(e).catch((t=>{console.error(`Error when loading Worklet (${e}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`,t),this.fallbackToScriptProcessor=!0}))}))}isAudioWorkletEnabled(){return this.configService?this.configService.isAudioWorkletEnabled():ge.ENABLE_AUDIO_WORKLET}initializeNode(t,e){if(this.isAudioWorkletEnabled()&&!this.fallbackToScriptProcessor)this.currentWorkletNode=new AudioWorkletNode(t,e);else{const i=ze.getProcessor(e);if(!i)throw new Error(`No processor registered with name ${e} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);this.currentWorkletNode=new Ye(t,i,this.configService.getBufferSize())}this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.onmessage=t=>this.receiveEvent(t))}applyCurrentSettingsToWorklet(){if(this.currentWorkletNode&&this.currentWorkletNode.parameters){const t=this.getSettings();for(const e of Object.keys(t)){const i=this.currentWorkletNode.parameters.get(e);i&&(i.value=t[e],i.setValueAtTime(t[e],0))}}}getNode(t){if(this.keepCurrentNodeIfPossible&&this.currentWorkletNode&&this.currentWorkletNode.context==t||(this.stop(),this.initializeNode(t,this.workletName)),this.applyCurrentSettingsToWorklet(),this.setEnabled(this.isEnabled()),this.currentWorkletNode)return this.currentWorkletNode instanceof Ye?{input:this.currentWorkletNode.node,output:this.currentWorkletNode.node}:{input:this.currentWorkletNode,output:this.currentWorkletNode};throw new Error("Worklet node has not yet been created")}stop(){this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.postMessage("stop"),this.currentWorkletNode.port.onmessage=null),this.currentWorkletNode=null}setEnabled(t){this.currentWorkletNode&&this.currentWorkletNode.port&&this.currentWorkletNode.port.postMessage(t?"enable":"disable"),super.setEnabled(t)}isWorklet(){return!0}}class Xe extends AudioWorkletProcessor{constructor(){super(),this.stopped=!1,this.phaser=null,this.last=null,this.port.onmessage=t=>{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[{name:"bits",defaultValue:16},{name:"normFreq",defaultValue:.9}]}get defaultParameterDescriptors(){return Xe.parameterDescriptors}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=2*Math.pow(.5,i.bits[0]),s=(1-i.normFreq[0])/(sampleRate/48e3);if(null==this.last&&(this.last=new Array(r.length).fill(0)),null==this.phaser&&(this.phaser=new Array(r.length).fill(0)),r&&r[0]){const t=r[0].length;for(let e=0;e=1&&(this.phaser[e]-=1,this.last[e]=o*Math.floor(i[r]*(1/o)+.5)),a[r]=this.last[e]}}return!0}stop(){this.stopped=!0,this.phaser=null,this.last=null}}registerProcessor(ge.WORKLET_NAMES.BITCRUSHER,Xe);class $e{constructor(t){this._array=new Float32Array,this.n=0,this.length=0,this.readPointer=0,this.writePointer=0,this.n=Math.floor(t),this.init()}init(){this._array=new Float32Array(2*this.n),this.length=this._array.length,this.readPointer=0,this.writePointer=this.n-1,this._array.fill(0)}read(){const t=this._array[this.readPointer%this.length];return this.readPointer=(this.readPointer+1)%this.length,t}push(t){this._array[this.writePointer%this.length]=t,this.writePointer=(this.writePointer+1)%this.length}reset(){this.init()}clear(){this._array=new Float32Array,this.length=0,this.readPointer=0,this.writePointer=0}sum(){return this._array.reduce(((t,e)=>t+e),0)}}class Je extends AudioWorkletProcessor{constructor(){super(),this.delayBuffer=[],this.envelopeSample=0,this.stopped=!1,this.disabled=!1,this.port.onmessage=t=>{"reset"==t.data?this.reset():"stop"==t.data?this.stop():"disable"==t.data?this.disabled=!0:"enable"==t.data&&(this.disabled=!1)}}static get parameterDescriptors(){return[{name:"preGain",defaultValue:0},{name:"postGain",defaultValue:0},{name:"attackTime",defaultValue:0},{name:"releaseTime",defaultValue:3},{name:"threshold",defaultValue:-.05},{name:"lookAheadTime",defaultValue:0}]}get defaultParameterDescriptors(){return Je.parameterDescriptors}getEnvelope(t,e,i,r){const n=Math.exp(-1/(r*e)),o=Math.exp(-1/(r*i)),s=new Float32Array(t.length);for(let e=0;er&&(r=t[n][i]);return r}ampToDB(t){return 20*Math.log10(t)}dBToAmp(t){return Math.pow(10,t/20)}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=[],s=this.dBToAmp(i.postGain[0]),a=this.dBToAmp(i.preGain[0]);for(let t=0;t0&&a)for(let e=0;e=0||(i=(t.length-r)/2);const n=2*i;this.ensureCapacity(i+this._frameCount);const o=this.endIndex;this.vector.set(t.subarray(r,r+n),o),this._frameCount+=i}putBuffer(t,e,i=0){e=e||0,i>=0||(i=t.frameCount-e),this.putSamples(t.vector,t.position+e,i)}receive(t){t>=0&&!(t>this._frameCount)||(t=this.frameCount),this._frameCount-=t,this._position+=t}receiveSamples(t,e=0){const i=2*e,r=this.startIndex;t.set(this._vector.subarray(r,r+i)),this.receive(e)}extract(t,e=0,i=0){const r=this.startIndex+2*e,n=2*i;t.set(this._vector.subarray(r,r+n))}ensureCapacity(t=0){const e=parseInt(2*t);if(this._vector.length0&&(this._vector.set(this._vector.subarray(this.startIndex,this.endIndex)),this._position=0)}}class ei{constructor(t){t?(this._inputBuffer=new ti,this._outputBuffer=new ti):this._inputBuffer=this._outputBuffer=null}get inputBuffer(){return this._inputBuffer}set inputBuffer(t){this._inputBuffer=t}get outputBuffer(){return this._outputBuffer}set outputBuffer(t){this._outputBuffer=t}clear(){this._inputBuffer.clear(),this._outputBuffer.clear()}}class ii extends ei{constructor(t){super(t),this.reset(),this._rate=1}set rate(t){this._rate=t}reset(){this.slopeCount=0,this.prevSampleL=0,this.prevSampleR=0}clone(){const t=new ii;return t.rate=this._rate,t}process(){const t=this._inputBuffer.frameCount;this._outputBuffer.ensureAdditionalCapacity(t/this._rate+1);const e=this.transpose(t);this._inputBuffer.receive(),this._outputBuffer.put(e)}transpose(t=0){if(0===t)return 0;const e=this._inputBuffer.vector,i=this._inputBuffer.startIndex,r=this._outputBuffer.vector,n=this._outputBuffer.endIndex;let o=0,s=0;for(;this.slopeCount<1;)r[n+2*s]=(1-this.slopeCount)*this.prevSampleL+this.slopeCount*e[i],r[n+2*s+1]=(1-this.slopeCount)*this.prevSampleR+this.slopeCount*e[i+1],s+=1,this.slopeCount+=this._rate;if(this.slopeCount-=1,1!==t)t:for(;;){for(;this.slopeCount>1;)if(this.slopeCount-=1,o+=1,o>=t-1)break t;const a=i+2*o;r[n+2*s]=(1-this.slopeCount)*e[a]+this.slopeCount*e[a+2],r[n+2*s+1]=(1-this.slopeCount)*e[a+1]+this.slopeCount*e[a+3],s+=1,this.slopeCount+=this._rate}return this.prevSampleL=e[i+2*t-2],this.prevSampleR=e[i+2*t-1],s}}class ri{constructor(t){this._pipe=t}get pipe(){return this._pipe}get inputBuffer(){return this._pipe.inputBuffer}get outputBuffer(){return this._pipe.outputBuffer}fillInputBuffer(){throw new Error("fillInputBuffer() not overridden")}fillOutputBuffer(t=0){for(;this.outputBuffer.frameCountthis._position)throw new RangeError("New position may not be greater than current position");const e=this.outputBufferPosition-(this._position-t);if(e<0)throw new RangeError("New position falls outside of history buffer");this.outputBufferPosition=e,this._position=t}get sourcePosition(){return this._sourcePosition}set sourcePosition(t){this.clear(),this._sourcePosition=t}onEnd(){this.callback()}fillInputBuffer(t=0){const e=new Float32Array(2*t),i=this.sourceSound.extract(e,t,this._sourcePosition);this._sourcePosition+=i,this.inputBuffer.putSamples(e,0,i)}extract(t,e=0){this.fillOutputBuffer(this.outputBufferPosition+e);const i=Math.min(e,this.outputBuffer.frameCount-this.outputBufferPosition);this.outputBuffer.extract(t,this.outputBufferPosition,i);const r=this.outputBufferPosition+i;return this.outputBufferPosition=Math.min(this.historyBufferSize,r),this.outputBuffer.receive(Math.max(r-this.historyBufferSize,0)),this._position+=i,i}handleSampleData(t){this.extract(t.data,4096)}clear(){super.clear(),this.outputBufferPosition=0}}const si=[[124,186,248,310,372,434,496,558,620,682,744,806,868,930,992,1054,1116,1178,1240,1302,1364,1426,1488,0],[-100,-75,-50,-25,25,50,75,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-20,-15,-10,-5,5,10,15,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-4,-3,-2,-1,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],ai=-10/1.5;class ui extends ei{constructor(t){super(t),this._quickSeek=!0,this.midBufferDirty=!1,this.midBuffer=null,this.overlapLength=0,this.autoSeqSetting=!0,this.autoSeekSetting=!0,this._tempo=1,this.setParameters(44100,0,0,8)}clear(){super.clear(),this.clearMidBuffer()}clearMidBuffer(){this.midBufferDirty&&(this.midBufferDirty=!1,this.midBuffer=null)}setParameters(t,e,i,r){t>0&&(this.sampleRate=t),r>0&&(this.overlapMs=r),e>0?(this.sequenceMs=e,this.autoSeqSetting=!1):this.autoSeqSetting=!0,i>0?(this.seekWindowMs=i,this.autoSeekSetting=!1):this.autoSeekSetting=!0,this.calculateSequenceParameters(),this.calculateOverlapLength(this.overlapMs),this.tempo=this._tempo}set tempo(t){let e;this._tempo=t,this.calculateSequenceParameters(),this.nominalSkip=this._tempo*(this.seekWindowLength-this.overlapLength),this.skipFract=0,e=Math.floor(this.nominalSkip+.5),this.sampleReq=Math.max(e+this.overlapLength,this.seekWindowLength)+this.seekLength}get tempo(){return this._tempo}get inputChunkSize(){return this.sampleReq}get outputChunkSize(){return this.overlapLength+Math.max(0,this.seekWindowLength-2*this.overlapLength)}calculateOverlapLength(t=0){let e;e=this.sampleRate*t/1e3,e=e<16?16:e,e-=e%8,this.overlapLength=e,this.refMidBuffer=new Float32Array(2*this.overlapLength),this.midBuffer=new Float32Array(2*this.overlapLength)}checkLimits(t,e,i){return ti?i:t}calculateSequenceParameters(){let t,e;this.autoSeqSetting&&(t=150+-50*this._tempo,t=this.checkLimits(t,50,125),this.sequenceMs=Math.floor(t+.5)),this.autoSeekSetting&&(e=28.333333333333332+ai*this._tempo,e=this.checkLimits(e,15,25),this.seekWindowMs=Math.floor(e+.5)),this.seekWindowLength=Math.floor(this.sampleRate*this.sequenceMs/1e3),this.seekLength=Math.floor(this.sampleRate*this.seekWindowMs/1e3)}set quickSeek(t){this._quickSeek=t}clone(){const t=new ui;return t.tempo=this._tempo,t.setParameters(this.sampleRate,this.sequenceMs,this.seekWindowMs,this.overlapMs),t}seekBestOverlapPosition(){return this._quickSeek?this.seekBestOverlapPositionStereoQuick():this.seekBestOverlapPositionStereo()}seekBestOverlapPositionStereo(){let t,e,i,r=0;for(this.preCalculateCorrelationReferenceStereo(),t=0,e=Number.MIN_VALUE;re&&(e=i,t=r);return t}seekBestOverlapPositionStereoQuick(){let t,e,i,r,n,o=0;for(this.preCalculateCorrelationReferenceStereo(),e=Number.MIN_VALUE,t=0,r=0,n=0;o<4;o+=1){let s=0;for(;si[o][s]&&(n=r+si[o][s],!(n>=this.seekLength));)i=this.calculateCrossCorrelationStereo(2*n,this.refMidBuffer),i>e&&(e=i,t=n),s+=1;r=t}return t}preCalculateCorrelationReferenceStereo(){let t,e,i=0;for(;i=this.sampleReq;){t=this.seekBestOverlapPosition(),this._outputBuffer.ensureAdditionalCapacity(this.overlapLength),this.overlap(Math.floor(t)),this._outputBuffer.put(this.overlapLength),e=this.seekWindowLength-2*this.overlapLength,e>0&&this._outputBuffer.putBuffer(this._inputBuffer,t+this.overlapLength,e);const r=this._inputBuffer.startIndex+2*(t+this.seekWindowLength-this.overlapLength);this.midBuffer.set(this._inputBuffer.vector.subarray(r,r+2*this.overlapLength)),this.skipFract+=this.nominalSkip,i=Math.floor(this.skipFract),this.skipFract-=i,this._inputBuffer.receive(i)}}}const ci=function(t,e){return(t>e?t-e:e-t)>1e-10};class hi{constructor(){this.transposer=new ii(!1),this.stretch=new ui(!1),this._inputBuffer=new ti,this._intermediateBuffer=new ti,this._outputBuffer=new ti,this._rate=0,this._tempo=0,this.virtualPitch=1,this.virtualRate=1,this.virtualTempo=1,this.calculateEffectiveRateAndTempo()}clear(){this.transposer.clear(),this.stretch.clear()}clone(){const t=new hi;return t.rate=this.rate,t.tempo=this.tempo,t}get rate(){return this._rate}set rate(t){this.virtualRate=t,this.calculateEffectiveRateAndTempo()}set rateChange(t){this._rate=1+.01*t}get tempo(){return this._tempo}set tempo(t){this.virtualTempo=t,this.calculateEffectiveRateAndTempo()}set tempoChange(t){this.tempo=1+.01*t}set pitch(t){this.virtualPitch=t,this.calculateEffectiveRateAndTempo()}set pitchOctaves(t){this.pitch=Math.exp(.69314718056*t),this.calculateEffectiveRateAndTempo()}set pitchSemitones(t){this.pitchOctaves=t/12}get inputBuffer(){return this._inputBuffer}get outputBuffer(){return this._outputBuffer}calculateEffectiveRateAndTempo(){const t=this._tempo,e=this._rate;this._tempo=this.virtualTempo/this.virtualPitch,this._rate=this.virtualRate*this.virtualPitch,ci(this._tempo,t)&&(this.stretch.tempo=this._tempo),ci(this._rate,e)&&(this.transposer.rate=this._rate),this._rate>1?this._outputBuffer!=this.transposer.outputBuffer&&(this.stretch.inputBuffer=this._inputBuffer,this.stretch.outputBuffer=this._intermediateBuffer,this.transposer.inputBuffer=this._intermediateBuffer,this.transposer.outputBuffer=this._outputBuffer):this._outputBuffer!=this.stretch.outputBuffer&&(this.transposer.inputBuffer=this._inputBuffer,this.transposer.outputBuffer=this._intermediateBuffer,this.stretch.inputBuffer=this._intermediateBuffer,this.stretch.outputBuffer=this._outputBuffer)}process(){this._rate>1?(this.stretch.process(),this.transposer.process()):(this.transposer.process(),this.stretch.process())}}class li{constructor(t){this.buffer=t,this._position=0}get dualChannel(){return this.buffer.numberOfChannels>1}get position(){return this._position}set position(t){this._position=t}extract(t,e=0,i=0){this.position=i;let r=this.buffer.getChannelData(0),n=this.dualChannel?this.buffer.getChannelData(1):this.buffer.getChannelData(0),o=0;for(;o=r?i:new Array(r-i.length+1).join(n)+i}`;var i,r,n},fi=function(t){const e=this.timePlayed,i=this.sampleRate;if(this.sourcePosition=t,this.timePlayed=t/i,e!==this.timePlayed){const t=new CustomEvent("play",{detail:{timePlayed:this.timePlayed,formattedTimePlayed:this.formattedTimePlayed,percentagePlayed:this.percentagePlayed}});this._node.dispatchEvent(t)}};class pi{constructor(t,e,i,r=ni){this._soundtouch=new hi;const n=new li(e);this.timePlayed=0,this.sourcePosition=0,this._filter=new oi(n,this._soundtouch,r),this._node=function(t,e,i=ni,r=4096){const n=t.createScriptProcessor(r,2,2),o=new Float32Array(2*r);return n.onaudioprocess=t=>{let n=t.outputBuffer.getChannelData(0),s=t.outputBuffer.getChannelData(1),a=e.extract(o,r);i(e.sourcePosition),0===a&&e.onEnd();let u=0;for(;ufi.call(this,t)),i),this.tempo=1,this.rate=1,this.duration=e.duration,this.sampleRate=t.sampleRate,this.listeners=[]}get formattedDuration(){return di(this.duration)}get formattedTimePlayed(){return di(this.timePlayed)}get percentagePlayed(){return 100*this._filter.sourcePosition/(this.duration*this.sampleRate)}set percentagePlayed(t){this._filter.sourcePosition=parseInt(t*this.duration*this.sampleRate),this.sourcePosition=this._filter.sourcePosition,this.timePlayed=this.sourcePosition/this.sampleRate}get node(){return this._node}set pitch(t){this._soundtouch.pitch=t}set pitchSemitones(t){this._soundtouch.pitchSemitones=t}set rate(t){this._soundtouch.rate=t}set tempo(t){this._soundtouch.tempo=t}connect(t){this._node.connect(t)}disconnect(){this._node.disconnect()}on(t,e){this.listeners.push({name:t,cb:e}),this._node.addEventListener(t,(t=>e(t.detail)))}off(t=null){let e=this.listeners;t&&(e=e.filter((e=>e.name===t))),e.forEach((t=>{this._node.removeEventListener(t.name,(e=>t.cb(e.detail)))}))}}let gi;"undefined"!=typeof window&&void 0!==window.AudioWorkletNode&&(gi=class extends AudioWorkletNode{constructor(t,e,i){super(t,e,i),this.name="",this.running=!1,this._tempo=1,this._pitch=1,this.name=this.constructor.name,this.running=!0,this.updateInterval=i.processorOptions.updateInterval}setup(t,e){return fe(this,void 0,void 0,(function*(){return new Promise((i=>{this.port&&(this.port.onmessage=t=>{t&&t.data&&"OK"===t.data.status&&"setup"===t.data.args[0]&&(this.port.onmessage=this.messageProcessor.bind(this),i())},this.port.postMessage({command:"setup",args:[t,e]}),this._tempo=t,this._pitch=e)}))}))}set updateInterval(t){this.port.postMessage({command:"updateInterval",args:[t]})}get node(){return this}set tempo(t){this.port.postMessage({command:"setTempo",args:[t]})}set pitch(t){this.port.postMessage({command:"setPitch",args:[t]})}get tempo(){return this.port.postMessage({command:"getTempo",args:[]}),this._tempo}get pitch(){return this.port.postMessage({command:"getPitch",args:[]}),this._pitch}stop(){return fe(this,void 0,void 0,(function*(){this.running&&(this.port.postMessage({command:"stop",args:[]}),this.disconnect(),this.running=!1)}))}messageProcessor(t){if(t.data.command){const{command:e}=t.data;if("End"===e)this.stop();if(t.data.status){const e=t.data.args[1];switch(t.data.args[0]){case"getTempo":this._tempo=e;break;case"getPitch":this._pitch=e}return}}}});var vi=gi;class mi{constructor(t,e,i){this.FILTER_QUALITY=6,this.FOURIER_SIZE=4096,this.WAVETABLEBOOST=40,this.SAWTOOTHBOOST=.4,this.oscillatorType=4,this.oscillatorDetuneValue=0,this.audioContext=null,this.carrierBuffer=null,this.modulatorNode=null,this.vocoding=!1,this.modulatorInput=null,this.carrierInput=null,this.modulatorGain=null,this.modulatorGainValue=1,this.noiseBuffer=null,this.noiseNode=null,this.noiseGain=null,this.noiseGainValue=.2,this.carrierSampleNode=null,this.carrierSampleGain=null,this.carrierSampleGainValue=0,this.oscillatorNode=null,this.oscillatorGain=null,this.oscillatorGainValue=1,this.wavetable=null,this.wavetableSignalGain=null,this.modFilterBands=null,this.modFilterPostGains=null,this.heterodynes=null,this.powers=null,this.lpFilters=null,this.lpFilterPostGains=null,this.carrierBands=null,this.carrierFilterPostGains=null,this.carrierBandGains=null,this.vocoderBands=null,this.numVocoderBands=0,this.hpFilterGain=null,this.outputGain=null,this.audioContext=t,this.carrierBuffer=e,this.modulatorBuffer=i}init(){this.generateVocoderBands(55,7040,28),this.setupVocoderGraph(),this.vocode()}getNodes(){return{modulatorNode:this.modulatorNode,modulatorGain:this.modulatorGain,synthLevel:this.oscillatorGain,noiseNode:this.noiseGain,oscillatorNode:this.oscillatorNode,hpFilterGain:this.hpFilterGain,outputGain:this.outputGain}}shutOffCarrier(){this.oscillatorNode&&this.noiseNode&&this.carrierSampleNode&&(this.oscillatorNode.stop(0),this.oscillatorNode=null,this.noiseNode.stop(0),this.noiseNode=null,this.carrierSampleNode.stop(0),this.carrierSampleNode=null)}selectSawtooth(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.SAWTOOTHBOOST),this.oscillatorNode&&(this.oscillatorNode.type="sawtooth")}selectWavetable(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST),this.oscillatorNode&&this.wavetable&&this.oscillatorNode.setPeriodicWave(this.wavetable),this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST)}updateModGain(t){this.modulatorGainValue=t,this.modulatorGain&&(this.modulatorGain.gain.value=t)}updateSampleLevel(t){this.carrierSampleGainValue=t,this.carrierSampleGain&&(this.carrierSampleGain.gain.value=t)}updateSynthLevel(t){this.oscillatorGainValue=t,this.oscillatorGain&&(this.oscillatorGain.gain.value=t)}updateNoiseLevel(t){this.noiseGainValue=t,this.noiseGain&&(this.noiseGain.gain.value=t)}updateDetuneValue(t){this.oscillatorDetuneValue=t,this.oscillatorNode&&(this.oscillatorNode.detune.value=t)}generateVocoderBands(t,e,i){const r=1200*Math.log(e/t)/Math.LN2/i,n=Math.pow(2,r/1200);this.vocoderBands=[];let o=t;for(let t=0;t0?t:-t)/32768;for(let e=0;e{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[]}get defaultParameterDescriptors(){return yi.parameterDescriptors}process(t,e){if(this.stopped)return!1;const i=t[0],r=e[0];if(i&&i[0]&&(this.samplesCount+=i[0].length),r){for(let t=0;t{},this.seconds=t,this.initialSeconds=t,this.interval,this.incr=e}start(){this.interval=window.setInterval((()=>this.count()),1e3)}stop(){clearInterval(this.interval)}count(){this.seconds+=this.incr,this.seconds<=0&&this.stop(),this.countCallback&&this.countCallback()}onCount(t){this.countCallback=t}}let _i=class extends be{constructor(t,e){super(),this.recorder=null,this.input=null,this.stream=null,this.alreadyInit=!1,this.timer=null,this.enableAudioFeedback=!1,this.recording=!1,this.deviceList=[],this.constraints={audio:{noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0,sampleRate:{ideal:44100}}},this.sampleRateConfigNotSupported=!1,this.contextManager=t,this.configService=e}init(){return fe(this,void 0,void 0,(function*(){var t;if(this.isRecordingAvailable()){this.sampleRateConfigNotSupported=!navigator.mediaDevices.getSupportedConstraints().sampleRate,this.contextManager&&(this.sampleRateConfigNotSupported?this.contextManager.createNewContext(0):this.contextManager.createNewContextIfNeeded()),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_INIT);try{const t=yield navigator.mediaDevices.getUserMedia(this.constraints);this.contextManager&&this.contextManager.currentContext&&this.contextManager.currentContext.resume(),yield this.setup(t,!1,!1),this.alreadyInit=!0,this.timer=new Ei(0,1),this.timer.onCount((()=>{var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_COUNT_UPDATE)})),this.successCallback()}catch(t){console.error(t);if(t)switch(t.name){case"SecurityError":case"NotAllowedError":this.errorCallback();break;case"NotFoundError":this.notFoundErrorCallback();break;case"NotSupportedError":this.sampleRateConfigNotSupported||(this.sampleRateConfigNotSupported=!0,this.init());break;default:this.unknownErrorCallback()}}navigator.mediaDevices.ondevicechange=()=>this.updateInputList()}}))}successCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_SUCCESS)}errorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_ERROR)}notFoundErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_NOT_FOUND_ERROR)}unknownErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_UNKNOWN_ERROR)}audioFeedback(t){var e;this.contextManager&&this.contextManager.currentContext&&(t?(this.input&&this.input.connect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!0):(this.input&&this.input.connect(this.contextManager.currentContext.destination)&&this.input.disconnect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!1),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.RECORDER_UPDATE_CONSTRAINTS))}getConstraints(){if(this.stream){const t=this.stream.getTracks();if(t&&t.length>0)return t[0].getSettings()}return null}updateConstraints(){var t;const e=this.getConstraints();e&&(this.constraints.audio=Object.assign(this.constraints.audio,e),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_UPDATE_CONSTRAINTS))}resetConstraints(t){return fe(this,void 0,void 0,(function*(){if(this.stream){const e=this.enableAudioFeedback,i=this.recording,r=this.stream.getTracks();if(t&&(this.updateConstraints(),this.constraints.audio=Object.assign(this.constraints.audio,t.audio)),r&&r.length>0)try{yield r[0].applyConstraints(this.constraints.audio);const n=this.getConstraints(),o=t?Object.keys(t.audio)[0]:"";if(this.audioFeedback(!1),this.pause(),!t||n&&n[o]!=t.audio[o]){this.stopStream();const t=yield navigator.mediaDevices.getUserMedia(this.constraints);yield this.setup(t,i,e)}else yield this.setup(null,i,e)}catch(t){this.errorCallback()}}}))}setup(t,e,i){return fe(this,void 0,void 0,(function*(){t&&this.contextManager&&this.contextManager.currentContext&&(this.input=this.contextManager.currentContext.createMediaStreamSource(t),this.stream=t),this.recorder&&this.input&&(yield this.recorder.setup(this.input),e&&(yield this.record())),this.audioFeedback(i),this.updateConstraints(),yield this.updateInputList()}))}setNoiseSuppression(t){this.resetConstraints({audio:{noiseSuppression:t}})}setAutoGain(t){this.resetConstraints({audio:{autoGainControl:t}})}setEchoCancellation(t){this.resetConstraints({audio:{echoCancellation:t}})}updateInputList(){return fe(this,void 0,void 0,(function*(){if(this.deviceList){const t=yield navigator.mediaDevices.enumerateDevices();this.deviceList=[],t.forEach((t=>{"audioinput"==t.kind&&this.deviceList.push(t)}))}}))}changeInput(t,e){e&&(this.constraints.audio.deviceId=t,this.constraints.audio.groupId=e,this.resetConstraints())}record(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.configService&&this.input&&(this.recorder||(this.recorder=new xe({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"audio/wav"}),yield this.recorder.setup(this.input)),this.recorder&&this.recorder.record(),this.timer&&this.timer.start(),this.recording=!0,this.eventEmitter&&this.eventEmitter.emit(exports.EventType.RECORDER_RECORDING))}))}stop(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.recorder&&(this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,this.recorder.getBuffer((t=>{var e;if(this.contextManager&&this.contextManager.currentContext){this.contextManager.currentContext.resume();const i=this.contextManager.currentContext.createBuffer(2,t[0].length,this.contextManager.currentContext.sampleRate);i.getChannelData(0).set(t[0]),i.getChannelData(1).set(t[1]),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.RECORDER_STOPPED,i),this.reset()}})))}))}pause(){var t;this.alreadyInit&&(this.recorder&&this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_PAUSED))}stopStream(){if(this.stream){const t=this.stream.getTracks();for(let e=0,i=t.length;e{const r=e.numberOfChannels,n=t.sampleRate*e.duration+2*t.sampleRate,o=t.createBuffer(r,n,t.sampleRate);for(let t=0;tSi.get(ce.EntryPointFilter))),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.frequencyBooster=200,this.frequencyReduce=200,this.dbBooster=15,this.dbReduce=-2}getNode(t){const e=t.createBiquadFilter();e.type="lowshelf",e.frequency.value=this.frequencyBooster,e.gain.value=this.dbBooster;const i=t.createBiquadFilter();return i.type="highshelf",i.frequency.value=this.frequencyReduce,i.gain.value=this.dbReduce,i.connect(e),{input:i,output:e}}get order(){return 3}get id(){return ge.FILTERS_NAMES.BASS_BOOST}getSettings(){return{frequencyBooster:this.frequencyBooster,frequencyReduce:this.frequencyReduce,dbBooster:this.dbBooster,dbReduce:this.dbReduce}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"frequencyBooster":this.frequencyBooster=parseInt(e);break;case"frequencyReduce":this.frequencyReduce=parseInt(e);break;case"dbBooster":this.dbBooster=parseInt(e);break;case"dbReduce":this.dbReduce=parseInt(e)}}))}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.bits=16,this.normFreq=.9}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.BITCRUSHER}get workletName(){return ge.WORKLET_NAMES.BITCRUSHER}get order(){return 6}get id(){return ge.FILTERS_NAMES.BITCRUSHER}getSettings(){return{bits:this.bits,normFreq:this.normFreq}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"bits":this.bits=parseInt(e);break;case"normFreq":this.normFreq=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.delay=.2,this.gain=.75}getNode(t){const e=t.createDelay(179);e.delayTime.value=this.delay;const i=t.createGain();return i.gain.value=this.gain,i.connect(e),e.connect(i),{input:i,output:e}}get order(){return 7}get id(){return ge.FILTERS_NAMES.ECHO}getAddingTime(){return 5}getSettings(){return{delay:this.delay,gain:this.gain}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"delay":this.delay=parseFloat(e);break;case"gain":this.gain=parseFloat(e)}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.highFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="highpass",e.frequency.value=this.highFrequency,{input:e,output:e}}get order(){return 4}get id(){return ge.FILTERS_NAMES.HIGH_PASS}getSettings(){return{highFrequency:this.highFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"highFrequency"===t)this.highFrequency=parseInt(e)}))}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(),this.preGain=0,this.postGain=0,this.attackTime=0,this.releaseTime=3,this.threshold=-.05,this.lookAheadTime=.1,this.keepCurrentNodeIfPossible=!0,this.enable(),this.setDefaultEnabled(!0)}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.LIMITER}get workletName(){return ge.WORKLET_NAMES.LIMITER}get order(){return 11}get id(){return ge.FILTERS_NAMES.LIMITER}getAddingTime(){return this.lookAheadTime}getSettings(){return{preGain:this.preGain,postGain:this.postGain,attackTime:this.attackTime,releaseTime:this.releaseTime,threshold:this.threshold,lookAheadTime:this.lookAheadTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"preGain":this.preGain=parseFloat(e);break;case"postGain":this.postGain=parseFloat(e);break;case"attackTime":this.attackTime=parseFloat(e);break;case"releaseTime":this.releaseTime=parseFloat(e);break;case"threshold":this.threshold=parseFloat(e);break;case"lookAheadTime":this.lookAheadTime=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.lowFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="lowpass",e.frequency.value=this.lowFrequency,{input:e,output:e}}get order(){return 5}get id(){return ge.FILTERS_NAMES.LOW_PASS}getSettings(){return{lowFrequency:this.lowFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"lowFrequency"===t)this.lowFrequency=parseInt(e)}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT,this.reverbCustomEnvironmentAddTime=5,this.customEnvironment=null}getNode(t){const e=t.createConvolver();this.reverbEnvironment&&("custom"!=this.reverbEnvironment.url||this.customEnvironment)||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT);const i=this.getReverbBuffer(t);return i&&(e.buffer=i),{input:e,output:e}}getReverbBuffer(t){if("custom"==this.reverbEnvironment.url&&this.customEnvironment){if(this.customEnvironment.sampleRate===t.sampleRate)return this.customEnvironment;this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT}else if(this.bufferFetcherService)return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url)}get order(){return 9}get id(){return ge.FILTERS_NAMES.REVERB}getAddingTime(){const t=this.getSettings();if(t&&t.reverbEnvironment){if("custom"==t.reverbEnvironment.value)return this.reverbCustomEnvironmentAddTime;if(t.reverbEnvironment.additionalData)return t.reverbEnvironment.additionalData.addDuration}return 0}getSettings(){var t;return this.reverbEnvironment?{reverbEnvironment:{name:this.reverbEnvironment.name,value:this.reverbEnvironment.url,additionalData:{size:this.reverbEnvironment.size,link:this.reverbEnvironment.link,addDuration:this.reverbEnvironment.addDuration}},downloadedBuffers:null===(t=this.bufferFetcherService)||void 0===t?void 0:t.getDownloadedBuffersList(),hasCustomEnvironment:!!this.customEnvironment,reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}:{reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){var i;if("reverbEnvironment"==t){const t=e;if(t){const e=t.value;try{"custom"!=e&&(yield null===(i=this.bufferFetcherService)||void 0===i?void 0:i.fetchBuffer(e)),t.additionalData?this.reverbEnvironment={name:t.name,url:e,size:t.additionalData.size,addDuration:t.additionalData.addDuration,link:t.additionalData.link}:this.reverbEnvironment={name:t.name,url:e,size:0,addDuration:0,link:""}}catch(t){}}}else"reverbCustomEnvironmentAddTime"==t?Se.isSettingValueValid(e)&&(this.reverbCustomEnvironmentAddTime=parseInt(e)):"reverbCustomEnvironmentFile"==t&&this.bufferDecoderService&&e&&(this.customEnvironment=yield this.bufferDecoderService.decodeBufferFromFile(e),this.customEnvironment||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT))}))}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){var t;const e=this.getSettings();if(e){const i=null===(t=e.reverbEnvironment)||void 0===t?void 0:t.value;if(i&&"custom"!==i&&this.bufferFetcherService)return yield this.bufferFetcherService.fetchBuffer(i),!0}return!1}))}}),Si.bind(ce.Filters).to(class extends He{getNode(t){const e=t.createBiquadFilter();e.type="lowpass",e.frequency.value=2e3;const i=t.createBiquadFilter();i.type="lowpass",i.frequency.value=2e3;const r=t.createBiquadFilter();r.type="highpass",r.frequency.value=500;const n=t.createBiquadFilter();return n.type="highpass",n.frequency.value=500,e.connect(i),i.connect(r),r.connect(n),{input:e,output:n}}get order(){return 7}get id(){return ge.FILTERS_NAMES.TELEPHONIZER}getSettings(){return{}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.currentVocoder=null,this.modulatorGainValue=1,this.carrierSampleGainValue=0,this.oscillatorGainValue=1,this.noiseGainValue=.2,this.oscillatorDetuneValue=0}getNode(t){var e;const i=null===(e=this.bufferFetcherService)||void 0===e?void 0:e.getAudioBuffer(ge.VOCODER_MODULATOR);this.currentVocoder=new mi(t,i),this.currentVocoder.init(),this.applyCurrentSettingsToVocoder();const{modulatorGain:r,outputGain:n}=this.currentVocoder.getNodes();return{input:r,output:n}}getSettings(){return{modulatorGainValue:this.modulatorGainValue,carrierSampleGainValue:this.carrierSampleGainValue,oscillatorGainValue:this.oscillatorGainValue,noiseGainValue:this.noiseGainValue,oscillatorDetuneValue:this.oscillatorDetuneValue}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"modulatorGainValue":this.modulatorGainValue=parseFloat(e);break;case"carrierSampleGainValue":this.carrierSampleGainValue=parseFloat(e);break;case"oscillatorGainValue":this.oscillatorGainValue=parseFloat(e);break;case"noiseGainValue":this.noiseGainValue=parseFloat(e);break;case"oscillatorDetuneValue":this.oscillatorDetuneValue=parseFloat(e)}this.applyCurrentSettingsToVocoder()}}))}applyCurrentSettingsToVocoder(){this.currentVocoder&&(this.currentVocoder.updateModGain(this.modulatorGainValue),this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue),this.currentVocoder.updateSynthLevel(this.oscillatorGainValue),this.currentVocoder.updateNoiseLevel(this.noiseGainValue),this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue))}get order(){return 1}get id(){return ge.FILTERS_NAMES.VOCODER}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.currentTime=0,this.lastSampleCount=0,this.samplePerSecond=0,this.currentTimeSamplesPerSecond=0}receiveEvent(t){const e=performance.now(),i=t.data.samplesCount;"update"===t.data.command&&this.calculatePercentageProcessed(e,i),this.calculateRemainingTimeProcessing(e,i)}calculatePercentageProcessed(t,e){0===this.currentTime&&(this.currentTime=t);const i=t-this.currentTime,r=e/this._totalSamples;this.eventEmitter&&i>=ge.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL&&(this.eventEmitter.emit(exports.EventType.UPDATE_AUDIO_TREATMENT_PERCENT,100*r),this.currentTime=t)}calculateRemainingTimeProcessing(t,e){0===this.currentTimeSamplesPerSecond&&(this.currentTimeSamplesPerSecond=t);const i=t-this.currentTimeSamplesPerSecond,r=this._totalSamples-e;if(this.eventEmitter&&r<=0)this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,0);else if(this.eventEmitter&&i>=1e3){this.calculateSmoothedSamplePerSecond(i,e);const n=r/this.samplePerSecond;this.currentTimeSamplesPerSecond=t,this.lastSampleCount=e,isNaN(n)||!isFinite(n)?this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,-1):this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,n)}}calculateSmoothedSamplePerSecond(t,e){if(t>0){const i=(e-this.lastSampleCount)/(t/1e3);this.samplePerSecond=ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR*i+(1-ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR)*this.samplePerSecond}}get workletName(){return ge.WORKLET_NAMES.PASSTHROUGH}get workletPath(){return ge.WORKLET_PATHS.PASSTHROUGH}get order(){return 10}get id(){return ge.FILTERS_NAMES.PASSTHROUGH}set totalSamples(t){super.totalSamples=t,this.currentTime=0,this.currentTimeSamplesPerSecond=0,this.samplePerSecond=0,this.lastSampleCount=0}getSettings(){return{}}isEnabled(){return!0}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Si.bind(ce.EventEmitter).to(me),Si.bind(ce.AudioContextManager).to(Ee),Si.bind(ce.AudioEditor).to(we),Si.bind(ce.AudioProcessor).to(Te),Si.bind(ce.BufferManager).to(Me),Si.bind(ce.FilterManager).to(Pe),Si.bind(ce.RendererManager).to(Ne),Si.bind(ce.SaveBufferManager).to(ke),Si.bind(ce.BufferPlayer).to(Ge),Si.bind(ce.BufferFetcherService).to(Ve),Si.bind(ce.BufferDecoderService).to(je),Si.bind(ce.VoiceRecorder).to(bi);let Ai=class{constructor(){this.mapConfig=new Map}getConfig(t){return this.mapConfig.get(t)}setConfig(t,e){this.mapConfig.set(t,e)}isCompatibilityModeEnabled(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED)}isCompatibilityModeChecked(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED)}isAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_AUDIO_WORKLET}isSoundtouchAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_SOUNDTOUCH_AUDIO_WORKLET}getBufferSize(){const t=this.getConfig(ge.PREFERENCES_KEYS.BUFFER_SIZE);return null!=t?parseInt(t):ge.DEFAULT_BUFFER_SIZE}getSampleRate(){const t=this.getConfig(ge.PREFERENCES_KEYS.SAMPLE_RATE);return null!=t?parseInt(t):ge.DEFAULT_SAMPLE_RATE}getBitrateMP3(){const t=this.getConfig(ge.PREFERENCES_KEYS.BITRATE_MP3);return null!=t?parseInt(t):ge.DEFAULT_MP3_BITRATE}enableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"true")}disableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"false")}getWorkletBasePath(){return""}getWorkerBasePath(){return""}getSoundBasePath(){return""}isInitialRenderingDisabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);return null!=t?"true"==t:ge.DISABLE_INITIAL_RENDERING}};Ai=he([oe()],Ai);var wi=Ai;class Ri{static createAudioEditor(t,e){return Ri.ready||(t?Si.bind(ce.ConfigService).toDynamicValue((()=>t)):(Si.bind(ce.ConfigService).to(wi),console.warn("No ConfigService provided. Using default generic implementation.")),Si.bind(ce.AudioBuffersToFetch).toConstantValue(e||[]),Ri.ready=!0),Si.get(ce.AudioEditor)}static createVoiceRecorder(){return Si.get(ce.VoiceRecorder)}static getAudioEditorInstance(){return Si.get(ce.AudioEditor)}static getAudioPlayerInstance(){return Si.get(ce.BufferPlayer)}static getAudioRecorderInstance(){return Si.get(ce.VoiceRecorder)}static getEventEmitterInstance(){return Si.get(ce.EventEmitter)}static getConfigServiceInstance(){return Si.get(ce.ConfigService)}}Ri.ready=!1,exports.AbstractAudioElement=be,exports.AbstractAudioFilter=He,exports.AbstractAudioFilterWorklet=Ze,exports.AbstractAudioRenderer=qe,exports.AudioEditor=we,exports.BufferPlayer=Ge,exports.Constants=ge,exports.EventEmitter=me,exports.GenericConfigService=wi,exports.SoundStudioFactory=Ri,exports.UtilFunctions=Se,exports.VoiceRecorder=bi,exports.audioEditorContainer=Si; +***************************************************************************** */!function(t){!function(i){var r="object"==typeof globalThis?globalThis:"object"==typeof e?e:"object"==typeof self?self:"object"==typeof this?this:function(){try{return Function("return this;")()}catch(t){}}()||function(){try{return(0,eval)("(function() { return this; })()")}catch(t){}}(),n=o(t);function o(t,e){return function(i,r){Object.defineProperty(t,i,{configurable:!0,writable:!0,value:r}),e&&e(i,r)}}void 0!==r.Reflect&&(n=o(r.Reflect,n)),function(t,e){var i=Object.prototype.hasOwnProperty,r="function"==typeof Symbol,n=r&&void 0!==Symbol.toPrimitive?Symbol.toPrimitive:"@@toPrimitive",o=r&&void 0!==Symbol.iterator?Symbol.iterator:"@@iterator",s="function"==typeof Object.create,a={__proto__:[]}instanceof Array,u=!s&&!a,c={create:s?function(){return lt(Object.create(null))}:a?function(){return lt({__proto__:null})}:function(){return lt({})},has:u?function(t,e){return i.call(t,e)}:function(t,e){return e in t},get:u?function(t,e){return i.call(t,e)?t[e]:void 0}:function(t,e){return t[e]}},h=Object.getPrototypeOf(Function),l="function"==typeof Map&&"function"==typeof Map.prototype.entries?Map:ut(),d="function"==typeof Set&&"function"==typeof Set.prototype.entries?Set:ct(),f="function"==typeof WeakMap?WeakMap:ht(),p=r?Symbol.for("@reflect-metadata:registry"):void 0,g=nt(),v=ot(g);function m(t,e,i,r){if(k(i)){if(!K(t))throw new TypeError;if(!z(e))throw new TypeError;return C(t,e)}if(!K(t))throw new TypeError;if(!W(e))throw new TypeError;if(!W(r)&&!k(r)&&!L(r))throw new TypeError;return L(r)&&(r=void 0),M(t,e,i=H(i),r)}function y(t,e){function i(i,r){if(!W(i))throw new TypeError;if(!k(r)&&!Q(r))throw new TypeError;O(t,e,i,r)}return i}function E(t,e,i,r){if(!W(i))throw new TypeError;return k(r)||(r=H(r)),O(t,e,i,r)}function _(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),I(t,e,i)}function b(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),P(t,e,i)}function S(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),B(t,e,i)}function A(t,e,i){if(!W(e))throw new TypeError;return k(i)||(i=H(i)),N(t,e,i)}function w(t,e){if(!W(t))throw new TypeError;return k(e)||(e=H(e)),D(t,e)}function R(t,e){if(!W(t))throw new TypeError;return k(e)||(e=H(e)),x(t,e)}function T(t,e,i){if(!W(e))throw new TypeError;if(k(i)||(i=H(i)),!W(e))throw new TypeError;k(i)||(i=H(i));var r=at(e,i,!1);return!k(r)&&r.OrdinaryDeleteMetadata(t,e,i)}function C(t,e){for(var i=t.length-1;i>=0;--i){var r=(0,t[i])(e);if(!k(r)&&!L(r)){if(!z(r))throw new TypeError;e=r}}return e}function M(t,e,i,r){for(var n=t.length-1;n>=0;--n){var o=(0,t[n])(e,i,r);if(!k(o)&&!L(o)){if(!W(o))throw new TypeError;r=o}}return r}function I(t,e,i){if(P(t,e,i))return!0;var r=it(e);return!L(r)&&I(t,r,i)}function P(t,e,i){var r=at(e,i,!1);return!k(r)&&j(r.OrdinaryHasOwnMetadata(t,e,i))}function B(t,e,i){if(P(t,e,i))return N(t,e,i);var r=it(e);return L(r)?void 0:B(t,r,i)}function N(t,e,i){var r=at(e,i,!1);if(!k(r))return r.OrdinaryGetOwnMetadata(t,e,i)}function O(t,e,i,r){at(i,r,!0).OrdinaryDefineOwnMetadata(t,e,i,r)}function D(t,e){var i=x(t,e),r=it(t);if(null===r)return i;var n=D(r,e);if(n.length<=0)return i;if(i.length<=0)return n;for(var o=new d,s=[],a=0,u=i;a=0&&t=this._keys.length?(this._index=-1,this._keys=e,this._values=e):this._index++,{value:i,done:!1}}return{value:void 0,done:!0}},t.prototype.throw=function(t){throw this._index>=0&&(this._index=-1,this._keys=e,this._values=e),t},t.prototype.return=function(t){return this._index>=0&&(this._index=-1,this._keys=e,this._values=e),{value:t,done:!0}},t}();return function(){function e(){this._keys=[],this._values=[],this._cacheKey=t,this._cacheIndex=-2}return Object.defineProperty(e.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),e.prototype.has=function(t){return this._find(t,!1)>=0},e.prototype.get=function(t){var e=this._find(t,!1);return e>=0?this._values[e]:void 0},e.prototype.set=function(t,e){var i=this._find(t,!0);return this._values[i]=e,this},e.prototype.delete=function(e){var i=this._find(e,!1);if(i>=0){for(var r=this._keys.length,n=i+1;n= than the number of constructor arguments of its base class."},P=function(t,e){return"@postConstruct error in class "+t+": "+e},B=function(t,e){return"@preDestroy error in class "+t+": "+e},N=function(t,e){return"onDeactivation() error in class "+t+": "+e},O="Maximum call stack size exceeded",D=function(){function t(){}return t.prototype.getConstructorMetadata=function(t){return{compilerGeneratedMetadata:Reflect.getMetadata(h,t),userGeneratedMetadata:Reflect.getMetadata(u,t)||{}}},t.prototype.getPropertiesMetadata=function(t){return Reflect.getMetadata(c,t)||[]},t}(),x={MultipleBindingsAvailable:2,NoBindingsAvailable:0,OnlyOneBindingAvailable:1};function F(t){return t instanceof RangeError||t.message===O}function k(t){return"function"==typeof t?t.name:"symbol"==typeof t?t.toString():t}function L(t,e,i){var r="",n=i(t,e);return 0!==n.length&&(r="\nRegistered bindings:",n.forEach((function(t){var e="Object";null!==t.implementationType&&(e=V(t.implementationType)),r=r+"\n "+e,t.constraint.metaData&&(r=r+" - "+t.constraint.metaData)}))),r}function G(t,e){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===e||G(t.parentRequest,e))}function W(t){t.childRequests.forEach((function(t){if(G(t,t.serviceIdentifier)){var e=function(t){var e=function t(e,i){void 0===i&&(i=[]);var r=k(e.serviceIdentifier);return i.push(r),null!==e.parentRequest?t(e.parentRequest,i):i}(t);return e.reverse().join(" --\x3e ")}(t);throw new Error(C+" "+e)}W(t)}))}function V(t){if(t.name)return t.name;var e=t.toString(),i=e.match(/^function\s*([^\s(]+)/);return i?i[1]:"Anonymous function: "+e}var U=function(){function t(t){this.id=y(),this.container=t}return t.prototype.addPlan=function(t){this.plan=t},t.prototype.setCurrentRequest=function(t){this.currentRequest=t},t}(),j=function(){function t(t,e){this.key=t,this.value=e}return t.prototype.toString=function(){return this.key===i?"named: "+String(this.value).toString()+" ":"tagged: { key:"+this.key.toString()+", value: "+String(this.value)+" }"},t}(),q=function(t,e){this.parentContext=t,this.rootRequest=e},H=function(){function t(t){this._cb=t}return t.prototype.unwrap=function(){return this._cb()},t}(),K=function(){function t(t){this.str=t}return t.prototype.startsWith=function(t){return 0===this.str.indexOf(t)},t.prototype.endsWith=function(t){var e,i=t.split("").reverse().join("");return e=this.str.split("").reverse().join(""),this.startsWith.call({str:e},i)},t.prototype.contains=function(t){return-1!==this.str.indexOf(t)},t.prototype.equals=function(t){return this.str===t},t.prototype.value=function(){return this.str},t}(),Y=function(){function t(t,e,r,n){this.id=y(),this.type=t,this.serviceIdentifier=r;var o="symbol"==typeof e?e.toString().slice(7,-1):e;this.name=new K(o||""),this.identifier=e,this.metadata=new Array;var s=null;"string"==typeof n?s=new j(i,n):n instanceof j&&(s=n),null!==s&&this.metadata.push(s)}return t.prototype.hasTag=function(t){for(var e=0,i=this.metadata;e0,c=a.length>i.length,h=function(t,e,i,r,n){for(var o=[],s=0;s0?a:J(t,i)}return 0}function tt(t){var e={};return t.forEach((function(t){e[t.key.toString()]=t.value})),{inject:e[s],multiInject:e[a],targetName:e[r],unmanaged:e[n]}}var et=function(){function t(t,e,i,r,n){this.id=y(),this.serviceIdentifier=t,this.parentContext=e,this.parentRequest=i,this.target=n,this.childRequests=[],this.bindings=Array.isArray(r)?r:[r],this.requestScope=null===i?new Map:null}return t.prototype.addChildRequest=function(e,i,r){var n=new t(e,this.parentContext,this,i,r);return this.childRequests.push(n),n},t}();function it(t){return t._bindingDictionary}function rt(t,e,i,r,n){var o=ot(i.container,n.serviceIdentifier),s=[];return o.length===x.NoBindingsAvailable&&i.container.options.autoBindInjectable&&"function"==typeof n.serviceIdentifier&&t.getConstructorMetadata(n.serviceIdentifier).compilerGeneratedMetadata&&(i.container.bind(n.serviceIdentifier).toSelf(),o=ot(i.container,n.serviceIdentifier)),s=e?o:o.filter((function(t){var e=new et(t.serviceIdentifier,i,r,t,n);return t.constraint(e)})),function(t,e,i,r){switch(e.length){case x.NoBindingsAvailable:if(i.isOptional())return e;var n=k(t),o=w;throw o+=function(t,e){if(e.isTagged()||e.isNamed()){var i="",r=e.getNamedTag(),n=e.getCustomTags();return null!==r&&(i+=r.toString()+"\n"),null!==n&&n.forEach((function(t){i+=t.toString()+"\n"}))," "+t+"\n "+t+" - "+i}return" "+t}(n,i),o+=L(r,n,ot),new Error(o);case x.OnlyOneBindingAvailable:return e;case x.MultipleBindingsAvailable:default:if(i.isArray())return e;n=k(t),o=A+" "+n;throw o+=L(r,n,ot),new Error(o)}}(n.serviceIdentifier,s,n,i.container),s}function nt(t,e,i,r,n,o){var s,a;if(null===n){s=rt(t,e,r,null,o),a=new et(i,r,null,s,o);var u=new q(r,a);r.addPlan(u)}else s=rt(t,e,r,n,o),a=n.addChildRequest(o.serviceIdentifier,s,o);s.forEach((function(e){var i=null;if(o.isArray())i=a.addChildRequest(e.serviceIdentifier,e,o);else{if(e.cache)return;i=a}if(e.type===g.Instance&&null!==e.implementationType){var n=function(t,e){return Q(t,V(e),e,!1)}(t,e.implementationType);if(!r.container.options.skipBaseClassChecks){var s=J(t,e.implementationType);if(n.length0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0){var n=function(t,e){return t.reduce((function(t,i){var r=e(i);return i.target.type===v.ConstructorArgument?t.constructorInjections.push(r):(t.propertyRequests.push(i),t.propertyInjections.push(r)),t.isAsync||(t.isAsync=ut(r)),t}),{constructorInjections:[],propertyInjections:[],propertyRequests:[],isAsync:!1})}(e,i),o=gt(gt({},n),{constr:t});r=n.isAsync?function(t){return vt(this,void 0,void 0,(function(){var e,i;return mt(this,(function(r){switch(r.label){case 0:return[4,bt(t.constructorInjections)];case 1:return e=r.sent(),[4,bt(t.propertyInjections)];case 2:return i=r.sent(),[2,_t(gt(gt({},t),{constructorInjections:e,propertyInjections:i}))]}}))}))}(o):_t(o)}else r=new t;return r}function _t(t){var e,i=new((e=t.constr).bind.apply(e,yt([void 0],t.constructorInjections,!1)));return t.propertyRequests.forEach((function(e,r){var n=e.target.identifier,o=t.propertyInjections[r];e.target.isOptional()&&void 0===o||(i[n]=o)})),i}function bt(t){return vt(this,void 0,void 0,(function(){var e,i,r,n;return mt(this,(function(o){for(e=[],i=0,r=t;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0?this._map.set(t,e):this._map.delete(t)},t}(),Qt=function(){function t(){this._map=new Map}return t.prototype.remove=function(t){if(this._map.has(t)){var e=this._map.get(t);return this._map.delete(t),e}return this._getEmptyHandlersStore()},t.prototype.addDeactivation=function(t,e,i){this._getModuleActivationHandlers(t).onDeactivations.add(e,i)},t.prototype.addActivation=function(t,e,i){this._getModuleActivationHandlers(t).onActivations.add(e,i)},t.prototype.clone=function(){var e=new t;return this._map.forEach((function(t,i){e._map.set(i,{onActivations:t.onActivations.clone(),onDeactivations:t.onDeactivations.clone()})})),e},t.prototype._getModuleActivationHandlers=function(t){var e=this._map.get(t);return void 0===e&&(e=this._getEmptyHandlersStore(),this._map.set(t,e)),e},t.prototype._getEmptyHandlersStore=function(){return{onActivations:new zt,onDeactivations:new zt}},t}(),Zt=function(){return Zt=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]=0;a--)(n=t[a])&&(s=(o<3?n(s):o>3?n(e,i,s):n(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s}function le(t,e){return function(i,r){e(i,r,t)}}function de(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function fe(t,e,i,r){return new(i||(i=Promise))((function(n,o){function s(t){try{u(r.next(t))}catch(t){o(t)}}function a(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))}var pe;"function"==typeof SuppressedError&&SuppressedError,exports.EventType=void 0,(pe=exports.EventType||(exports.EventType={})).LOADING_BUFFERS="loadingBuffers",pe.LOADING_BUFFERS_ERROR="loadingBuffersError",pe.FETCHING_BUFFERS="fetchingBuffers",pe.FETCHING_BUFFERS_ERROR="fetchingBuffersError",pe.FINISHED_FETCHING_BUFFERS="finishedFetchingBuffers",pe.LOADED_BUFFERS="loadedBuffers",pe.COMPATIBILITY_MODE_AUTO_ENABLED="compatibilityModeAutoEnabled",pe.RENDERING_AUDIO_PROBLEM_DETECTED="renderingAudioProblemDetected",pe.AUDIO_RENDERING_FINISHED="audioRenderingFinished",pe.OFFLINE_AUDIO_RENDERING_FINISHED="offlineAudioRenderingFinished",pe.PLAYING_STOPPED="playingStopped",pe.PLAYING_STARTED="playingStarted",pe.PLAYING_FINISHED="playingFinished",pe.PLAYING_UPDATE="playingUpdate",pe.RECORDER_INIT="recorderInit",pe.RECORDER_SUCCESS="recorderSuccess",pe.RECORDER_ERROR="recorderError",pe.RECORDER_UPDATE_CONSTRAINTS="recorderUpdateConstraints",pe.RECORDER_RECORDING="recorderRecording",pe.RECORDER_STOPPED="recorderStopped",pe.RECORDER_PAUSED="recorderPaused",pe.RECORDER_RESETED="recorderReseted",pe.RECORDER_COUNT_UPDATE="recorderCountUpdate",pe.SAMPLE_RATE_CHANGED="sampleRateChanged",pe.DECODING_AUDIO_FILE="decodingAudioFile",pe.DECODED_AUDIO_FILE="decodedAudioFile",pe.ERROR_DECODING_AUDIO_FILE="errorDecodingAudioFile",pe.RECORDER_NOT_FOUND_ERROR="recorderNotFoundError",pe.RECORDER_UNKNOWN_ERROR="recorderUnknownError",pe.UPDATE_AUDIO_TREATMENT_PERCENT="updateAudioTreatmentPercent",pe.UPDATE_REMAINING_TIME_ESTIMATED="updateRemainingTimeEstimated",pe.CANCELLED_AND_LOADED_INITIAL_AUDIO="cancelledAndLoadedInitialAudio",pe.CANCELLING_AUDIO_PROCESSING="cancellingAudioProcessing";const ge={AUDIO_EDITOR:"audioEditor",VOICE_RECORDER:"voiceRecorder",BUFFER_PLAYER:"bufferPlayer",AUDIO_CONTEXT_MANAGER:"audioContextManager",AUDIO_PROCESSOR:"audioProcessor",BUFFER_MANAGER:"bufferManager",FILTER_MANAGER:"filterManager",RENDERER_MANAGER:"rendererManager",SAVE_BUFFER_MANAGER:"saveBufferManager",EXPORT_WAV_COMMAND:"exportWAV",EXPORT_MP3_COMMAND:"exportMP3",AUDIO_WAV:"audio/wav",AUDIO_MP3:"audio/mp3",RECORD_COMMAND:"record",INIT_COMMAND:"init",FILTERS_NAMES:{REVERB:"reverb",ECHO:"echo",BASS_BOOST:"bassboost",BITCRUSHER:"bitcrusher",HIGH_PASS:"highpass",LIMITER:"limiter",LOW_PASS:"lowpass",PASSTHROUGH:"passthroughfilter",RETURN_AUDIO:"returnAudio",SOUNDTOUCH:"soundtouch",TELEPHONIZER:"telephonizer",VOCODER:"vocoder"},WORKLET_PATHS:{BITCRUSHER:"BitCrusher.worklet.js",LIMITER:"Limiter.worklet.js",SOUNDTOUCH:"Soundtouch.worklet.js",RECORDER_WORKLET:"RecorderWorklet.js",PASSTHROUGH:"Passthrough.worklet.js"},WORKLET_NAMES:{BITCRUSHER:"bitcrusher-processor",LIMITER:"limiter-processor",SOUNDTOUCH:"soundtouch-worklet",RECORDER_WORKLET:"recorder-worklet",PASSTHROUGH:"passthrough"},PREFERENCES_KEYS:{COMPATIBILITY_MODE_ENABLED:"compatibility-mode-enabled",COMPATIBILITY_MODE_CHECKED:"compatibility-mode-checked",ENABLE_AUDIO_WORKLET:"enable-audio-worklet",ENABLE_SOUNDTOUCH_AUDIO_WORKLET:"enable-soundtouch-audio-worklet",BUFFER_SIZE:"buffer-size",SAMPLE_RATE:"sample-rate",DISABLE_INITIAL_RENDERING:"disable-initial-rendering",BITRATE_MP3:"bitrate-mp3"},ENABLE_SOUNDTOUCH_AUDIO_WORKLET:!0,ENABLE_AUDIO_WORKLET:!0,ENABLE_RECORDER_AUDIO_WORKLET:!0,SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE:16384,DEFAULT_REVERB_ENVIRONMENT:{name:"Medium Damping Cave E002 M2S",url:"impulse_response.wav",size:1350278,addDuration:4,link:"http://www.cksde.com/p_6_250.htm"},VOCODER_MODULATOR:"modulator.mp3",DEFAULT_BUFFER_SIZE:0,VALID_BUFFER_SIZE:[0,256,512,1024,2048,4096,8192,16384],VALID_MP3_BITRATES:[32,64,96,128,160,256,320],DEFAULT_SAMPLE_RATE:0,VALID_SAMPLE_RATES:[0,8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,176400,192e3],TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL:100,TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR:.9,DISABLE_INITIAL_RENDERING:!0,DEFAULT_SAVE_FORMAT:"wav",DEFAULT_MP3_BITRATE:320};let ve=class{constructor(){this.listeners={},this.listeners={}}on(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)}emit(t,e){this.listeners[t]&&this.listeners[t].forEach((t=>{t(e)}))}off(t,e){this.listeners[t]&&(this.listeners[t]=this.listeners[t].filter((t=>t!==e)))}};ve=he([oe(),de("design:paramtypes",[])],ve);var me=ve;let ye=class{constructor(t,e){this.previousSampleRate=ge.DEFAULT_SAMPLE_RATE,this.eventEmitter=t||new me,this.configService=e,this.setup()}setup(){this.configService&&(this.previousSampleRate=this.configService.getSampleRate(),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.SAMPLE_RATE_CHANGED,this.previousSampleRate)),this.currentContext||this.createNewContext(this.previousSampleRate)}createNewContextIfNeeded(t){if(this.configService&&this.configService.isCompatibilityModeEnabled()&&t){if(this.currentSampleRate!=t.sampleRate)return this.createNewContext(t.sampleRate),this.previousSampleRate=t.sampleRate,!0}else{let t=ge.DEFAULT_SAMPLE_RATE;if(this.configService&&(t=this.configService.getSampleRate()),t!=this.previousSampleRate)return this.createNewContext(t),this.previousSampleRate=t,!0}return!1}createNewContext(t){this._currentContext&&(this.oldAudioContext=this._currentContext,this.destroyOldContext());const e={latencyHint:"interactive"};0!=t&&(e.sampleRate=t),this._currentContext=new AudioContext(e),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.SAMPLE_RATE_CHANGED,this.currentSampleRate)}destroyOldContext(){this.oldAudioContext&&(this.oldAudioContext.close(),this.oldAudioContext=null)}get currentSampleRate(){return this.currentContext?this.currentContext.sampleRate:0}get currentContext(){return this._currentContext}};ye=he([oe(),le(0,ae(ce.EventEmitter)),le(1,ae(ce.ConfigService)),de("design:paramtypes",[Object,Object])],ye);var Ee=ye;let _e=class{constructor(){this.enabled=!1,this.defaultEnabled=!1,this.bufferFetcherService=null,this.bufferDecoderService=null,this.configService=null,this.eventEmitter=null}isEnabled(){return this.enabled}isDefaultEnabled(){return this.defaultEnabled}setDefaultEnabled(t){this.defaultEnabled=t}setEnabled(t){this.enabled=t}enable(){this.setEnabled(!0)}disable(){this.setEnabled(!1)}toggle(){this.setEnabled(!this.isEnabled())}injectDependencies(t,e,i,r){this.bufferFetcherService=t,this.bufferDecoderService=e,this.configService=i,this.eventEmitter=r}};he([ae(ce.BufferFetcherService),de("design:type",Object)],_e.prototype,"bufferFetcherService",void 0),he([ae(ce.BufferDecoderService),de("design:type",Object)],_e.prototype,"bufferDecoderService",void 0),he([ae(ce.ConfigService),de("design:type",Object)],_e.prototype,"configService",void 0),he([ae(ce.EventEmitter),de("design:type",Object)],_e.prototype,"eventEmitter",void 0),_e=he([oe()],_e);var be=_e;const Se={calcAudioDuration:(t,e)=>{if(t){let i=t.duration+1;return e&&(i/=e),i}return 0},loadAudioBuffer:(t,e)=>fe(void 0,void 0,void 0,(function*(){const i=yield Se.readAsArrayBufferPromisified(e),r=yield t.decodeAudioData(i);return Se.decodeBuffer(t,r)})),readAsArrayBufferPromisified:t=>new Promise(((e,i)=>{const r=new FileReader;r.onload=t=>{var r;const n=null===(r=null==t?void 0:t.target)||void 0===r?void 0:r.result;n instanceof ArrayBuffer?e(n):i()},t&&r.readAsArrayBuffer(t)})),decodeBuffer:(t,e)=>{if(1==e.numberOfChannels){t.resume();const i=e.duration,r=t.sampleRate,n=t.createBuffer(2,r*i+2*r,r),o=e.getChannelData(0),s=n.getChannelData(0),a=n.getChannelData(1);for(let t=0;t{const e=[];for(let i=0;i{const i=new Float32Array(e);for(let r=0;rt.getChannelData(e).reduce(((t,e)=>t+e),0),sumAudioBuffer(t){let e=0;for(let i=0;ivoid 0!==t&&void 0!==t.audioWorklet,isSettingValueValid:t=>!(void 0===t||isNaN(Number(t))||"string"==typeof t&&""===t.trim()),calculateAudioDuration(t,e,i){if(t&&e){return this.calcAudioDuration(t,i)+e.getAddingTime()}return 0},resetAudioRenderingProgress(t){t&&(t.emit(exports.EventType.UPDATE_AUDIO_TREATMENT_PERCENT,0),t.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,-1))},forceDownload(t,e){const i=window.document.createElement("a"),r=URL.createObjectURL(t);window.document.body.appendChild(i),i.href=r,i.download=e||"output.wav",i.click(),URL.revokeObjectURL(r)}};let Ae=class extends be{constructor(t,e,i,r,n,o,s){super(),this.principalBuffer=null,this.filterManager=t,this.rendererManager=e,this.contextManager=i,this.saveBufferManager=r,this.audioProcessor=n,this.bufferManager=o,this.bufferPlayer=s,this.setup()}setup(){this.bufferPlayer&&(this.bufferPlayer.onBeforePlaying((()=>fe(this,void 0,void 0,(function*(){this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager&&this.contextManager.currentContext&&this.audioProcessor&&(yield this.audioProcessor.setupOutput(this.principalBuffer,this.contextManager.currentContext))})))),this.bufferPlayer.on(exports.EventType.PLAYING_FINISHED,(()=>{this.bufferPlayer&&this.bufferPlayer.loop&&this.bufferPlayer.start()})))}addFilters(...t){this.filterManager&&this.filterManager.addFilters(...t)}addRenderers(...t){this.rendererManager&&this.rendererManager.addRenderers(...t)}get currentSampleRate(){return this.contextManager?this.contextManager.currentSampleRate:0}get defaultDeviceSampleRate(){const t=new AudioContext;let e=0;return t&&(e=t.sampleRate,t.close()),e}loadBufferFromFile(t){return fe(this,void 0,void 0,(function*(){if(this.principalBuffer=null,this.audioProcessor&&(yield this.audioProcessor.prepareContext(this.principalBuffer)),!(this.contextManager&&this.contextManager.currentContext&&this.bufferDecoderService&&this.audioProcessor))throw new Error("Audio Context is not ready!");if(this.principalBuffer=yield this.bufferDecoderService.decodeBufferFromFile(t),this.audioProcessor.initialRenderingDone=!1,!this.principalBuffer)throw new Error("Error decoding audio file");this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),Se.resetAudioRenderingProgress(this.eventEmitter)}))}loadBuffer(t){this.principalBuffer=t,this.audioProcessor&&(this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),this.audioProcessor.initialRenderingDone=!1)}getOutputBuffer(){return this.audioProcessor?this.audioProcessor.renderedBuffer:null}renderAudio(){return fe(this,void 0,void 0,(function*(){return!!this.audioProcessor&&(yield this.audioProcessor.renderAudio(this.principalBuffer))}))}isAudioWorkletAvailable(){return!(!this.contextManager||!this.contextManager.currentContext)&&Se.isAudioWorkletCompatible(this.contextManager.currentContext)}getFiltersState(){return this.filterManager&&this.rendererManager?Object.assign(Object.assign({},this.filterManager.getFiltersState()),this.rendererManager.getRenderersState()):{}}getFiltersSettings(){return this.filterManager?this.filterManager.getFiltersSettings():new Map}reconnectNodesIfNeeded(){return fe(this,void 0,void 0,(function*(){if(this.contextManager&&this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager.currentContext&&this.principalBuffer&&this.filterManager&&this.filterManager.entrypointFilter){yield this.filterManager.connectNodes(this.contextManager.currentContext,this.principalBuffer,!0,this.bufferPlayer.compatibilityMode);const t=this.filterManager.entrypointFilter.getSpeed();this.bufferPlayer.speedAudio=t,this.bufferPlayer.duration=Se.calculateAudioDuration(this.principalBuffer,this.filterManager,t)*t}}))}toggleFilter(t){this.rendererManager&&this.rendererManager.toggleRenderer(t),this.filterManager&&(this.filterManager.toggleFilter(t),this.reconnectNodesIfNeeded())}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.changeFilterSettings(t,e),yield this.reconnectNodesIfNeeded())}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.resetFilterSettings(t),yield this.reconnectNodesIfNeeded())}))}resetAllFiltersState(){this.rendererManager&&this.rendererManager.resetAllRenderersState(),this.filterManager&&(this.filterManager.resetAllFiltersState(),this.reconnectNodesIfNeeded())}exit(){this.bufferPlayer&&(this.bufferPlayer.stop(),this.bufferPlayer.reset()),this.cancelAudioRendering(),this.principalBuffer=null}cancelAudioRendering(){this.audioProcessor&&this.audioProcessor.cancelAudioRendering()}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}off(t,e){this.eventEmitter&&this.eventEmitter.off(t,e)}saveBuffer(t){return fe(this,void 0,void 0,(function*(){var e;return!(!this.saveBufferManager||!this.audioProcessor)&&(yield null===(e=this.saveBufferManager)||void 0===e?void 0:e.saveBuffer(this.audioProcessor.renderedBuffer,t))}))}set downloadingInitialData(t){this.bufferManager&&(this.bufferManager.downloadingInitialData=t)}get downloadingInitialData(){return!!this.bufferManager&&this.bufferManager.downloadingInitialData}get order(){return-1}get id(){return ge.AUDIO_EDITOR}};Ae=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.SaveBufferManager)),le(4,ae(ce.AudioProcessor)),le(5,ae(ce.BufferManager)),le(6,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object,Object,Object,Object,Object])],Ae);var we=Ae;let Re=class extends be{constructor(t,e,i,r,n){super(),this._renderedBuffer=null,this.audioRenderingLastCanceled=!1,this.initialRenderingDone=!1,this.sumInputBuffer=0,this.contextManager=i,this.bufferPlayer=r,this.filterManager=t,this.rendererManager=e,this.bufferManager=n}prepareContext(t){return fe(this,void 0,void 0,(function*(){if(this.contextManager){this.contextManager.createNewContextIfNeeded(t)&&this.bufferManager&&(yield this.bufferManager.resetBufferFetcher()),this.contextManager.currentContext&&this.contextManager.currentContext.resume()}}))}renderAudio(t){return fe(this,void 0,void 0,(function*(){if(yield this.prepareContext(t),!this.contextManager||!this.contextManager.currentContext)throw new Error("AudioContext is not yet available");if(!this.filterManager)throw new Error("Filter manager is not available");if(!this.rendererManager)throw new Error("Renderer manager is not available");if(!this.filterManager.entrypointFilter)throw new Error("Entrypoint filter is not available");if(!t)throw new Error("No principal buffer available");if(!this.initialRenderingDone&&this.configService&&this.configService.isInitialRenderingDisabled()&&!this.configService.isCompatibilityModeEnabled())return this.loadInitialBuffer(t),this.initialRenderingDone=!0,!0;this.configService&&this.bufferPlayer&&!this.configService.isCompatibilityModeEnabled()&&this.bufferPlayer.compatibilityMode&&this.bufferPlayer.stop();const e=this.filterManager.entrypointFilter.getSpeed(),i=Se.calculateAudioDuration(t,this.filterManager,e),r=new OfflineAudioContext(2,this.contextManager.currentContext.sampleRate*i,this.contextManager.currentContext.sampleRate),n=this.configService&&this.configService.isCompatibilityModeEnabled()?this.contextManager.currentContext:r;return this._renderedBuffer=yield this.rendererManager.executeAudioRenderers(t,n),this.currentOfflineContext=null,this.audioRenderingLastCanceled=!1,Se.resetAudioRenderingProgress(this.eventEmitter),this.filterManager.setupTotalSamples(i,this.contextManager.currentContext),yield this.setupOutput(t,n,i,r)}))}setupPlayerSpeed(t){if(this.filterManager&&this.filterManager.entrypointFilter){const e=this.filterManager.entrypointFilter.getSpeed();t.speedAudio=e}}setupOutput(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(this._renderedBuffer&&this.configService&&this.eventEmitter&&this.bufferPlayer&&this.filterManager){if(yield this.filterManager.initializeWorklets(e),yield this.filterManager.connectNodes(e,this._renderedBuffer,!1,this.configService.isCompatibilityModeEnabled()),this.setupPlayerSpeed(this.bufferPlayer),!this.configService.isCompatibilityModeEnabled()&&r&&this.filterManager.currentNodes){this.currentOfflineContext=r,this.filterManager.currentNodes.output.connect(e.destination);const n=yield r.startRendering();if(this.contextManager&&!this.loadRenderedAudio(t,n))return yield this.setupOutput(t,this.contextManager.currentContext,i);if(this.audioRenderingLastCanceled)return!1;this.eventEmitter.emit(exports.EventType.OFFLINE_AUDIO_RENDERING_FINISHED)}else this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes.output,i),this.initialRenderingDone=!0;return this.eventEmitter.emit(exports.EventType.AUDIO_RENDERING_FINISHED),!0}return!1}))}loadRenderedAudio(t,e){if(this.eventEmitter&&this.bufferPlayer){if(this.audioRenderingLastCanceled)this.initialRenderingDone||(this.loadInitialBuffer(t),this.eventEmitter.emit(exports.EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO));else{if(0==Se.sumAudioBuffer(e)&&0!==this.sumInputBuffer){if(this.configService&&!this.configService.isCompatibilityModeChecked())return this.setCompatibilityModeChecked(!0),this.configService.enableCompatibilityMode(),this.eventEmitter.emit(exports.EventType.COMPATIBILITY_MODE_AUTO_ENABLED),!1;this.eventEmitter.emit(exports.EventType.RENDERING_AUDIO_PROBLEM_DETECTED)}this._renderedBuffer=e,this.bufferPlayer.loadBuffer(this._renderedBuffer)}this.initialRenderingDone=!0}return!0}loadInitialBuffer(t){this.bufferPlayer&&(this._renderedBuffer=t,this.bufferPlayer.loadBuffer(t))}cancelAudioRendering(){this.currentOfflineContext&&!this.audioRenderingLastCanceled&&this.filterManager&&(this.audioRenderingLastCanceled=!0,this.filterManager.disconnectOldNodes(!1),this.eventEmitter&&this.eventEmitter.emit(exports.EventType.CANCELLING_AUDIO_PROCESSING))}setCompatibilityModeChecked(t){this.configService&&this.configService.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED,""+t)}get renderedBuffer(){return this._renderedBuffer}get order(){return-1}get id(){return ge.AUDIO_PROCESSOR}};Re=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.BufferPlayer)),le(4,ae(ce.BufferManager)),de("design:paramtypes",[Object,Object,Object,Object,Object])],Re);var Te=Re;let Ce=class extends be{constructor(t,e,i,r){super(),this.downloadingInitialData=!1,this.audioBuffersToFetch=[],this.bufferFetcherService=e,this.eventEmitter=i||new me,this.filterManager=t,this.filterManager=t,this.audioBuffersToFetch=r,this.setup()}setup(){this.audioBuffersToFetch.length>0&&this.fetchBuffers(!1)}fetchBuffers(t){return fe(this,void 0,void 0,(function*(){if(!this.downloadingInitialData&&this.bufferFetcherService){this.downloadingInitialData=!0,this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADING_BUFFERS);try{yield this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch),this.downloadingInitialData=!1,this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADED_BUFFERS)}catch(e){this.eventEmitter&&!t&&this.eventEmitter.emit(exports.EventType.LOADING_BUFFERS_ERROR)}}}))}resetBufferFetcher(){return fe(this,void 0,void 0,(function*(){this.bufferFetcherService&&(this.bufferFetcherService.reset(),yield this.fetchBuffers(!0),this.filterManager&&(yield this.filterManager.resetFilterBuffers()))}))}get order(){return-1}get id(){return ge.BUFFER_MANAGER}};Ce=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.BufferFetcherService)),le(2,ae(ce.EventEmitter)),le(3,ae(ce.AudioBuffersToFetch)),de("design:paramtypes",[Object,Object,Object,Array])],Ce);var Me=Ce;let Ie=class extends be{constructor(t,e){super(),this.filters=[],this._entryPointFilter=null,this._currentNodes=null,this.filters=t,this._entryPointFilter=e,this.setup()}setup(){for(const t of this.filters)t.initializeDefaultSettings()}addFilters(...t){for(const e of t)e.initializeDefaultSettings(),e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.filters.push(...t)}getFiltersState(){const t={};return this.filters.forEach((e=>{t[e.id]=e.isEnabled()})),t}getFiltersSettings(){const t=new Map;for(const e of this.filters)t.set(e.id,e.getSettings());return t}toggleFilter(t){const e=this.filters.find((e=>e.id===t));e&&e.toggle()}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){const i=this.filters.find((e=>e.id===t));if(i)for(const t of Object.keys(e))yield i.setSetting(t,e[t])}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){const e=this.filters.find((e=>e.id===t));e&&(yield e.resetSettings())}))}resetAllFiltersState(){this.filters.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}connectNodes(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(!this._entryPointFilter)return;let n=null;if(i&&this._currentNodes)n=this._currentNodes.input;else{const i=yield this._entryPointFilter.getEntrypointNode(t,e,!r);n=i.input}const o=[];let s=n;this.disconnectOldNodes(i);const a=this.filters.sort(((t,e)=>t.order-e.order)).filter(((t,e)=>t!==this._entryPointFilter&&(t.isEnabled()||e>=this.filters.length-1)));for(const e of a){const i=e.getNode(t);s&&s.connect(i.input),s=i.output,o.push(i)}this._entryPointFilter&&this._entryPointFilter.updateState(),this._currentNodes={input:n,output:s,intermediateNodes:o.filter((t=>t.input!=s&&t.output!=s&&t.input!=n&&t.output!=n))}}))}disconnectOldNodes(t){if(this._currentNodes&&(this._currentNodes.input.disconnect(),t||this._currentNodes.output.disconnect(),this._currentNodes.intermediateNodes))for(const t of this._currentNodes.intermediateNodes)t.input.disconnect(),t.output.disconnect()}initializeWorklets(t){return fe(this,void 0,void 0,(function*(){for(const e of this.filters)e.isWorklet()&&(yield e.initializeWorklet(t))}))}getAddingTime(){let t=0;for(const e of this.filters)e.isEnabled()&&(t+=e.getAddingTime());return t}setupTotalSamples(t,e){if(e){const i=t*e.sampleRate;for(const t of this.filters)t.totalSamples=i}}resetFilterBuffers(){return fe(this,void 0,void 0,(function*(){for(const t of this.filters)yield t.bufferFetcherReseted()}))}get entrypointFilter(){return this._entryPointFilter}get currentNodes(){return this._currentNodes}get order(){return-1}get id(){return ge.FILTER_MANAGER}};Ie=he([oe(),le(0,ue(ce.Filters)),le(1,ae(ce.EntryPointFilter)),de("design:paramtypes",[Array,Object])],Ie);var Pe=Ie;let Be=class extends be{constructor(t=[]){super(),this.renderers=[],this.renderers=t}addRenderers(...t){for(const e of t)e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.renderers.push(...t)}getRenderersState(){const t={};return this.renderers.forEach((e=>{t[e.id]=e.isEnabled()})),t}toggleRenderer(t){const e=this.renderers.find((e=>e.id===t));e&&e.toggle()}resetAllRenderersState(){this.renderers.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}executeAudioRenderers(t,e){return fe(this,void 0,void 0,(function*(){let i=t;for(const t of this.renderers.sort(((t,e)=>t.order-e.order)))t.isEnabled()&&(i=yield t.renderAudio(e,i));return i}))}get order(){return-1}get id(){return ge.RENDERER_MANAGER}};Be=he([oe(),le(0,ue(ce.Renderers)),de("design:paramtypes",[Array])],Be);var Ne=Be;function Oe(t){return new Worker((t||"")+"RecorderWorker.js")}let De=class{constructor(t){this.worker=null,this.node=null,this.context=null,this.config={bufferLen:4096,sampleRate:44100,numChannels:2,mimeType:"audio/wav",workletBasePath:"worklets/",workerBasePath:"workers/",bitrate:ge.DEFAULT_MP3_BITRATE,callback:()=>{}},this.callbacks={getBuffer:[],exportWAV:[],exportMP3:[]},this.recording=!1,Object.assign(this.config,t)}setup(t){return fe(this,void 0,void 0,(function*(){this.node&&(this.node instanceof AudioWorkletNode&&this.node.port.postMessage("stop"),this.node.disconnect()),t&&(this.context=t.context,yield this.createRecorderNode(),this.node&&this.context&&(t.connect(this.node),this.node.connect(this.context.destination))),this.context&&!this.worker&&(this.worker=Oe(this.config.workerBasePath),this.worker&&(this.worker.postMessage({command:"init",config:{sampleRate:this.context.sampleRate,numChannels:this.config.numChannels,bitrate:this.config.bitrate}}),this.worker.onmessage=t=>{let e=null;switch(t.data.command){case"getBuffer":e=this.callbacks.getBuffer;break;case ge.EXPORT_WAV_COMMAND:e=this.callbacks.exportWAV;break;case ge.EXPORT_MP3_COMMAND:e=this.callbacks.exportMP3}if(e){const i=e.pop();"function"==typeof i&&i(t.data.data)}}))}))}createRecorderNode(){return fe(this,void 0,void 0,(function*(){if(this.context)if(Se.isAudioWorkletCompatible(this.context)&&ge.ENABLE_RECORDER_AUDIO_WORKLET)try{yield this.createRecorderWorklet()}catch(t){this.createRecorderScriptProcessorNode()}else this.createRecorderScriptProcessorNode()}))}createRecorderWorklet(){return fe(this,void 0,void 0,(function*(){if(this.context&&(yield this.context.audioWorklet.addModule(this.config.workletBasePath+ge.WORKLET_PATHS.RECORDER_WORKLET),this.node=new AudioWorkletNode(this.context,ge.WORKLET_NAMES.RECORDER_WORKLET),this.node&&this.node.port)){const t=this.node.parameters.get("numChannels");t&&(t.value=this.config.numChannels,t.setValueAtTime(this.config.numChannels,0)),this.node.port.onmessage=t=>{this.worker&&"record"==t.data.command&&t.data.buffer.length>0&&this.worker.postMessage({command:"record",buffer:t.data.buffer})}}}))}createRecorderScriptProcessorNode(){this.context&&(this.node=this.context.createScriptProcessor.call(this.context,this.config.bufferLen,this.config.numChannels,this.config.numChannels),this.node.onaudioprocess=t=>{if(!this.recording)return;const e=[];for(let i=0;i{this.savingBuffer&&this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback)}))}saveBuffer(t,e){return fe(this,void 0,void 0,(function*(){if(this.savingBuffer)throw new Error("The buffer is currently saving");if(!this.bufferPlayer)throw new Error("No buffer player was found");this.savingBuffer=!0;let i=!1;return i=this.bufferPlayer.compatibilityMode?yield this.saveBufferCompatibilityMode(e):yield this.saveBufferDirect(t,e),this.savingBuffer=!1,i}))}saveBufferDirect(t,e){return new Promise(((i,r)=>{var n;if(!t||this.contextManager&&!this.contextManager.currentContext)return r("No rendered buffer or AudioContext not initialized");const o=Oe(null===(n=this.configService)||void 0===n?void 0:n.getWorkerBasePath());if(o){const r=[];for(let e=0;e{t.data.command!=ge.EXPORT_WAV_COMMAND&&t.data.command!=ge.EXPORT_MP3_COMMAND||this.downloadAudioBlob(t.data.data,e),o.terminate(),this.savingBuffer=!1,i(!0)},o.postMessage({command:ge.INIT_COMMAND,config:{sampleRate:t.sampleRate,numChannels:2,bitrate:(null==e?void 0:e.bitrate)||ge.DEFAULT_MP3_BITRATE}}),o.postMessage({command:ge.RECORD_COMMAND,buffer:r}),o.postMessage({command:"mp3"===(null==e?void 0:e.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?ge.EXPORT_MP3_COMMAND:ge.EXPORT_WAV_COMMAND,type:ge.AUDIO_WAV})}}))}saveBufferCompatibilityMode(t){return new Promise(((e,i)=>{if(!this.bufferPlayer)return i("No buffer player found");this.bufferPlayer.start().then((()=>{if(!this.configService)return i("No config service found");if(!this.filterManager)return i("No filter manager found");const r=new De({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"mp3"==(null==t?void 0:t.format)?ge.AUDIO_MP3:ge.AUDIO_WAV,bitrate:(null==t?void 0:t.bitrate)||ge.DEFAULT_MP3_BITRATE});r.setup(this.filterManager.currentNodes.output).then((()=>{r.record(),this.playingStoppedCallback=()=>{r.kill(),this.savingBuffer=!1,this.eventEmitter&&(this.eventEmitter.off(exports.EventType.PLAYING_FINISHED,i),this.playingStoppedCallback&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback)),e(!0)};const i=()=>{this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback),r.stop();const n=n=>{this.downloadAudioBlob(n,t),this.savingBuffer=!1,this.eventEmitter&&this.eventEmitter.off(exports.EventType.PLAYING_FINISHED,i),r.kill(),e(!0)};"mp3"===(null==t?void 0:t.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?r.exportMP3(n):r.exportWAV(n)};this.eventEmitter&&(this.eventEmitter.on(exports.EventType.PLAYING_FINISHED,i),this.eventEmitter.on(exports.EventType.PLAYING_STOPPED,this.playingStoppedCallback))}))}))}))}downloadAudioBlob(t,e){Se.forceDownload(t,"audio-"+(new Date).toISOString()+"."+((null==e?void 0:e.format)||ge.DEFAULT_SAVE_FORMAT))}get order(){return-1}get id(){return ge.SAVE_BUFFER_MANAGER}};Fe=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.AudioContextManager)),le(2,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object])],Fe);var ke=Fe;let Le=class extends be{constructor(t){super(),this.buffer=null,this.source=null,this.currentTime=0,this.displayTime=0,this.duration=0,this.intervals=[],this.playing=!1,this.loop=!1,this.speedAudio=1,this.onBeforePlayingCallback=()=>fe(this,void 0,void 0,(function*(){})),this.compatibilityMode=!1,this.currentNode=null,this._contextManager=t}init(t){this.playing=!1,this._contextManager&&this._contextManager.currentContext&&(this._contextManager.currentContext.resume(),!this.compatibilityMode&&this.buffer&&(null==this.source||t||this.source.disconnect(),this.source=this._contextManager.currentContext.createBufferSource(),this.source.buffer=this.buffer,this.duration=this.buffer.duration*this.speedAudio,this.source.connect(this._contextManager.currentContext.destination))),this.updateInfos()}loadBuffer(t){this.compatibilityMode=!1,this.reset(),this.buffer=t,this.init()}setCompatibilityMode(t,e){this.compatibilityMode=!0,this.reset(),this.init(),null!=e&&(this.duration=e*this.speedAudio),this.currentNode=t,this.updateInfos()}reset(t){this.clearIntervals(),this.currentTime=0,this.displayTime=0,t||this.stop()}stop(){var t;this.clearIntervals(),null!=this.source&&null!=this.source&&this.playing&&(this.source.stop(0),this.playing=!1),this.currentNode&&(this.currentNode.disconnect(),this.compatibilityMode&&(this.currentTime=0,this.displayTime=0)),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.PLAYING_STOPPED),this.updateInfos()}clearIntervals(){for(const t of this.intervals)clearInterval(t);this.intervals=[]}start(t){return fe(this,void 0,void 0,(function*(){var e;if(this.source||this.compatibilityMode){if(t||this.stop(),this.init(t),yield this.onBeforePlayingCallback(),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.PLAYING_STARTED),this.compatibilityMode){if(!(this.currentNode&&this._contextManager&&this._contextManager.currentContext))return;this.currentNode.connect(this._contextManager.currentContext.destination)}else{if(!this.source)return;this.source.start(0,t?0:this.currentTime/this.speedAudio),this.playing=!0}let i=performance.now();this.intervals.push(window.setInterval((()=>{var e,r;const n=performance.now(),o=n-i;i=n,this.currentTime+=o/1e3*this.speedAudio,this.displayTime=this.currentTime,this.currentTime>this.duration?this.loop?this.compatibilityMode?null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.PLAYING_FINISHED):(this.reset(t),this.start()):(null===(r=this.eventEmitter)||void 0===r||r.emit(exports.EventType.PLAYING_FINISHED),this.reset(t)):this.updateInfos()}),100))}}))}playDirect(){return fe(this,void 0,void 0,(function*(){this.compatibilityMode?this.start(!1):this.start(!0)}))}pause(){this.stop()}updateInfos(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.PLAYING_UPDATE)}setTimePercent(t){this.compatibilityMode||(this.currentTime=Math.round(this.duration*(t/100)),this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}setTime(t){this.compatibilityMode||(this.currentTime=t,this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}onBeforePlaying(t){this.onBeforePlayingCallback=t}toggleLoop(){this.loop=!this.loop}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}get currentTimeDisplay(){return("0"+Math.trunc(this.displayTime/60)).slice(-2)+":"+("0"+Math.trunc(this.displayTime%60)).slice(-2)}get maxTimeDisplay(){return("0"+Math.trunc(this.duration/60)).slice(-2)+":"+("0"+Math.trunc(this.duration%60)).slice(-2)}get percent(){return 100-Math.round((this.duration-this.displayTime)/this.duration*100)}get remainingTimeDisplay(){return("0"+Math.trunc((this.duration-this.displayTime)/60)).slice(-2)+":"+("0"+Math.trunc((this.duration-this.displayTime)%60)).slice(-2)}get order(){return-1}get id(){return ge.BUFFER_PLAYER}};Le=he([oe(),le(0,ae(ce.AudioContextManager)),de("design:paramtypes",[Object])],Le);var Ge=Le;let We=class{constructor(t,e,i){this.buffers=new Map,this.bufferErrors=[],this.configService=null,this.contextManager=t,this.eventEmitter=i||new me,this.configService=e}fetchBuffer(t,e){return fe(this,void 0,void 0,(function*(){var i,r,n,o;const s=(this.configService?this.configService.getSoundBasePath():"")+t;if(null==this.buffers.get(this.getKeyFromLocation(s))||e){null===(i=this.eventEmitter)||void 0===i||i.emit(exports.EventType.FETCHING_BUFFERS,s);try{const t=yield fetch(s);if(!t.ok)throw this.bufferErrors.push(s),null===(r=this.eventEmitter)||void 0===r||r.emit(exports.EventType.FETCHING_BUFFERS_ERROR,s),exports.EventType.FETCHING_BUFFERS_ERROR;{const e=yield t.arrayBuffer();if(this.contextManager&&this.contextManager.currentContext){const t=yield this.contextManager.currentContext.decodeAudioData(e);this.buffers.set(this.getKeyFromLocation(s),Se.decodeBuffer(this.contextManager.currentContext,t))}}null===(n=this.eventEmitter)||void 0===n||n.emit(exports.EventType.FINISHED_FETCHING_BUFFERS,s)}catch(t){throw this.bufferErrors.push(s),null===(o=this.eventEmitter)||void 0===o||o.emit(exports.EventType.FETCHING_BUFFERS_ERROR,s),exports.EventType.FETCHING_BUFFERS_ERROR}}}))}fetchAllBuffers(t){return fe(this,void 0,void 0,(function*(){for(const e of t)yield this.fetchBuffer(e)}))}getAudioBuffer(t){return this.buffers.get(this.getKeyFromLocation(t))}getOrFetchAudioBuffer(t){return fe(this,void 0,void 0,(function*(){return null==this.getAudioBuffer(t)&&(yield this.fetchBuffer(t)),this.getAudioBuffer(t)}))}getDownloadedBuffersList(){return Array.from(this.buffers.keys())}getKeyFromLocation(t){return t.substring(t.lastIndexOf("/")+1)}reset(){this.buffers.clear()}};We=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.ConfigService)),le(2,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object,Object])],We);var Ve=We;let Ue=class{constructor(t,e){this.contextManager=t,this.eventEmitter=e||new me}decodeBufferFromFile(t){return fe(this,void 0,void 0,(function*(){this.eventEmitter&&this.eventEmitter.emit(exports.EventType.DECODING_AUDIO_FILE);try{if(this.contextManager&&this.contextManager.currentContext){const e=yield Se.loadAudioBuffer(this.contextManager.currentContext,t);return this.eventEmitter&&this.eventEmitter.emit(exports.EventType.DECODED_AUDIO_FILE),e}}catch(t){console.error(t),this.eventEmitter&&(this.eventEmitter.emit(exports.EventType.DECODED_AUDIO_FILE),this.eventEmitter.emit(exports.EventType.ERROR_DECODING_AUDIO_FILE))}return null}))}};Ue=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object])],Ue);var je=Ue;class qe extends be{}class He extends be{constructor(){super(...arguments),this.defaultSettings=null,this._totalSamples=0}getAddingTime(){return 0}initializeDefaultSettings(){this.defaultSettings=this.getSettings()}getDefaultSettings(){return this.defaultSettings}resetSettings(){return fe(this,void 0,void 0,(function*(){if(this.defaultSettings)for(const t in this.defaultSettings)this.defaultSettings&&void 0!==this.defaultSettings[t]&&(yield this.setSetting(t,this.defaultSettings[t]))}))}isWorklet(){return!1}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){return!1}))}set totalSamples(t){this._totalSamples=t}}class Ke{constructor(t,e){this._value=0,this._minValue=0,this._maxValue=Number.MAX_SAFE_INTEGER,this._defaultValue=0,this.context=null,this.automationRate="a-rate",this._defaultValue=void 0!==e?e:0,this._value=this._defaultValue,this.context=t}get value(){return this._value}set value(t){this._value=Math.max(this._minValue,Math.min(this._maxValue,t))}get minValue(){return this._minValue}get maxValue(){return this._maxValue}get defaultValue(){return this._defaultValue}setValueAtTime(t,e){return console.warn("setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}linearRampToValueAtTime(t,e){return console.warn("linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}exponentialRampToValueAtTime(t,e){return console.warn("exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}cancelAndHoldAtTime(t){throw new Error("Method not implemented.")}cancelScheduledValues(t){throw new Error("Method not implemented.")}setTargetAtTime(t,e,i){throw new Error("Method not implemented.")}setValueCurveAtTime(t,e,i){throw new Error("Method not implemented.")}}class Ye{constructor(t,e,i){this._parameters=new Map,this._port=null,this.currentContext=null,this.workletProcessor=e,this.currentContext=t,this._scriptProcessorNode=t.createScriptProcessor(i,2,2),this.setupPort(),this.setupProcessor(),this.setupWorkletScope(t)}setupPort(){const t=new MessageChannel;t.port1.onmessage=t=>{this.workletProcessor&&this.workletProcessor.port2&&this.workletProcessor.port2.postMessage(t.data)},this.workletProcessor&&this.workletProcessor.port2&&(this.workletProcessor.port2.onmessage=e=>{t.port1.postMessage(e.data)}),this._port=t.port2}setupProcessor(){if(!this._scriptProcessorNode)return;this._scriptProcessorNode.onaudioprocess=t=>{if(this.workletProcessor){const e=[Se.convertAudioBufferToFloat32Array(t.inputBuffer)],i=[Se.convertAudioBufferToFloat32Array(t.outputBuffer)],r=[];for(const[t,e]of this._parameters.entries())r.push([t,Se.convertAudioParamToFloat32Array(e,1)]);const n=Object.fromEntries(r);this.workletProcessor.process(e,i,n)}};const t=this.workletProcessor.defaultParameterDescriptors;t&&t.forEach((t=>{this.currentContext&&this._parameters.set(t.name,new Ke(this.currentContext,t.defaultValue))}))}setupWorkletScope(t){"undefined"!=typeof window&&(window.sampleRate=t.sampleRate)}get port(){return this._port}get parameters(){return this._parameters}get node(){return this._scriptProcessorNode}get context(){var t;return null===(t=this._scriptProcessorNode)||void 0===t?void 0:t.context}}class ze{static registerProcessor(t,e){ze.processorsMap.set(t,e)}static getProcessor(t){const e=ze.processorsMap.get(t);return e?new e:null}}ze.processorsMap=new Map;class Qe{constructor(){this.messageChannel=null,this.messageChannel=new MessageChannel}process(t,e,i){return!0}get port(){return this.messageChannel&&this.messageChannel.port1}get port2(){return this.messageChannel&&this.messageChannel.port2}get parameters(){throw new Error("Method not implemented.")}get parameterDescriptors(){throw new Error("Method not implemented.")}get defaultParameterDescriptors(){return[]}}"undefined"==typeof window||"AudioWorkletProcessor"in window||(window.AudioWorkletProcessor=Qe,window.registerProcessor=ze.registerProcessor),"undefined"==typeof global||"AudioWorkletProcessor"in global||(global.AudioWorkletProcessor=Qe,global.registerProcessor=ze.registerProcessor);class Ze extends He{constructor(){super(...arguments),this.currentWorkletNode=null,this.fallbackToScriptProcessor=!1,this.keepCurrentNodeIfPossible=!1}initializeWorklet(t){return fe(this,void 0,void 0,(function*(){if(this.stop(),!Se.isAudioWorkletCompatible(t))return console.error("Audio Worklets not supported on this browser. Fallback to ScriptProcessor"),void(this.fallbackToScriptProcessor=!0);const e=(this.configService?this.configService.getWorkletBasePath():"")+this.workletPath;yield t.audioWorklet.addModule(e).catch((t=>{console.error(`Error when loading Worklet (${e}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`,t),this.fallbackToScriptProcessor=!0}))}))}isAudioWorkletEnabled(){return this.configService?this.configService.isAudioWorkletEnabled():ge.ENABLE_AUDIO_WORKLET}initializeNode(t,e){if(this.isAudioWorkletEnabled()&&!this.fallbackToScriptProcessor)this.currentWorkletNode=new AudioWorkletNode(t,e);else{const i=ze.getProcessor(e);if(!i)throw new Error(`No processor registered with name ${e} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);this.currentWorkletNode=new Ye(t,i,this.configService.getBufferSize())}this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.onmessage=t=>this.receiveEvent(t))}applyCurrentSettingsToWorklet(){if(this.currentWorkletNode&&this.currentWorkletNode.parameters){const t=this.getSettings();for(const e of Object.keys(t)){const i=this.currentWorkletNode.parameters.get(e);i&&(i.value=t[e],i.setValueAtTime(t[e],0))}}}getNode(t){if(this.keepCurrentNodeIfPossible&&this.currentWorkletNode&&this.currentWorkletNode.context==t||(this.stop(),this.initializeNode(t,this.workletName)),this.applyCurrentSettingsToWorklet(),this.setEnabled(this.isEnabled()),this.currentWorkletNode)return this.currentWorkletNode instanceof Ye?{input:this.currentWorkletNode.node,output:this.currentWorkletNode.node}:{input:this.currentWorkletNode,output:this.currentWorkletNode};throw new Error("Worklet node has not yet been created")}stop(){this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.postMessage("stop"),this.currentWorkletNode.port.onmessage=null),this.currentWorkletNode=null}setEnabled(t){this.currentWorkletNode&&this.currentWorkletNode.port&&this.currentWorkletNode.port.postMessage(t?"enable":"disable"),super.setEnabled(t)}isWorklet(){return!0}}class Xe extends AudioWorkletProcessor{constructor(){super(),this.stopped=!1,this.phaser=null,this.last=null,this.port.onmessage=t=>{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[{name:"bits",defaultValue:16},{name:"normFreq",defaultValue:.9}]}get defaultParameterDescriptors(){return Xe.parameterDescriptors}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=2*Math.pow(.5,i.bits[0]),s=(1-i.normFreq[0])/(sampleRate/48e3);if(null==this.last&&(this.last=new Array(r.length).fill(0)),null==this.phaser&&(this.phaser=new Array(r.length).fill(0)),r&&r[0]){const t=r[0].length;for(let e=0;e=1&&(this.phaser[e]-=1,this.last[e]=o*Math.floor(i[r]*(1/o)+.5)),a[r]=this.last[e]}}return!0}stop(){this.stopped=!0,this.phaser=null,this.last=null}}registerProcessor(ge.WORKLET_NAMES.BITCRUSHER,Xe);class $e{constructor(t){this._array=new Float32Array,this.n=0,this.length=0,this.readPointer=0,this.writePointer=0,this.n=Math.floor(t),this.init()}init(){this._array=new Float32Array(2*this.n),this.length=this._array.length,this.readPointer=0,this.writePointer=this.n-1,this._array.fill(0)}read(){const t=this._array[this.readPointer%this.length];return this.readPointer=(this.readPointer+1)%this.length,t}push(t){this._array[this.writePointer%this.length]=t,this.writePointer=(this.writePointer+1)%this.length}reset(){this.init()}clear(){this._array=new Float32Array,this.length=0,this.readPointer=0,this.writePointer=0}sum(){return this._array.reduce(((t,e)=>t+e),0)}}class Je extends AudioWorkletProcessor{constructor(){super(),this.delayBuffer=[],this.envelopeSample=0,this.stopped=!1,this.disabled=!1,this.port.onmessage=t=>{"reset"==t.data?this.reset():"stop"==t.data?this.stop():"disable"==t.data?this.disabled=!0:"enable"==t.data&&(this.disabled=!1)}}static get parameterDescriptors(){return[{name:"preGain",defaultValue:0},{name:"postGain",defaultValue:0},{name:"attackTime",defaultValue:0},{name:"releaseTime",defaultValue:3},{name:"threshold",defaultValue:-.05},{name:"lookAheadTime",defaultValue:0}]}get defaultParameterDescriptors(){return Je.parameterDescriptors}getEnvelope(t,e,i,r){const n=Math.exp(-1/(r*e)),o=Math.exp(-1/(r*i)),s=new Float32Array(t.length);for(let e=0;er&&(r=t[n][i]);return r}ampToDB(t){return 20*Math.log10(t)}dBToAmp(t){return Math.pow(10,t/20)}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=[],s=this.dBToAmp(i.postGain[0]),a=this.dBToAmp(i.preGain[0]);for(let t=0;t0&&a)for(let e=0;e=0||(i=(t.length-r)/2);const n=2*i;this.ensureCapacity(i+this._frameCount);const o=this.endIndex;this.vector.set(t.subarray(r,r+n),o),this._frameCount+=i}putBuffer(t,e,i=0){e=e||0,i>=0||(i=t.frameCount-e),this.putSamples(t.vector,t.position+e,i)}receive(t){t>=0&&!(t>this._frameCount)||(t=this.frameCount),this._frameCount-=t,this._position+=t}receiveSamples(t,e=0){const i=2*e,r=this.startIndex;t.set(this._vector.subarray(r,r+i)),this.receive(e)}extract(t,e=0,i=0){const r=this.startIndex+2*e,n=2*i;t.set(this._vector.subarray(r,r+n))}ensureCapacity(t=0){const e=parseInt(2*t);if(this._vector.length0&&(this._vector.set(this._vector.subarray(this.startIndex,this.endIndex)),this._position=0)}}class ii{constructor(t){t?(this._inputBuffer=new ei,this._outputBuffer=new ei):this._inputBuffer=this._outputBuffer=null}get inputBuffer(){return this._inputBuffer}set inputBuffer(t){this._inputBuffer=t}get outputBuffer(){return this._outputBuffer}set outputBuffer(t){this._outputBuffer=t}clear(){this._inputBuffer.clear(),this._outputBuffer.clear()}}class ri extends ii{constructor(t){super(t),this.reset(),this._rate=1}set rate(t){this._rate=t}reset(){this.slopeCount=0,this.prevSampleL=0,this.prevSampleR=0}clone(){const t=new ri;return t.rate=this._rate,t}process(){const t=this._inputBuffer.frameCount;this._outputBuffer.ensureAdditionalCapacity(t/this._rate+1);const e=this.transpose(t);this._inputBuffer.receive(),this._outputBuffer.put(e)}transpose(t=0){if(0===t)return 0;const e=this._inputBuffer.vector,i=this._inputBuffer.startIndex,r=this._outputBuffer.vector,n=this._outputBuffer.endIndex;let o=0,s=0;for(;this.slopeCount<1;)r[n+2*s]=(1-this.slopeCount)*this.prevSampleL+this.slopeCount*e[i],r[n+2*s+1]=(1-this.slopeCount)*this.prevSampleR+this.slopeCount*e[i+1],s+=1,this.slopeCount+=this._rate;if(this.slopeCount-=1,1!==t)t:for(;;){for(;this.slopeCount>1;)if(this.slopeCount-=1,o+=1,o>=t-1)break t;const a=i+2*o;r[n+2*s]=(1-this.slopeCount)*e[a]+this.slopeCount*e[a+2],r[n+2*s+1]=(1-this.slopeCount)*e[a+1]+this.slopeCount*e[a+3],s+=1,this.slopeCount+=this._rate}return this.prevSampleL=e[i+2*t-2],this.prevSampleR=e[i+2*t-1],s}}class ni{constructor(t){this._pipe=t}get pipe(){return this._pipe}get inputBuffer(){return this._pipe.inputBuffer}get outputBuffer(){return this._pipe.outputBuffer}fillInputBuffer(){throw new Error("fillInputBuffer() not overridden")}fillOutputBuffer(t=0){for(;this.outputBuffer.frameCountthis._position)throw new RangeError("New position may not be greater than current position");const e=this.outputBufferPosition-(this._position-t);if(e<0)throw new RangeError("New position falls outside of history buffer");this.outputBufferPosition=e,this._position=t}get sourcePosition(){return this._sourcePosition}set sourcePosition(t){this.clear(),this._sourcePosition=t}onEnd(){this.callback()}fillInputBuffer(t=0){const e=new Float32Array(2*t),i=this.sourceSound.extract(e,t,this._sourcePosition);this._sourcePosition+=i,this.inputBuffer.putSamples(e,0,i)}extract(t,e=0){this.fillOutputBuffer(this.outputBufferPosition+e);const i=Math.min(e,this.outputBuffer.frameCount-this.outputBufferPosition);this.outputBuffer.extract(t,this.outputBufferPosition,i);const r=this.outputBufferPosition+i;return this.outputBufferPosition=Math.min(this.historyBufferSize,r),this.outputBuffer.receive(Math.max(r-this.historyBufferSize,0)),this._position+=i,i}handleSampleData(t){this.extract(t.data,4096)}clear(){super.clear(),this.outputBufferPosition=0}}const ai=[[124,186,248,310,372,434,496,558,620,682,744,806,868,930,992,1054,1116,1178,1240,1302,1364,1426,1488,0],[-100,-75,-50,-25,25,50,75,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-20,-15,-10,-5,5,10,15,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-4,-3,-2,-1,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],ui=-10/1.5;class ci extends ii{constructor(t){super(t),this._quickSeek=!0,this.midBufferDirty=!1,this.midBuffer=null,this.overlapLength=0,this.autoSeqSetting=!0,this.autoSeekSetting=!0,this._tempo=1,this.setParameters(44100,0,0,8)}clear(){super.clear(),this.clearMidBuffer()}clearMidBuffer(){this.midBufferDirty&&(this.midBufferDirty=!1,this.midBuffer=null)}setParameters(t,e,i,r){t>0&&(this.sampleRate=t),r>0&&(this.overlapMs=r),e>0?(this.sequenceMs=e,this.autoSeqSetting=!1):this.autoSeqSetting=!0,i>0?(this.seekWindowMs=i,this.autoSeekSetting=!1):this.autoSeekSetting=!0,this.calculateSequenceParameters(),this.calculateOverlapLength(this.overlapMs),this.tempo=this._tempo}set tempo(t){let e;this._tempo=t,this.calculateSequenceParameters(),this.nominalSkip=this._tempo*(this.seekWindowLength-this.overlapLength),this.skipFract=0,e=Math.floor(this.nominalSkip+.5),this.sampleReq=Math.max(e+this.overlapLength,this.seekWindowLength)+this.seekLength}get tempo(){return this._tempo}get inputChunkSize(){return this.sampleReq}get outputChunkSize(){return this.overlapLength+Math.max(0,this.seekWindowLength-2*this.overlapLength)}calculateOverlapLength(t=0){let e;e=this.sampleRate*t/1e3,e=e<16?16:e,e-=e%8,this.overlapLength=e,this.refMidBuffer=new Float32Array(2*this.overlapLength),this.midBuffer=new Float32Array(2*this.overlapLength)}checkLimits(t,e,i){return ti?i:t}calculateSequenceParameters(){let t,e;this.autoSeqSetting&&(t=150+-50*this._tempo,t=this.checkLimits(t,50,125),this.sequenceMs=Math.floor(t+.5)),this.autoSeekSetting&&(e=28.333333333333332+ui*this._tempo,e=this.checkLimits(e,15,25),this.seekWindowMs=Math.floor(e+.5)),this.seekWindowLength=Math.floor(this.sampleRate*this.sequenceMs/1e3),this.seekLength=Math.floor(this.sampleRate*this.seekWindowMs/1e3)}set quickSeek(t){this._quickSeek=t}clone(){const t=new ci;return t.tempo=this._tempo,t.setParameters(this.sampleRate,this.sequenceMs,this.seekWindowMs,this.overlapMs),t}seekBestOverlapPosition(){return this._quickSeek?this.seekBestOverlapPositionStereoQuick():this.seekBestOverlapPositionStereo()}seekBestOverlapPositionStereo(){let t,e,i,r=0;for(this.preCalculateCorrelationReferenceStereo(),t=0,e=Number.MIN_VALUE;re&&(e=i,t=r);return t}seekBestOverlapPositionStereoQuick(){let t,e,i,r,n,o=0;for(this.preCalculateCorrelationReferenceStereo(),e=Number.MIN_VALUE,t=0,r=0,n=0;o<4;o+=1){let s=0;for(;ai[o][s]&&(n=r+ai[o][s],!(n>=this.seekLength));)i=this.calculateCrossCorrelationStereo(2*n,this.refMidBuffer),i>e&&(e=i,t=n),s+=1;r=t}return t}preCalculateCorrelationReferenceStereo(){let t,e,i=0;for(;i=this.sampleReq;){t=this.seekBestOverlapPosition(),this._outputBuffer.ensureAdditionalCapacity(this.overlapLength),this.overlap(Math.floor(t)),this._outputBuffer.put(this.overlapLength),e=this.seekWindowLength-2*this.overlapLength,e>0&&this._outputBuffer.putBuffer(this._inputBuffer,t+this.overlapLength,e);const r=this._inputBuffer.startIndex+2*(t+this.seekWindowLength-this.overlapLength);this.midBuffer.set(this._inputBuffer.vector.subarray(r,r+2*this.overlapLength)),this.skipFract+=this.nominalSkip,i=Math.floor(this.skipFract),this.skipFract-=i,this._inputBuffer.receive(i)}}}const hi=function(t,e){return(t>e?t-e:e-t)>1e-10};class li{constructor(){this.transposer=new ri(!1),this.stretch=new ci(!1),this._inputBuffer=new ei,this._intermediateBuffer=new ei,this._outputBuffer=new ei,this._rate=0,this._tempo=0,this.virtualPitch=1,this.virtualRate=1,this.virtualTempo=1,this.calculateEffectiveRateAndTempo()}clear(){this.transposer.clear(),this.stretch.clear()}clone(){const t=new li;return t.rate=this.rate,t.tempo=this.tempo,t}get rate(){return this._rate}set rate(t){this.virtualRate=t,this.calculateEffectiveRateAndTempo()}set rateChange(t){this._rate=1+.01*t}get tempo(){return this._tempo}set tempo(t){this.virtualTempo=t,this.calculateEffectiveRateAndTempo()}set tempoChange(t){this.tempo=1+.01*t}set pitch(t){this.virtualPitch=t,this.calculateEffectiveRateAndTempo()}set pitchOctaves(t){this.pitch=Math.exp(.69314718056*t),this.calculateEffectiveRateAndTempo()}set pitchSemitones(t){this.pitchOctaves=t/12}get inputBuffer(){return this._inputBuffer}get outputBuffer(){return this._outputBuffer}calculateEffectiveRateAndTempo(){const t=this._tempo,e=this._rate;this._tempo=this.virtualTempo/this.virtualPitch,this._rate=this.virtualRate*this.virtualPitch,hi(this._tempo,t)&&(this.stretch.tempo=this._tempo),hi(this._rate,e)&&(this.transposer.rate=this._rate),this._rate>1?this._outputBuffer!=this.transposer.outputBuffer&&(this.stretch.inputBuffer=this._inputBuffer,this.stretch.outputBuffer=this._intermediateBuffer,this.transposer.inputBuffer=this._intermediateBuffer,this.transposer.outputBuffer=this._outputBuffer):this._outputBuffer!=this.stretch.outputBuffer&&(this.transposer.inputBuffer=this._inputBuffer,this.transposer.outputBuffer=this._intermediateBuffer,this.stretch.inputBuffer=this._intermediateBuffer,this.stretch.outputBuffer=this._outputBuffer)}process(){this._rate>1?(this.stretch.process(),this.transposer.process()):(this.transposer.process(),this.stretch.process())}}class di{constructor(t){this.buffer=t,this._position=0}get dualChannel(){return this.buffer.numberOfChannels>1}get position(){return this._position}set position(t){this._position=t}extract(t,e=0,i=0){this.position=i;let r=this.buffer.getChannelData(0),n=this.dualChannel?this.buffer.getChannelData(1):this.buffer.getChannelData(0),o=0;for(;o=r?i:new Array(r-i.length+1).join(n)+i}`;var i,r,n},pi=function(t){const e=this.timePlayed,i=this.sampleRate;if(this.sourcePosition=t,this.timePlayed=t/i,e!==this.timePlayed){const t=new CustomEvent("play",{detail:{timePlayed:this.timePlayed,formattedTimePlayed:this.formattedTimePlayed,percentagePlayed:this.percentagePlayed}});this._node.dispatchEvent(t)}};class gi{constructor(t,e,i,r=oi){this._soundtouch=new li;const n=new di(e);this.timePlayed=0,this.sourcePosition=0,this._filter=new si(n,this._soundtouch,r),this._node=function(t,e,i=oi,r=4096){const n=t.createScriptProcessor(r,2,2),o=new Float32Array(2*r);return n.onaudioprocess=t=>{let n=t.outputBuffer.getChannelData(0),s=t.outputBuffer.getChannelData(1),a=e.extract(o,r);i(e.sourcePosition),0===a&&e.onEnd();let u=0;for(;upi.call(this,t)),i),this.tempo=1,this.rate=1,this.duration=e.duration,this.sampleRate=t.sampleRate,this.listeners=[]}get formattedDuration(){return fi(this.duration)}get formattedTimePlayed(){return fi(this.timePlayed)}get percentagePlayed(){return 100*this._filter.sourcePosition/(this.duration*this.sampleRate)}set percentagePlayed(t){this._filter.sourcePosition=parseInt(t*this.duration*this.sampleRate),this.sourcePosition=this._filter.sourcePosition,this.timePlayed=this.sourcePosition/this.sampleRate}get node(){return this._node}set pitch(t){this._soundtouch.pitch=t}set pitchSemitones(t){this._soundtouch.pitchSemitones=t}set rate(t){this._soundtouch.rate=t}set tempo(t){this._soundtouch.tempo=t}connect(t){this._node.connect(t)}disconnect(){this._node.disconnect()}on(t,e){this.listeners.push({name:t,cb:e}),this._node.addEventListener(t,(t=>e(t.detail)))}off(t=null){let e=this.listeners;t&&(e=e.filter((e=>e.name===t))),e.forEach((t=>{this._node.removeEventListener(t.name,(e=>t.cb(e.detail)))}))}}let vi;"undefined"!=typeof window&&void 0!==window.AudioWorkletNode&&(vi=class extends AudioWorkletNode{constructor(t,e,i){super(t,e,i),this.name="",this.running=!1,this._tempo=1,this._pitch=1,this.name=this.constructor.name,this.running=!0,this.updateInterval=i.processorOptions.updateInterval}setup(t,e){return fe(this,void 0,void 0,(function*(){return new Promise((i=>{this.port&&(this.port.onmessage=t=>{t&&t.data&&"OK"===t.data.status&&"setup"===t.data.args[0]&&(this.port.onmessage=this.messageProcessor.bind(this),i())},this.port.postMessage({command:"setup",args:[t,e]}),this._tempo=t,this._pitch=e)}))}))}set updateInterval(t){this.port.postMessage({command:"updateInterval",args:[t]})}get node(){return this}set tempo(t){this.port.postMessage({command:"setTempo",args:[t]})}set pitch(t){this.port.postMessage({command:"setPitch",args:[t]})}get tempo(){return this.port.postMessage({command:"getTempo",args:[]}),this._tempo}get pitch(){return this.port.postMessage({command:"getPitch",args:[]}),this._pitch}stop(){return fe(this,void 0,void 0,(function*(){this.running&&(this.port.postMessage({command:"stop",args:[]}),this.disconnect(),this.running=!1)}))}messageProcessor(t){if(t.data.command){const{command:e}=t.data;if("End"===e)this.stop();if(t.data.status){const e=t.data.args[1];switch(t.data.args[0]){case"getTempo":this._tempo=e;break;case"getPitch":this._pitch=e}return}}}});var mi=vi;class yi{constructor(t,e,i){this.FILTER_QUALITY=6,this.FOURIER_SIZE=4096,this.WAVETABLEBOOST=40,this.SAWTOOTHBOOST=.4,this.oscillatorType=4,this.oscillatorDetuneValue=0,this.audioContext=null,this.carrierBuffer=null,this.modulatorNode=null,this.vocoding=!1,this.modulatorInput=null,this.carrierInput=null,this.modulatorGain=null,this.modulatorGainValue=1,this.noiseBuffer=null,this.noiseNode=null,this.noiseGain=null,this.noiseGainValue=.2,this.carrierSampleNode=null,this.carrierSampleGain=null,this.carrierSampleGainValue=0,this.oscillatorNode=null,this.oscillatorGain=null,this.oscillatorGainValue=1,this.wavetable=null,this.wavetableSignalGain=null,this.modFilterBands=null,this.modFilterPostGains=null,this.heterodynes=null,this.powers=null,this.lpFilters=null,this.lpFilterPostGains=null,this.carrierBands=null,this.carrierFilterPostGains=null,this.carrierBandGains=null,this.vocoderBands=null,this.numVocoderBands=0,this.hpFilterGain=null,this.outputGain=null,this.audioContext=t,this.carrierBuffer=e,this.modulatorBuffer=i}init(){this.generateVocoderBands(55,7040,28),this.setupVocoderGraph(),this.vocode()}getNodes(){return{modulatorNode:this.modulatorNode,modulatorGain:this.modulatorGain,synthLevel:this.oscillatorGain,noiseNode:this.noiseGain,oscillatorNode:this.oscillatorNode,hpFilterGain:this.hpFilterGain,outputGain:this.outputGain}}shutOffCarrier(){this.oscillatorNode&&this.noiseNode&&this.carrierSampleNode&&(this.oscillatorNode.stop(0),this.oscillatorNode=null,this.noiseNode.stop(0),this.noiseNode=null,this.carrierSampleNode.stop(0),this.carrierSampleNode=null)}selectSawtooth(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.SAWTOOTHBOOST),this.oscillatorNode&&(this.oscillatorNode.type="sawtooth")}selectWavetable(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST),this.oscillatorNode&&this.wavetable&&this.oscillatorNode.setPeriodicWave(this.wavetable),this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST)}updateModGain(t){this.modulatorGainValue=t,this.modulatorGain&&(this.modulatorGain.gain.value=t)}updateSampleLevel(t){this.carrierSampleGainValue=t,this.carrierSampleGain&&(this.carrierSampleGain.gain.value=t)}updateSynthLevel(t){this.oscillatorGainValue=t,this.oscillatorGain&&(this.oscillatorGain.gain.value=t)}updateNoiseLevel(t){this.noiseGainValue=t,this.noiseGain&&(this.noiseGain.gain.value=t)}updateDetuneValue(t){this.oscillatorDetuneValue=t,this.oscillatorNode&&(this.oscillatorNode.detune.value=t)}generateVocoderBands(t,e,i){const r=1200*Math.log(e/t)/Math.LN2/i,n=Math.pow(2,r/1200);this.vocoderBands=[];let o=t;for(let t=0;t0?t:-t)/32768;for(let e=0;e{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[]}get defaultParameterDescriptors(){return Ei.parameterDescriptors}process(t,e){if(this.stopped)return!1;const i=t[0],r=e[0];if(i&&i[0]&&(this.samplesCount+=i[0].length),r){for(let t=0;t{},this.seconds=t,this.initialSeconds=t,this.interval,this.incr=e}start(){this.interval=window.setInterval((()=>this.count()),1e3)}stop(){clearInterval(this.interval)}count(){this.seconds+=this.incr,this.seconds<=0&&this.stop(),this.countCallback&&this.countCallback()}onCount(t){this.countCallback=t}}let bi=class extends be{constructor(t,e){super(),this.recorder=null,this.input=null,this.stream=null,this.alreadyInit=!1,this.timer=null,this.enableAudioFeedback=!1,this.recording=!1,this.deviceList=[],this.constraints={audio:{noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0,sampleRate:{ideal:44100}}},this.sampleRateConfigNotSupported=!1,this.contextManager=t,this.configService=e}init(){return fe(this,void 0,void 0,(function*(){var t;if(this.isRecordingAvailable()){this.sampleRateConfigNotSupported=!navigator.mediaDevices.getSupportedConstraints().sampleRate,this.contextManager&&(this.sampleRateConfigNotSupported?this.contextManager.createNewContext(0):this.contextManager.createNewContextIfNeeded()),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_INIT);try{const t=yield navigator.mediaDevices.getUserMedia(this.constraints);this.contextManager&&this.contextManager.currentContext&&this.contextManager.currentContext.resume(),yield this.setup(t,!1,!1),this.alreadyInit=!0,this.timer=new _i(0,1),this.timer.onCount((()=>{var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_COUNT_UPDATE)})),this.successCallback()}catch(t){console.error(t);if(t)switch(t.name){case"SecurityError":case"NotAllowedError":this.errorCallback();break;case"NotFoundError":this.notFoundErrorCallback();break;case"NotSupportedError":this.sampleRateConfigNotSupported||(this.sampleRateConfigNotSupported=!0,this.init());break;default:this.unknownErrorCallback()}}navigator.mediaDevices.ondevicechange=()=>this.updateInputList()}}))}successCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_SUCCESS)}errorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_ERROR)}notFoundErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_NOT_FOUND_ERROR)}unknownErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_UNKNOWN_ERROR)}audioFeedback(t){var e;this.contextManager&&this.contextManager.currentContext&&(t?(this.input&&this.input.connect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!0):(this.input&&this.input.connect(this.contextManager.currentContext.destination)&&this.input.disconnect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!1),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.RECORDER_UPDATE_CONSTRAINTS))}getConstraints(){if(this.stream){const t=this.stream.getTracks();if(t&&t.length>0)return t[0].getSettings()}return null}updateConstraints(){var t;const e=this.getConstraints();e&&(this.constraints.audio=Object.assign(this.constraints.audio,e),null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_UPDATE_CONSTRAINTS))}resetConstraints(t){return fe(this,void 0,void 0,(function*(){if(this.stream){const e=this.enableAudioFeedback,i=this.recording,r=this.stream.getTracks();if(t&&(this.updateConstraints(),this.constraints.audio=Object.assign(this.constraints.audio,t.audio)),r&&r.length>0)try{yield r[0].applyConstraints(this.constraints.audio);const n=this.getConstraints(),o=t?Object.keys(t.audio)[0]:"";if(this.audioFeedback(!1),this.pause(),!t||n&&n[o]!=t.audio[o]){this.stopStream();const t=yield navigator.mediaDevices.getUserMedia(this.constraints);yield this.setup(t,i,e)}else yield this.setup(null,i,e)}catch(t){this.errorCallback()}}}))}setup(t,e,i){return fe(this,void 0,void 0,(function*(){t&&this.contextManager&&this.contextManager.currentContext&&(this.input=this.contextManager.currentContext.createMediaStreamSource(t),this.stream=t),this.recorder&&this.input&&(yield this.recorder.setup(this.input),e&&(yield this.record())),this.audioFeedback(i),this.updateConstraints(),yield this.updateInputList()}))}setNoiseSuppression(t){this.resetConstraints({audio:{noiseSuppression:t}})}setAutoGain(t){this.resetConstraints({audio:{autoGainControl:t}})}setEchoCancellation(t){this.resetConstraints({audio:{echoCancellation:t}})}updateInputList(){return fe(this,void 0,void 0,(function*(){if(this.deviceList){const t=yield navigator.mediaDevices.enumerateDevices();this.deviceList=[],t.forEach((t=>{"audioinput"==t.kind&&this.deviceList.push(t)}))}}))}changeInput(t,e){e&&(this.constraints.audio.deviceId=t,this.constraints.audio.groupId=e,this.resetConstraints())}record(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.configService&&this.input&&(this.recorder||(this.recorder=new xe({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"audio/wav"}),yield this.recorder.setup(this.input)),this.recorder&&this.recorder.record(),this.timer&&this.timer.start(),this.recording=!0,this.eventEmitter&&this.eventEmitter.emit(exports.EventType.RECORDER_RECORDING))}))}stop(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.recorder&&(this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,this.recorder.getBuffer((t=>{var e;if(this.contextManager&&this.contextManager.currentContext){this.contextManager.currentContext.resume();const i=this.contextManager.currentContext.createBuffer(2,t[0].length,this.contextManager.currentContext.sampleRate);i.getChannelData(0).set(t[0]),i.getChannelData(1).set(t[1]),null===(e=this.eventEmitter)||void 0===e||e.emit(exports.EventType.RECORDER_STOPPED,i),this.reset()}})))}))}pause(){var t;this.alreadyInit&&(this.recorder&&this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,null===(t=this.eventEmitter)||void 0===t||t.emit(exports.EventType.RECORDER_PAUSED))}stopStream(){if(this.stream){const t=this.stream.getTracks();for(let e=0,i=t.length;e{const r=e.numberOfChannels,n=t.sampleRate*e.duration+2*t.sampleRate,o=t.createBuffer(r,n,t.sampleRate);for(let t=0;tAi.get(ce.EntryPointFilter))),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.frequencyBooster=200,this.frequencyReduce=200,this.dbBooster=15,this.dbReduce=-2}getNode(t){const e=t.createBiquadFilter();e.type="lowshelf",e.frequency.value=this.frequencyBooster,e.gain.value=this.dbBooster;const i=t.createBiquadFilter();return i.type="highshelf",i.frequency.value=this.frequencyReduce,i.gain.value=this.dbReduce,i.connect(e),{input:i,output:e}}get order(){return 3}get id(){return ge.FILTERS_NAMES.BASS_BOOST}getSettings(){return{frequencyBooster:this.frequencyBooster,frequencyReduce:this.frequencyReduce,dbBooster:this.dbBooster,dbReduce:this.dbReduce}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"frequencyBooster":this.frequencyBooster=parseInt(e);break;case"frequencyReduce":this.frequencyReduce=parseInt(e);break;case"dbBooster":this.dbBooster=parseInt(e);break;case"dbReduce":this.dbReduce=parseInt(e)}}))}}),Ai.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.bits=16,this.normFreq=.9}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.BITCRUSHER}get workletName(){return ge.WORKLET_NAMES.BITCRUSHER}get order(){return 6}get id(){return ge.FILTERS_NAMES.BITCRUSHER}getSettings(){return{bits:this.bits,normFreq:this.normFreq}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"bits":this.bits=parseInt(e);break;case"normFreq":this.normFreq=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.delay=.2,this.gain=.75}getNode(t){const e=t.createDelay(179);e.delayTime.value=this.delay;const i=t.createGain();return i.gain.value=this.gain,i.connect(e),e.connect(i),{input:i,output:e}}get order(){return 7}get id(){return ge.FILTERS_NAMES.ECHO}getAddingTime(){return 5}getSettings(){return{delay:this.delay,gain:this.gain}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"delay":this.delay=parseFloat(e);break;case"gain":this.gain=parseFloat(e)}}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.highFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="highpass",e.frequency.value=this.highFrequency,{input:e,output:e}}get order(){return 4}get id(){return ge.FILTERS_NAMES.HIGH_PASS}getSettings(){return{highFrequency:this.highFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"highFrequency"===t)this.highFrequency=parseInt(e)}))}}),Ai.bind(ce.Filters).to(ti),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.lowFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="lowpass",e.frequency.value=this.lowFrequency,{input:e,output:e}}get order(){return 5}get id(){return ge.FILTERS_NAMES.LOW_PASS}getSettings(){return{lowFrequency:this.lowFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"lowFrequency"===t)this.lowFrequency=parseInt(e)}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT,this.reverbCustomEnvironmentAddTime=5,this.customEnvironment=null}getNode(t){const e=t.createConvolver();this.reverbEnvironment&&("custom"!=this.reverbEnvironment.url||this.customEnvironment)||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT);const i=this.getReverbBuffer(t);return i&&(e.buffer=i),{input:e,output:e}}getReverbBuffer(t){if("custom"==this.reverbEnvironment.url&&this.customEnvironment){if(this.customEnvironment.sampleRate===t.sampleRate)return this.customEnvironment;this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT}else if(this.bufferFetcherService)return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url)}get order(){return 9}get id(){return ge.FILTERS_NAMES.REVERB}getAddingTime(){const t=this.getSettings();if(t&&t.reverbEnvironment){if("custom"==t.reverbEnvironment.value)return this.reverbCustomEnvironmentAddTime;if(t.reverbEnvironment.additionalData)return t.reverbEnvironment.additionalData.addDuration}return 0}getSettings(){var t;return this.reverbEnvironment?{reverbEnvironment:{name:this.reverbEnvironment.name,value:this.reverbEnvironment.url,additionalData:{size:this.reverbEnvironment.size,link:this.reverbEnvironment.link,addDuration:this.reverbEnvironment.addDuration}},downloadedBuffers:null===(t=this.bufferFetcherService)||void 0===t?void 0:t.getDownloadedBuffersList(),hasCustomEnvironment:!!this.customEnvironment,reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}:{reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){var i;if("reverbEnvironment"==t){const t=e;if(t){const e=t.value;try{"custom"!=e&&(yield null===(i=this.bufferFetcherService)||void 0===i?void 0:i.fetchBuffer(e)),t.additionalData?this.reverbEnvironment={name:t.name,url:e,size:t.additionalData.size,addDuration:t.additionalData.addDuration,link:t.additionalData.link}:this.reverbEnvironment={name:t.name,url:e,size:0,addDuration:0,link:""}}catch(t){}}}else"reverbCustomEnvironmentAddTime"==t?Se.isSettingValueValid(e)&&(this.reverbCustomEnvironmentAddTime=parseInt(e)):"reverbCustomEnvironmentFile"==t&&this.bufferDecoderService&&e&&(this.customEnvironment=yield this.bufferDecoderService.decodeBufferFromFile(e),this.customEnvironment||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT))}))}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){var t;const e=this.getSettings();if(e){const i=null===(t=e.reverbEnvironment)||void 0===t?void 0:t.value;if(i&&"custom"!==i&&this.bufferFetcherService)return yield this.bufferFetcherService.fetchBuffer(i),!0}return!1}))}}),Ai.bind(ce.Filters).to(class extends He{getNode(t){const e=t.createBiquadFilter();e.type="lowpass",e.frequency.value=2e3;const i=t.createBiquadFilter();i.type="lowpass",i.frequency.value=2e3;const r=t.createBiquadFilter();r.type="highpass",r.frequency.value=500;const n=t.createBiquadFilter();return n.type="highpass",n.frequency.value=500,e.connect(i),i.connect(r),r.connect(n),{input:e,output:n}}get order(){return 7}get id(){return ge.FILTERS_NAMES.TELEPHONIZER}getSettings(){return{}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.currentVocoder=null,this.modulatorGainValue=1,this.carrierSampleGainValue=0,this.oscillatorGainValue=1,this.noiseGainValue=.2,this.oscillatorDetuneValue=0}getNode(t){var e;const i=null===(e=this.bufferFetcherService)||void 0===e?void 0:e.getAudioBuffer(ge.VOCODER_MODULATOR);this.currentVocoder=new yi(t,i),this.currentVocoder.init(),this.applyCurrentSettingsToVocoder();const{modulatorGain:r,outputGain:n}=this.currentVocoder.getNodes();return{input:r,output:n}}getSettings(){return{modulatorGainValue:this.modulatorGainValue,carrierSampleGainValue:this.carrierSampleGainValue,oscillatorGainValue:this.oscillatorGainValue,noiseGainValue:this.noiseGainValue,oscillatorDetuneValue:this.oscillatorDetuneValue}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"modulatorGainValue":this.modulatorGainValue=parseFloat(e);break;case"carrierSampleGainValue":this.carrierSampleGainValue=parseFloat(e);break;case"oscillatorGainValue":this.oscillatorGainValue=parseFloat(e);break;case"noiseGainValue":this.noiseGainValue=parseFloat(e);break;case"oscillatorDetuneValue":this.oscillatorDetuneValue=parseFloat(e)}this.applyCurrentSettingsToVocoder()}}))}applyCurrentSettingsToVocoder(){this.currentVocoder&&(this.currentVocoder.updateModGain(this.modulatorGainValue),this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue),this.currentVocoder.updateSynthLevel(this.oscillatorGainValue),this.currentVocoder.updateNoiseLevel(this.noiseGainValue),this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue))}get order(){return 1}get id(){return ge.FILTERS_NAMES.VOCODER}}),Ai.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.currentTime=0,this.lastSampleCount=0,this.samplePerSecond=0,this.currentTimeSamplesPerSecond=0}receiveEvent(t){const e=performance.now(),i=t.data.samplesCount;"update"===t.data.command&&this.calculatePercentageProcessed(e,i),this.calculateRemainingTimeProcessing(e,i)}calculatePercentageProcessed(t,e){0===this.currentTime&&(this.currentTime=t);const i=t-this.currentTime,r=e/this._totalSamples;this.eventEmitter&&i>=ge.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL&&(this.eventEmitter.emit(exports.EventType.UPDATE_AUDIO_TREATMENT_PERCENT,100*r),this.currentTime=t)}calculateRemainingTimeProcessing(t,e){0===this.currentTimeSamplesPerSecond&&(this.currentTimeSamplesPerSecond=t);const i=t-this.currentTimeSamplesPerSecond,r=this._totalSamples-e;if(this.eventEmitter&&r<=0)this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,0);else if(this.eventEmitter&&i>=1e3){this.calculateSmoothedSamplePerSecond(i,e);const n=r/this.samplePerSecond;this.currentTimeSamplesPerSecond=t,this.lastSampleCount=e,isNaN(n)||!isFinite(n)?this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,-1):this.eventEmitter.emit(exports.EventType.UPDATE_REMAINING_TIME_ESTIMATED,n)}}calculateSmoothedSamplePerSecond(t,e){if(t>0){const i=(e-this.lastSampleCount)/(t/1e3);this.samplePerSecond=ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR*i+(1-ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR)*this.samplePerSecond}}get workletName(){return ge.WORKLET_NAMES.PASSTHROUGH}get workletPath(){return ge.WORKLET_PATHS.PASSTHROUGH}get order(){return 10}get id(){return ge.FILTERS_NAMES.PASSTHROUGH}set totalSamples(t){super.totalSamples=t,this.currentTime=0,this.currentTimeSamplesPerSecond=0,this.samplePerSecond=0,this.lastSampleCount=0}getSettings(){return{}}isEnabled(){return!0}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Ai.bind(ce.EventEmitter).to(me),Ai.bind(ce.AudioContextManager).to(Ee),Ai.bind(ce.AudioEditor).to(we),Ai.bind(ce.AudioProcessor).to(Te),Ai.bind(ce.BufferManager).to(Me),Ai.bind(ce.FilterManager).to(Pe),Ai.bind(ce.RendererManager).to(Ne),Ai.bind(ce.SaveBufferManager).to(ke),Ai.bind(ce.BufferPlayer).to(Ge),Ai.bind(ce.BufferFetcherService).to(Ve),Ai.bind(ce.BufferDecoderService).to(je),Ai.bind(ce.VoiceRecorder).to(Si);let wi=class{constructor(){this.mapConfig=new Map}getConfig(t){return this.mapConfig.get(t)}setConfig(t,e){this.mapConfig.set(t,e)}isCompatibilityModeEnabled(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED)}isCompatibilityModeChecked(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED)}isAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_AUDIO_WORKLET}isSoundtouchAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_SOUNDTOUCH_AUDIO_WORKLET}getBufferSize(){const t=this.getConfig(ge.PREFERENCES_KEYS.BUFFER_SIZE);return null!=t?parseInt(t):ge.DEFAULT_BUFFER_SIZE}getSampleRate(){const t=this.getConfig(ge.PREFERENCES_KEYS.SAMPLE_RATE);return null!=t?parseInt(t):ge.DEFAULT_SAMPLE_RATE}getBitrateMP3(){const t=this.getConfig(ge.PREFERENCES_KEYS.BITRATE_MP3);return null!=t?parseInt(t):ge.DEFAULT_MP3_BITRATE}enableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"true")}disableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"false")}getWorkletBasePath(){return""}getWorkerBasePath(){return""}getSoundBasePath(){return""}isInitialRenderingDisabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);return null!=t?"true"==t:ge.DISABLE_INITIAL_RENDERING}};wi=he([oe()],wi);var Ri=wi;class Ti{static createAudioEditor(t,e){return Ti.ready||(t?Ai.bind(ce.ConfigService).toDynamicValue((()=>t)):(Ai.bind(ce.ConfigService).to(Ri),console.warn("No ConfigService provided. Using default generic implementation.")),Ai.bind(ce.AudioBuffersToFetch).toConstantValue(e||[]),Ti.ready=!0),Ai.get(ce.AudioEditor)}static createVoiceRecorder(){return Ai.get(ce.VoiceRecorder)}static getAudioEditorInstance(){return Ai.get(ce.AudioEditor)}static getAudioPlayerInstance(){return Ai.get(ce.BufferPlayer)}static getAudioRecorderInstance(){return Ai.get(ce.VoiceRecorder)}static getEventEmitterInstance(){return Ai.get(ce.EventEmitter)}static getConfigServiceInstance(){return Ai.get(ce.ConfigService)}}Ti.ready=!1,exports.AbstractAudioElement=be,exports.AbstractAudioFilter=He,exports.AbstractAudioFilterWorklet=Ze,exports.AbstractAudioRenderer=qe,exports.AudioEditor=we,exports.BufferPlayer=Ge,exports.Constants=ge,exports.EventEmitter=me,exports.FilterManager=Pe,exports.GenericConfigService=Ri,exports.LimiterFilter=ti,exports.SoundStudioFactory=Ti,exports.UtilFunctions=Se,exports.VoiceRecorder=Si,exports.audioEditorContainer=Ai; //# sourceMappingURL=SimpleSoundStudioLibrary.js.map diff --git a/dist/cjs/SimpleSoundStudioLibrary.js.map b/dist/cjs/SimpleSoundStudioLibrary.js.map index 98b69c5..b85e639 100644 --- a/dist/cjs/SimpleSoundStudioLibrary.js.map +++ b/dist/cjs/SimpleSoundStudioLibrary.js.map @@ -1 +1 @@ -{"version":3,"file":"SimpleSoundStudioLibrary.js","sources":["../../node_modules/reflect-metadata/Reflect.js","../../node_modules/inversify/es/constants/metadata_keys.js","../../node_modules/inversify/es/constants/literal_types.js","../../node_modules/inversify/es/utils/id.js","../../node_modules/inversify/es/bindings/binding.js","../../node_modules/inversify/es/constants/error_msgs.js","../../node_modules/inversify/es/planning/metadata_reader.js","../../node_modules/inversify/es/bindings/binding_count.js","../../node_modules/inversify/es/utils/exceptions.js","../../node_modules/inversify/es/utils/serialization.js","../../node_modules/inversify/es/planning/context.js","../../node_modules/inversify/es/planning/metadata.js","../../node_modules/inversify/es/planning/plan.js","../../node_modules/inversify/es/annotation/lazy_service_identifier.js","../../node_modules/inversify/es/planning/queryable_string.js","../../node_modules/inversify/es/planning/target.js","../../node_modules/inversify/es/planning/reflection_utils.js","../../node_modules/inversify/es/planning/request.js","../../node_modules/inversify/es/planning/planner.js","../../node_modules/inversify/es/utils/async.js","../../node_modules/inversify/es/scope/scope.js","../../node_modules/inversify/es/utils/factory_type.js","../../node_modules/inversify/es/utils/binding_utils.js","../../node_modules/inversify/es/resolution/instantiation.js","../../node_modules/inversify/es/resolution/resolver.js","../../node_modules/inversify/es/syntax/constraint_helpers.js","../../node_modules/inversify/es/syntax/binding_when_syntax.js","../../node_modules/inversify/es/syntax/binding_on_syntax.js","../../node_modules/inversify/es/syntax/binding_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_in_syntax.js","../../node_modules/inversify/es/syntax/binding_in_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_to_syntax.js","../../node_modules/inversify/es/container/container_snapshot.js","../../node_modules/inversify/es/container/lookup.js","../../node_modules/inversify/es/utils/clonable.js","../../node_modules/inversify/es/container/module_activation_store.js","../../node_modules/inversify/es/container/container.js","../../node_modules/inversify/es/annotation/decorator_utils.js","../../node_modules/inversify/es/utils/js.js","../../node_modules/inversify/es/annotation/injectable.js","../../node_modules/inversify/es/annotation/inject_base.js","../../node_modules/inversify/es/annotation/inject.js","../../node_modules/inversify/es/annotation/multi_inject.js","../../lib/inversify.types.ts","../../node_modules/tslib/tslib.es6.js","../../lib/model/EventTypeEnum.ts","../../lib/model/Constants.ts","../../lib/utils/EventEmitter.ts","../../lib/audioEditor/AudioContextManager.ts","../../lib/filters/interfaces/AbstractAudioElement.ts","../../lib/utils/Functions.ts","../../lib/audioEditor/AudioEditor.ts","../../lib/audioEditor/AudioProcessor.ts","../../lib/audioEditor/BufferManager.ts","../../lib/audioEditor/FilterManager.ts","../../lib/audioEditor/RendererManager.ts","../../lib/recorder/getRecorderWorker.ts","../../lib/recorder/Recorder.ts","../../lib/audioEditor/SaveBufferManager.ts","../../lib/bufferPlayer/BufferPlayer.ts","../../lib/services/BufferFetcherService.ts","../../lib/services/BufferDecoderService.ts","../../lib/filters/interfaces/AbstractAudioRenderer.ts","../../lib/filters/interfaces/AbstractAudioFilter.ts","../../lib/workletPolyfill/AudioParamPolyfill.ts","../../lib/workletPolyfill/WorkletScriptProcessorNodeAdapter.ts","../../lib/workletPolyfill/RegisterProcessorPolyfill.ts","../../lib/workletPolyfill/SimpleAudioWorkletProcessor.ts","../../lib/workletPolyfill/AudioWorkletProcessorPolyfill.ts","../../lib/filters/interfaces/AbstractAudioFilterWorklet.ts","../../lib/filters/worklets/BitCrusher.worklet.ts","../../lib/utils/DelayBuffer.ts","../../lib/filters/worklets/Limiter.worklet.ts","../../node_modules/soundtouchjs/dist/soundtouch.js","../../lib/filters/worklets/SoundtouchWrapperFilterWorkletNode.ts","../../lib/utils/Vocoder.ts","../../lib/filters/worklets/Passthrough.worklet.ts","../../lib/utils/TimerSaveTime.ts","../../lib/voiceRecorder/VoiceRecorder.ts","../../lib/inversify.config.ts","../../lib/filters/SountouchWrapperFilter.ts","../../lib/filters/ReturnAudioRenderer.ts","../../lib/filters/BassBoosterFilter.ts","../../lib/filters/BitCrusherFilter.ts","../../lib/filters/EchoFilter.ts","../../lib/filters/HighPassFilter.ts","../../lib/filters/LimiterFilter.ts","../../lib/filters/LowPassFilter.ts","../../lib/filters/ReverbFilter.ts","../../lib/filters/TelephonizerFilter.ts","../../lib/filters/VocoderFilter.ts","../../lib/filters/PassThroughFilter.ts","../../lib/services/GenericConfigService.ts","../../lib/utils/SoundStudioFactory.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","export var NAMED_TAG = 'named';\r\nexport var NAME_TAG = 'name';\r\nexport var UNMANAGED_TAG = 'unmanaged';\r\nexport var OPTIONAL_TAG = 'optional';\r\nexport var INJECT_TAG = 'inject';\r\nexport var MULTI_INJECT_TAG = 'multi_inject';\r\nexport var TAGGED = 'inversify:tagged';\r\nexport var TAGGED_PROP = 'inversify:tagged_props';\r\nexport var PARAM_TYPES = 'inversify:paramtypes';\r\nexport var DESIGN_PARAM_TYPES = 'design:paramtypes';\r\nexport var POST_CONSTRUCT = 'post_construct';\r\nexport var PRE_DESTROY = 'pre_destroy';\r\nfunction getNonCustomTagKeys() {\r\n return [\r\n INJECT_TAG,\r\n MULTI_INJECT_TAG,\r\n NAME_TAG,\r\n UNMANAGED_TAG,\r\n NAMED_TAG,\r\n OPTIONAL_TAG,\r\n ];\r\n}\r\nexport var NON_CUSTOM_TAG_KEYS = getNonCustomTagKeys();\r\n","var BindingScopeEnum = {\r\n Request: 'Request',\r\n Singleton: 'Singleton',\r\n Transient: 'Transient'\r\n};\r\nvar BindingTypeEnum = {\r\n ConstantValue: 'ConstantValue',\r\n Constructor: 'Constructor',\r\n DynamicValue: 'DynamicValue',\r\n Factory: 'Factory',\r\n Function: 'Function',\r\n Instance: 'Instance',\r\n Invalid: 'Invalid',\r\n Provider: 'Provider'\r\n};\r\nvar TargetTypeEnum = {\r\n ClassProperty: 'ClassProperty',\r\n ConstructorArgument: 'ConstructorArgument',\r\n Variable: 'Variable'\r\n};\r\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\r\n","var idCounter = 0;\r\nfunction id() {\r\n return idCounter++;\r\n}\r\nexport { id };\r\n","import { BindingScopeEnum, BindingTypeEnum } from '../constants/literal_types';\r\nimport { id } from '../utils/id';\r\nvar Binding = (function () {\r\n function Binding(serviceIdentifier, scope) {\r\n this.id = id();\r\n this.activated = false;\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.scope = scope;\r\n this.type = BindingTypeEnum.Invalid;\r\n this.constraint = function (request) { return true; };\r\n this.implementationType = null;\r\n this.cache = null;\r\n this.factory = null;\r\n this.provider = null;\r\n this.onActivation = null;\r\n this.onDeactivation = null;\r\n this.dynamicValue = null;\r\n }\r\n Binding.prototype.clone = function () {\r\n var clone = new Binding(this.serviceIdentifier, this.scope);\r\n clone.activated = (clone.scope === BindingScopeEnum.Singleton) ? this.activated : false;\r\n clone.implementationType = this.implementationType;\r\n clone.dynamicValue = this.dynamicValue;\r\n clone.scope = this.scope;\r\n clone.type = this.type;\r\n clone.factory = this.factory;\r\n clone.provider = this.provider;\r\n clone.constraint = this.constraint;\r\n clone.onActivation = this.onActivation;\r\n clone.onDeactivation = this.onDeactivation;\r\n clone.cache = this.cache;\r\n return clone;\r\n };\r\n return Binding;\r\n}());\r\nexport { Binding };\r\n","export var DUPLICATED_INJECTABLE_DECORATOR = 'Cannot apply @injectable decorator multiple times.';\r\nexport var DUPLICATED_METADATA = 'Metadata key was used more than once in a parameter:';\r\nexport var NULL_ARGUMENT = 'NULL argument';\r\nexport var KEY_NOT_FOUND = 'Key Not Found';\r\nexport var AMBIGUOUS_MATCH = 'Ambiguous match found for serviceIdentifier:';\r\nexport var CANNOT_UNBIND = 'Could not unbind serviceIdentifier:';\r\nexport var NOT_REGISTERED = 'No matching bindings found for serviceIdentifier:';\r\nexport var MISSING_INJECTABLE_ANNOTATION = 'Missing required @injectable annotation in:';\r\nexport var MISSING_INJECT_ANNOTATION = 'Missing required @inject or @multiInject annotation in:';\r\nexport var UNDEFINED_INJECT_ANNOTATION = function (name) {\r\n return \"@inject called with undefined this could mean that the class \" + name + \" has \" +\r\n 'a circular dependency problem. You can use a LazyServiceIdentifier to ' +\r\n 'overcome this limitation.';\r\n};\r\nexport var CIRCULAR_DEPENDENCY = 'Circular dependency found:';\r\nexport var NOT_IMPLEMENTED = 'Sorry, this feature is not fully implemented yet.';\r\nexport var INVALID_BINDING_TYPE = 'Invalid binding type:';\r\nexport var NO_MORE_SNAPSHOTS_AVAILABLE = 'No snapshot available to restore.';\r\nexport var INVALID_MIDDLEWARE_RETURN = 'Invalid return type in middleware. Middleware must return!';\r\nexport var INVALID_FUNCTION_BINDING = 'Value provided to function binding must be a function!';\r\nexport var LAZY_IN_SYNC = function (key) { return \"You are attempting to construct '\" + key + \"' in a synchronous way\\n but it has asynchronous dependencies.\"; };\r\nexport var INVALID_TO_SELF_VALUE = 'The toSelf function can only be applied when a constructor is ' +\r\n 'used as service identifier';\r\nexport var INVALID_DECORATOR_OPERATION = 'The @inject @multiInject @tagged and @named decorators ' +\r\n 'must be applied to the parameters of a class constructor or a class property.';\r\nexport var ARGUMENTS_LENGTH_MISMATCH = function () {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n return 'The number of constructor arguments in the derived class ' +\r\n (values[0] + \" must be >= than the number of constructor arguments of its base class.\");\r\n};\r\nexport var CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = 'Invalid Container constructor argument. Container options ' +\r\n 'must be an object.';\r\nexport var CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = 'Invalid Container option. Default scope must ' +\r\n 'be a string (\"singleton\" or \"transient\").';\r\nexport var CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = 'Invalid Container option. Auto bind injectable must ' +\r\n 'be a boolean';\r\nexport var CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = 'Invalid Container option. Skip base check must ' +\r\n 'be a boolean';\r\nexport var MULTIPLE_PRE_DESTROY_METHODS = 'Cannot apply @preDestroy decorator multiple times in the same class';\r\nexport var MULTIPLE_POST_CONSTRUCT_METHODS = 'Cannot apply @postConstruct decorator multiple times in the same class';\r\nexport var ASYNC_UNBIND_REQUIRED = 'Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)';\r\nexport var POST_CONSTRUCT_ERROR = function (clazz, errorMessage) { return \"@postConstruct error in class \" + clazz + \": \" + errorMessage; };\r\nexport var PRE_DESTROY_ERROR = function (clazz, errorMessage) { return \"@preDestroy error in class \" + clazz + \": \" + errorMessage; };\r\nexport var ON_DEACTIVATION_ERROR = function (clazz, errorMessage) { return \"onDeactivation() error in class \" + clazz + \": \" + errorMessage; };\r\nexport var CIRCULAR_DEPENDENCY_IN_FACTORY = function (factoryType, serviceIdentifier) {\r\n return \"It looks like there is a circular dependency in one of the '\" + factoryType + \"' bindings. Please investigate bindings with \" +\r\n (\"service identifier '\" + serviceIdentifier + \"'.\");\r\n};\r\nexport var STACK_OVERFLOW = 'Maximum call stack size exceeded';\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar MetadataReader = (function () {\r\n function MetadataReader() {\r\n }\r\n MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) {\r\n var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc);\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);\r\n return {\r\n compilerGeneratedMetadata: compilerGeneratedMetadata,\r\n userGeneratedMetadata: userGeneratedMetadata || {}\r\n };\r\n };\r\n MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) {\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || [];\r\n return userGeneratedMetadata;\r\n };\r\n return MetadataReader;\r\n}());\r\nexport { MetadataReader };\r\n","export var BindingCount = {\r\n MultipleBindingsAvailable: 2,\r\n NoBindingsAvailable: 0,\r\n OnlyOneBindingAvailable: 1\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nexport function isStackOverflowExeption(error) {\r\n return (error instanceof RangeError ||\r\n error.message === ERROR_MSGS.STACK_OVERFLOW);\r\n}\r\nexport var tryAndThrowErrorIfStackOverflow = function (fn, errorCallback) {\r\n try {\r\n return fn();\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n error = errorCallback();\r\n }\r\n throw error;\r\n }\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nfunction getServiceIdentifierAsString(serviceIdentifier) {\r\n if (typeof serviceIdentifier === 'function') {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier.name;\r\n }\r\n else if (typeof serviceIdentifier === 'symbol') {\r\n return serviceIdentifier.toString();\r\n }\r\n else {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier;\r\n }\r\n}\r\nfunction listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) {\r\n var registeredBindingsList = '';\r\n var registeredBindings = getBindings(container, serviceIdentifier);\r\n if (registeredBindings.length !== 0) {\r\n registeredBindingsList = '\\nRegistered bindings:';\r\n registeredBindings.forEach(function (binding) {\r\n var name = 'Object';\r\n if (binding.implementationType !== null) {\r\n name = getFunctionName(binding.implementationType);\r\n }\r\n registeredBindingsList = registeredBindingsList + \"\\n \" + name;\r\n if (binding.constraint.metaData) {\r\n registeredBindingsList = registeredBindingsList + \" - \" + binding.constraint.metaData;\r\n }\r\n });\r\n }\r\n return registeredBindingsList;\r\n}\r\nfunction alreadyDependencyChain(request, serviceIdentifier) {\r\n if (request.parentRequest === null) {\r\n return false;\r\n }\r\n else if (request.parentRequest.serviceIdentifier === serviceIdentifier) {\r\n return true;\r\n }\r\n else {\r\n return alreadyDependencyChain(request.parentRequest, serviceIdentifier);\r\n }\r\n}\r\nfunction dependencyChainToString(request) {\r\n function _createStringArr(req, result) {\r\n if (result === void 0) { result = []; }\r\n var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier);\r\n result.push(serviceIdentifier);\r\n if (req.parentRequest !== null) {\r\n return _createStringArr(req.parentRequest, result);\r\n }\r\n return result;\r\n }\r\n var stringArr = _createStringArr(request);\r\n return stringArr.reverse().join(' --> ');\r\n}\r\nfunction circularDependencyToException(request) {\r\n request.childRequests.forEach(function (childRequest) {\r\n if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) {\r\n var services = dependencyChainToString(childRequest);\r\n throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + \" \" + services);\r\n }\r\n else {\r\n circularDependencyToException(childRequest);\r\n }\r\n });\r\n}\r\nfunction listMetadataForTarget(serviceIdentifierString, target) {\r\n if (target.isTagged() || target.isNamed()) {\r\n var m_1 = '';\r\n var namedTag = target.getNamedTag();\r\n var otherTags = target.getCustomTags();\r\n if (namedTag !== null) {\r\n m_1 += namedTag.toString() + '\\n';\r\n }\r\n if (otherTags !== null) {\r\n otherTags.forEach(function (tag) {\r\n m_1 += tag.toString() + '\\n';\r\n });\r\n }\r\n return \" \" + serviceIdentifierString + \"\\n \" + serviceIdentifierString + \" - \" + m_1;\r\n }\r\n else {\r\n return \" \" + serviceIdentifierString;\r\n }\r\n}\r\nfunction getFunctionName(func) {\r\n if (func.name) {\r\n return func.name;\r\n }\r\n else {\r\n var name_1 = func.toString();\r\n var match = name_1.match(/^function\\s*([^\\s(]+)/);\r\n return match ? match[1] : \"Anonymous function: \" + name_1;\r\n }\r\n}\r\nfunction getSymbolDescription(symbol) {\r\n return symbol.toString().slice(7, -1);\r\n}\r\nexport { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription };\r\n","import { id } from '../utils/id';\r\nvar Context = (function () {\r\n function Context(container) {\r\n this.id = id();\r\n this.container = container;\r\n }\r\n Context.prototype.addPlan = function (plan) {\r\n this.plan = plan;\r\n };\r\n Context.prototype.setCurrentRequest = function (currentRequest) {\r\n this.currentRequest = currentRequest;\r\n };\r\n return Context;\r\n}());\r\nexport { Context };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar Metadata = (function () {\r\n function Metadata(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n Metadata.prototype.toString = function () {\r\n if (this.key === METADATA_KEY.NAMED_TAG) {\r\n return \"named: \" + String(this.value).toString() + \" \";\r\n }\r\n else {\r\n return \"tagged: { key:\" + this.key.toString() + \", value: \" + String(this.value) + \" }\";\r\n }\r\n };\r\n return Metadata;\r\n}());\r\nexport { Metadata };\r\n","var Plan = (function () {\r\n function Plan(parentContext, rootRequest) {\r\n this.parentContext = parentContext;\r\n this.rootRequest = rootRequest;\r\n }\r\n return Plan;\r\n}());\r\nexport { Plan };\r\n","var LazyServiceIdentifier = (function () {\r\n function LazyServiceIdentifier(cb) {\r\n this._cb = cb;\r\n }\r\n LazyServiceIdentifier.prototype.unwrap = function () {\r\n return this._cb();\r\n };\r\n return LazyServiceIdentifier;\r\n}());\r\nexport { LazyServiceIdentifier };\r\n","var QueryableString = (function () {\r\n function QueryableString(str) {\r\n this.str = str;\r\n }\r\n QueryableString.prototype.startsWith = function (searchString) {\r\n return this.str.indexOf(searchString) === 0;\r\n };\r\n QueryableString.prototype.endsWith = function (searchString) {\r\n var reverseString = '';\r\n var reverseSearchString = searchString.split('').reverse().join('');\r\n reverseString = this.str.split('').reverse().join('');\r\n return this.startsWith.call({ str: reverseString }, reverseSearchString);\r\n };\r\n QueryableString.prototype.contains = function (searchString) {\r\n return (this.str.indexOf(searchString) !== -1);\r\n };\r\n QueryableString.prototype.equals = function (compareString) {\r\n return this.str === compareString;\r\n };\r\n QueryableString.prototype.value = function () {\r\n return this.str;\r\n };\r\n return QueryableString;\r\n}());\r\nexport { QueryableString };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { id } from '../utils/id';\r\nimport { getSymbolDescription } from '../utils/serialization';\r\nimport { Metadata } from './metadata';\r\nimport { QueryableString } from './queryable_string';\r\nvar Target = (function () {\r\n function Target(type, identifier, serviceIdentifier, namedOrTagged) {\r\n this.id = id();\r\n this.type = type;\r\n this.serviceIdentifier = serviceIdentifier;\r\n var queryableName = typeof identifier === 'symbol' ? getSymbolDescription(identifier) : identifier;\r\n this.name = new QueryableString(queryableName || '');\r\n this.identifier = identifier;\r\n this.metadata = new Array();\r\n var metadataItem = null;\r\n if (typeof namedOrTagged === 'string') {\r\n metadataItem = new Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged);\r\n }\r\n else if (namedOrTagged instanceof Metadata) {\r\n metadataItem = namedOrTagged;\r\n }\r\n if (metadataItem !== null) {\r\n this.metadata.push(metadataItem);\r\n }\r\n }\r\n Target.prototype.hasTag = function (key) {\r\n for (var _i = 0, _a = this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Target.prototype.isArray = function () {\r\n return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG);\r\n };\r\n Target.prototype.matchesArray = function (name) {\r\n return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name);\r\n };\r\n Target.prototype.isNamed = function () {\r\n return this.hasTag(METADATA_KEY.NAMED_TAG);\r\n };\r\n Target.prototype.isTagged = function () {\r\n return this.metadata.some(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n };\r\n Target.prototype.isOptional = function () {\r\n return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true);\r\n };\r\n Target.prototype.getNamedTag = function () {\r\n if (this.isNamed()) {\r\n return this.metadata.filter(function (m) { return m.key === METADATA_KEY.NAMED_TAG; })[0];\r\n }\r\n return null;\r\n };\r\n Target.prototype.getCustomTags = function () {\r\n if (this.isTagged()) {\r\n return this.metadata.filter(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n Target.prototype.matchesNamedTag = function (name) {\r\n return this.matchesTag(METADATA_KEY.NAMED_TAG)(name);\r\n };\r\n Target.prototype.matchesTag = function (key) {\r\n var _this = this;\r\n return function (value) {\r\n for (var _i = 0, _a = _this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key && m.value === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n };\r\n return Target;\r\n}());\r\nexport { Target };\r\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { LazyServiceIdentifier } from '../annotation/lazy_service_identifier';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFunctionName } from '../utils/serialization';\r\nimport { Target } from './target';\r\nfunction getDependencies(metadataReader, func) {\r\n var constructorName = getFunctionName(func);\r\n return getTargets(metadataReader, constructorName, func, false);\r\n}\r\nfunction getTargets(metadataReader, constructorName, func, isBaseClass) {\r\n var metadata = metadataReader.getConstructorMetadata(func);\r\n var serviceIdentifiers = metadata.compilerGeneratedMetadata;\r\n if (serviceIdentifiers === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var constructorArgsMetadata = metadata.userGeneratedMetadata;\r\n var keys = Object.keys(constructorArgsMetadata);\r\n var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);\r\n var hasOptionalParameters = keys.length > func.length;\r\n var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;\r\n var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);\r\n var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);\r\n var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);\r\n return targets;\r\n}\r\nfunction getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {\r\n var targetMetadata = constructorArgsMetadata[index.toString()] || [];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var isManaged = metadata.unmanaged !== true;\r\n var serviceIdentifier = serviceIdentifiers[index];\r\n var injectIdentifier = metadata.inject || metadata.multiInject;\r\n serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);\r\n if (serviceIdentifier instanceof LazyServiceIdentifier) {\r\n serviceIdentifier = serviceIdentifier.unwrap();\r\n }\r\n if (isManaged) {\r\n var isObject = serviceIdentifier === Object;\r\n var isFunction = serviceIdentifier === Function;\r\n var isUndefined = serviceIdentifier === undefined;\r\n var isUnknownType = isObject || isFunction || isUndefined;\r\n if (!isBaseClass && isUnknownType) {\r\n var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + \" argument \" + index + \" in class \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var target = new Target(TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n return target;\r\n }\r\n return null;\r\n}\r\nfunction getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {\r\n var targets = [];\r\n for (var i = 0; i < iterations; i++) {\r\n var index = i;\r\n var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);\r\n if (target !== null) {\r\n targets.push(target);\r\n }\r\n }\r\n return targets;\r\n}\r\nfunction _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {\r\n var serviceIdentifier = (inject || multiInject);\r\n if (serviceIdentifier === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" for property \" + String(propertyName) + \" in class \" + className + \".\";\r\n throw new Error(msg);\r\n }\r\n return serviceIdentifier;\r\n}\r\nfunction getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {\r\n var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);\r\n var targets = [];\r\n var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);\r\n var stringKeys = Object.keys(classPropsMetadata);\r\n var keys = stringKeys.concat(symbolKeys);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var key = keys_1[_i];\r\n var targetMetadata = classPropsMetadata[key];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var identifier = metadata.targetName || key;\r\n var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);\r\n var target = new Target(TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n targets.push(target);\r\n }\r\n var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);\r\n targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);\r\n }\r\n return targets;\r\n}\r\nfunction getBaseClassDependencyCount(metadataReader, func) {\r\n var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseConstructorName = getFunctionName(baseConstructor);\r\n var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);\r\n var metadata = targets.map(function (t) { return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; }); });\r\n var unmanagedCount = [].concat.apply([], metadata).length;\r\n var dependencyCount = targets.length - unmanagedCount;\r\n if (dependencyCount > 0) {\r\n return dependencyCount;\r\n }\r\n else {\r\n return getBaseClassDependencyCount(metadataReader, baseConstructor);\r\n }\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nfunction formatTargetMetadata(targetMetadata) {\r\n var targetMetadataMap = {};\r\n targetMetadata.forEach(function (m) {\r\n targetMetadataMap[m.key.toString()] = m.value;\r\n });\r\n return {\r\n inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],\r\n multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],\r\n targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],\r\n unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]\r\n };\r\n}\r\nexport { getDependencies, getBaseClassDependencyCount, getFunctionName };\r\n","import { id } from '../utils/id';\r\nvar Request = (function () {\r\n function Request(serviceIdentifier, parentContext, parentRequest, bindings, target) {\r\n this.id = id();\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.parentContext = parentContext;\r\n this.parentRequest = parentRequest;\r\n this.target = target;\r\n this.childRequests = [];\r\n this.bindings = (Array.isArray(bindings) ? bindings : [bindings]);\r\n this.requestScope = parentRequest === null\r\n ? new Map()\r\n : null;\r\n }\r\n Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) {\r\n var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);\r\n this.childRequests.push(child);\r\n return child;\r\n };\r\n return Request;\r\n}());\r\nexport { Request };\r\n","import { BindingCount } from '../bindings/binding_count';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isStackOverflowExeption } from '../utils/exceptions';\r\nimport { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier } from '../utils/serialization';\r\nimport { Context } from './context';\r\nimport { Metadata } from './metadata';\r\nimport { Plan } from './plan';\r\nimport { getBaseClassDependencyCount, getDependencies, getFunctionName } from './reflection_utils';\r\nimport { Request } from './request';\r\nimport { Target } from './target';\r\nfunction getBindingDictionary(cntnr) {\r\n return cntnr._bindingDictionary;\r\n}\r\nfunction _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {\r\n var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;\r\n var injectMetadata = new Metadata(metadataKey, serviceIdentifier);\r\n var target = new Target(targetType, name, serviceIdentifier, injectMetadata);\r\n if (key !== undefined) {\r\n var tagMetadata = new Metadata(key, value);\r\n target.metadata.push(tagMetadata);\r\n }\r\n return target;\r\n}\r\nfunction _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {\r\n var bindings = getBindings(context.container, target.serviceIdentifier);\r\n var activeBindings = [];\r\n if (bindings.length === BindingCount.NoBindingsAvailable &&\r\n context.container.options.autoBindInjectable &&\r\n typeof target.serviceIdentifier === 'function' &&\r\n metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {\r\n context.container.bind(target.serviceIdentifier).toSelf();\r\n bindings = getBindings(context.container, target.serviceIdentifier);\r\n }\r\n if (!avoidConstraints) {\r\n activeBindings = bindings.filter(function (binding) {\r\n var request = new Request(binding.serviceIdentifier, context, parentRequest, binding, target);\r\n return binding.constraint(request);\r\n });\r\n }\r\n else {\r\n activeBindings = bindings;\r\n }\r\n _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);\r\n return activeBindings;\r\n}\r\nfunction _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {\r\n switch (bindings.length) {\r\n case BindingCount.NoBindingsAvailable:\r\n if (target.isOptional()) {\r\n return bindings;\r\n }\r\n else {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.NOT_REGISTERED;\r\n msg += listMetadataForTarget(serviceIdentifierString, target);\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n case BindingCount.OnlyOneBindingAvailable:\r\n return bindings;\r\n case BindingCount.MultipleBindingsAvailable:\r\n default:\r\n if (!target.isArray()) {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.AMBIGUOUS_MATCH + \" \" + serviceIdentifierString;\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n else {\r\n return bindings;\r\n }\r\n }\r\n}\r\nfunction _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {\r\n var activeBindings;\r\n var childRequest;\r\n if (parentRequest === null) {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);\r\n childRequest = new Request(serviceIdentifier, context, null, activeBindings, target);\r\n var thePlan = new Plan(context, childRequest);\r\n context.addPlan(thePlan);\r\n }\r\n else {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);\r\n childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);\r\n }\r\n activeBindings.forEach(function (binding) {\r\n var subChildRequest = null;\r\n if (target.isArray()) {\r\n subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);\r\n }\r\n else {\r\n if (binding.cache) {\r\n return;\r\n }\r\n subChildRequest = childRequest;\r\n }\r\n if (binding.type === BindingTypeEnum.Instance && binding.implementationType !== null) {\r\n var dependencies = getDependencies(metadataReader, binding.implementationType);\r\n if (!context.container.options.skipBaseClassChecks) {\r\n var baseClassDependencyCount = getBaseClassDependencyCount(metadataReader, binding.implementationType);\r\n if (dependencies.length < baseClassDependencyCount) {\r\n var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(getFunctionName(binding.implementationType));\r\n throw new Error(error);\r\n }\r\n }\r\n dependencies.forEach(function (dependency) {\r\n _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);\r\n });\r\n }\r\n });\r\n}\r\nfunction getBindings(container, serviceIdentifier) {\r\n var bindings = [];\r\n var bindingDictionary = getBindingDictionary(container);\r\n if (bindingDictionary.hasKey(serviceIdentifier)) {\r\n bindings = bindingDictionary.get(serviceIdentifier);\r\n }\r\n else if (container.parent !== null) {\r\n bindings = getBindings(container.parent, serviceIdentifier);\r\n }\r\n return bindings;\r\n}\r\nfunction plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {\r\n if (avoidConstraints === void 0) { avoidConstraints = false; }\r\n var context = new Context(container);\r\n var target = _createTarget(isMultiInject, targetType, serviceIdentifier, '', key, value);\r\n try {\r\n _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);\r\n return context;\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n circularDependencyToException(context.plan.rootRequest);\r\n }\r\n throw error;\r\n }\r\n}\r\nfunction createMockRequest(container, serviceIdentifier, key, value) {\r\n var target = new Target(TargetTypeEnum.Variable, '', serviceIdentifier, new Metadata(key, value));\r\n var context = new Context(container);\r\n var request = new Request(serviceIdentifier, context, null, [], target);\r\n return request;\r\n}\r\nexport { plan, createMockRequest, getBindingDictionary };\r\n","function isPromise(object) {\r\n var isObjectOrFunction = (typeof object === 'object' && object !== null) || typeof object === 'function';\r\n return isObjectOrFunction && typeof object.then === \"function\";\r\n}\r\nfunction isPromiseOrContainsPromise(object) {\r\n if (isPromise(object)) {\r\n return true;\r\n }\r\n return Array.isArray(object) && object.some(isPromise);\r\n}\r\nexport { isPromise, isPromiseOrContainsPromise };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { BindingScopeEnum } from '../constants/literal_types';\r\nimport { isPromise } from '../utils/async';\r\nexport var tryGetFromScope = function (requestScope, binding) {\r\n if ((binding.scope === BindingScopeEnum.Singleton) && binding.activated) {\r\n return binding.cache;\r\n }\r\n if (binding.scope === BindingScopeEnum.Request &&\r\n requestScope.has(binding.id)) {\r\n return requestScope.get(binding.id);\r\n }\r\n return null;\r\n};\r\nexport var saveToScope = function (requestScope, binding, result) {\r\n if (binding.scope === BindingScopeEnum.Singleton) {\r\n _saveToSingletonScope(binding, result);\r\n }\r\n if (binding.scope === BindingScopeEnum.Request) {\r\n _saveToRequestScope(requestScope, binding, result);\r\n }\r\n};\r\nvar _saveToRequestScope = function (requestScope, binding, result) {\r\n if (!requestScope.has(binding.id)) {\r\n requestScope.set(binding.id, result);\r\n }\r\n};\r\nvar _saveToSingletonScope = function (binding, result) {\r\n binding.cache = result;\r\n binding.activated = true;\r\n if (isPromise(result)) {\r\n void _saveAsyncResultToSingletonScope(binding, result);\r\n }\r\n};\r\nvar _saveAsyncResultToSingletonScope = function (binding, asyncResult) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n result = _a.sent();\r\n binding.cache = result;\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n binding.cache = null;\r\n binding.activated = false;\r\n throw ex_1;\r\n case 3: return [2];\r\n }\r\n });\r\n}); };\r\n","export var FactoryType;\r\n(function (FactoryType) {\r\n FactoryType[\"DynamicValue\"] = \"toDynamicValue\";\r\n FactoryType[\"Factory\"] = \"toFactory\";\r\n FactoryType[\"Provider\"] = \"toProvider\";\r\n})(FactoryType || (FactoryType = {}));\r\n","import { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { FactoryType } from './factory_type';\r\nexport var multiBindToService = function (container) {\r\n return function (service) {\r\n return function () {\r\n var types = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n types[_i] = arguments[_i];\r\n }\r\n return types.forEach(function (t) { return container.bind(t).toService(service); });\r\n };\r\n };\r\n};\r\nexport var ensureFullyBound = function (binding) {\r\n var boundValue = null;\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n boundValue = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n case BindingTypeEnum.Instance:\r\n boundValue = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.DynamicValue:\r\n boundValue = binding.dynamicValue;\r\n break;\r\n case BindingTypeEnum.Provider:\r\n boundValue = binding.provider;\r\n break;\r\n case BindingTypeEnum.Factory:\r\n boundValue = binding.factory;\r\n break;\r\n }\r\n if (boundValue === null) {\r\n var serviceIdentifierAsString = getServiceIdentifierAsString(binding.serviceIdentifier);\r\n throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + \" \" + serviceIdentifierAsString);\r\n }\r\n};\r\nexport var getFactoryDetails = function (binding) {\r\n switch (binding.type) {\r\n case BindingTypeEnum.Factory:\r\n return { factory: binding.factory, factoryType: FactoryType.Factory };\r\n case BindingTypeEnum.Provider:\r\n return { factory: binding.provider, factoryType: FactoryType.Provider };\r\n case BindingTypeEnum.DynamicValue:\r\n return { factory: binding.dynamicValue, factoryType: FactoryType.DynamicValue };\r\n default:\r\n throw new Error(\"Unexpected factory type \" + binding.type);\r\n }\r\n};\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR } from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nfunction _resolveRequests(childRequests, resolveRequest) {\r\n return childRequests.reduce(function (resolvedRequests, childRequest) {\r\n var injection = resolveRequest(childRequest);\r\n var targetType = childRequest.target.type;\r\n if (targetType === TargetTypeEnum.ConstructorArgument) {\r\n resolvedRequests.constructorInjections.push(injection);\r\n }\r\n else {\r\n resolvedRequests.propertyRequests.push(childRequest);\r\n resolvedRequests.propertyInjections.push(injection);\r\n }\r\n if (!resolvedRequests.isAsync) {\r\n resolvedRequests.isAsync = isPromiseOrContainsPromise(injection);\r\n }\r\n return resolvedRequests;\r\n }, { constructorInjections: [], propertyInjections: [], propertyRequests: [], isAsync: false });\r\n}\r\nfunction _createInstance(constr, childRequests, resolveRequest) {\r\n var result;\r\n if (childRequests.length > 0) {\r\n var resolved = _resolveRequests(childRequests, resolveRequest);\r\n var createInstanceWithInjectionsArg = __assign(__assign({}, resolved), { constr: constr });\r\n if (resolved.isAsync) {\r\n result = createInstanceWithInjectionsAsync(createInstanceWithInjectionsArg);\r\n }\r\n else {\r\n result = createInstanceWithInjections(createInstanceWithInjectionsArg);\r\n }\r\n }\r\n else {\r\n result = new constr();\r\n }\r\n return result;\r\n}\r\nfunction createInstanceWithInjections(args) {\r\n var _a;\r\n var instance = new ((_a = args.constr).bind.apply(_a, __spreadArray([void 0], args.constructorInjections, false)))();\r\n args.propertyRequests.forEach(function (r, index) {\r\n var property = r.target.identifier;\r\n var injection = args.propertyInjections[index];\r\n if (!r.target.isOptional() || injection !== undefined) {\r\n instance[property] = injection;\r\n }\r\n });\r\n return instance;\r\n}\r\nfunction createInstanceWithInjectionsAsync(args) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var constructorInjections, propertyInjections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, possiblyWaitInjections(args.constructorInjections)];\r\n case 1:\r\n constructorInjections = _a.sent();\r\n return [4, possiblyWaitInjections(args.propertyInjections)];\r\n case 2:\r\n propertyInjections = _a.sent();\r\n return [2, createInstanceWithInjections(__assign(__assign({}, args), { constructorInjections: constructorInjections, propertyInjections: propertyInjections }))];\r\n }\r\n });\r\n });\r\n}\r\nfunction possiblyWaitInjections(possiblePromiseinjections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var injections, _i, possiblePromiseinjections_1, injection;\r\n return __generator(this, function (_a) {\r\n injections = [];\r\n for (_i = 0, possiblePromiseinjections_1 = possiblePromiseinjections; _i < possiblePromiseinjections_1.length; _i++) {\r\n injection = possiblePromiseinjections_1[_i];\r\n if (Array.isArray(injection)) {\r\n injections.push(Promise.all(injection));\r\n }\r\n else {\r\n injections.push(injection);\r\n }\r\n }\r\n return [2, Promise.all(injections)];\r\n });\r\n });\r\n}\r\nfunction _getInstanceAfterPostConstruct(constr, result) {\r\n var postConstructResult = _postConstruct(constr, result);\r\n if (isPromise(postConstructResult)) {\r\n return postConstructResult.then(function () { return result; });\r\n }\r\n else {\r\n return result;\r\n }\r\n}\r\nfunction _postConstruct(constr, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr);\r\n try {\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error(POST_CONSTRUCT_ERROR(constr.name, e.message));\r\n }\r\n }\r\n }\r\n}\r\nfunction _validateInstanceResolution(binding, constr) {\r\n if (binding.scope !== BindingScopeEnum.Singleton) {\r\n _throwIfHandlingDeactivation(binding, constr);\r\n }\r\n}\r\nfunction _throwIfHandlingDeactivation(binding, constr) {\r\n var scopeErrorMessage = \"Class cannot be instantiated in \" + (binding.scope === BindingScopeEnum.Request ?\r\n 'request' :\r\n 'transient') + \" scope.\";\r\n if (typeof binding.onDeactivation === 'function') {\r\n throw new Error(ON_DEACTIVATION_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constr)) {\r\n throw new Error(PRE_DESTROY_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n}\r\nfunction resolveInstance(binding, constr, childRequests, resolveRequest) {\r\n _validateInstanceResolution(binding, constr);\r\n var result = _createInstance(constr, childRequests, resolveRequest);\r\n if (isPromise(result)) {\r\n return result.then(function (resolvedResult) { return _getInstanceAfterPostConstruct(constr, resolvedResult); });\r\n }\r\n else {\r\n return _getInstanceAfterPostConstruct(constr, result);\r\n }\r\n}\r\nexport { resolveInstance };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { getBindingDictionary } from '../planning/planner';\r\nimport { saveToScope, tryGetFromScope } from '../scope/scope';\r\nimport { isPromise } from '../utils/async';\r\nimport { getFactoryDetails, ensureFullyBound } from '../utils/binding_utils';\r\nimport { tryAndThrowErrorIfStackOverflow } from '../utils/exceptions';\r\nimport { resolveInstance } from './instantiation';\r\nvar _resolveRequest = function (requestScope) {\r\n return function (request) {\r\n request.parentContext.setCurrentRequest(request);\r\n var bindings = request.bindings;\r\n var childRequests = request.childRequests;\r\n var targetIsAnArray = request.target && request.target.isArray();\r\n var targetParentIsNotAnArray = !request.parentRequest ||\r\n !request.parentRequest.target ||\r\n !request.target ||\r\n !request.parentRequest.target.matchesArray(request.target.serviceIdentifier);\r\n if (targetIsAnArray && targetParentIsNotAnArray) {\r\n return childRequests.map(function (childRequest) {\r\n var _f = _resolveRequest(requestScope);\r\n return _f(childRequest);\r\n });\r\n }\r\n else {\r\n if (request.target.isOptional() && bindings.length === 0) {\r\n return undefined;\r\n }\r\n var binding = bindings[0];\r\n return _resolveBinding(requestScope, request, binding);\r\n }\r\n };\r\n};\r\nvar _resolveFactoryFromBinding = function (binding, context) {\r\n var factoryDetails = getFactoryDetails(binding);\r\n return tryAndThrowErrorIfStackOverflow(function () { return factoryDetails.factory.bind(binding)(context); }, function () { return new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryDetails.factoryType, context.currentRequest.serviceIdentifier.toString())); });\r\n};\r\nvar _getResolvedFromBinding = function (requestScope, request, binding) {\r\n var result;\r\n var childRequests = request.childRequests;\r\n ensureFullyBound(binding);\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n result = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n result = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.Instance:\r\n result = resolveInstance(binding, binding.implementationType, childRequests, _resolveRequest(requestScope));\r\n break;\r\n default:\r\n result = _resolveFactoryFromBinding(binding, request.parentContext);\r\n }\r\n return result;\r\n};\r\nvar _resolveInScope = function (requestScope, binding, resolveFromBinding) {\r\n var result = tryGetFromScope(requestScope, binding);\r\n if (result !== null) {\r\n return result;\r\n }\r\n result = resolveFromBinding();\r\n saveToScope(requestScope, binding, result);\r\n return result;\r\n};\r\nvar _resolveBinding = function (requestScope, request, binding) {\r\n return _resolveInScope(requestScope, binding, function () {\r\n var result = _getResolvedFromBinding(requestScope, request, binding);\r\n if (isPromise(result)) {\r\n result = result.then(function (resolved) { return _onActivation(request, binding, resolved); });\r\n }\r\n else {\r\n result = _onActivation(request, binding, result);\r\n }\r\n return result;\r\n });\r\n};\r\nfunction _onActivation(request, binding, resolved) {\r\n var result = _bindingActivation(request.parentContext, binding, resolved);\r\n var containersIterator = _getContainersIterator(request.parentContext.container);\r\n var container;\r\n var containersIteratorResult = containersIterator.next();\r\n do {\r\n container = containersIteratorResult.value;\r\n var context_1 = request.parentContext;\r\n var serviceIdentifier = request.serviceIdentifier;\r\n var activationsIterator = _getContainerActivationsForService(container, serviceIdentifier);\r\n if (isPromise(result)) {\r\n result = _activateContainerAsync(activationsIterator, context_1, result);\r\n }\r\n else {\r\n result = _activateContainer(activationsIterator, context_1, result);\r\n }\r\n containersIteratorResult = containersIterator.next();\r\n } while (containersIteratorResult.done !== true && !getBindingDictionary(container).hasKey(request.serviceIdentifier));\r\n return result;\r\n}\r\nvar _bindingActivation = function (context, binding, previousResult) {\r\n var result;\r\n if (typeof binding.onActivation === 'function') {\r\n result = binding.onActivation(context, previousResult);\r\n }\r\n else {\r\n result = previousResult;\r\n }\r\n return result;\r\n};\r\nvar _activateContainer = function (activationsIterator, context, result) {\r\n var activation = activationsIterator.next();\r\n while (!activation.done) {\r\n result = activation.value(context, result);\r\n if (isPromise(result)) {\r\n return _activateContainerAsync(activationsIterator, context, result);\r\n }\r\n activation = activationsIterator.next();\r\n }\r\n return result;\r\n};\r\nvar _activateContainerAsync = function (activationsIterator, context, resultPromise) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, activation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, resultPromise];\r\n case 1:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n _a.label = 2;\r\n case 2:\r\n if (!!activation.done) return [3, 4];\r\n return [4, activation.value(context, result)];\r\n case 3:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n return [3, 2];\r\n case 4: return [2, result];\r\n }\r\n });\r\n}); };\r\nvar _getContainerActivationsForService = function (container, serviceIdentifier) {\r\n var activations = container._activations;\r\n return activations.hasKey(serviceIdentifier) ? activations.get(serviceIdentifier).values() : [].values();\r\n};\r\nvar _getContainersIterator = function (container) {\r\n var containersStack = [container];\r\n var parent = container.parent;\r\n while (parent !== null) {\r\n containersStack.push(parent);\r\n parent = parent.parent;\r\n }\r\n var getNextContainer = function () {\r\n var nextContainer = containersStack.pop();\r\n if (nextContainer !== undefined) {\r\n return { done: false, value: nextContainer };\r\n }\r\n else {\r\n return { done: true, value: undefined };\r\n }\r\n };\r\n var containersIterator = {\r\n next: getNextContainer,\r\n };\r\n return containersIterator;\r\n};\r\nfunction resolve(context) {\r\n var _f = _resolveRequest(context.plan.rootRequest.requestScope);\r\n return _f(context.plan.rootRequest);\r\n}\r\nexport { resolve };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { Metadata } from '../planning/metadata';\r\nvar traverseAncerstors = function (request, constraint) {\r\n var parent = request.parentRequest;\r\n if (parent !== null) {\r\n return constraint(parent) ? true : traverseAncerstors(parent, constraint);\r\n }\r\n else {\r\n return false;\r\n }\r\n};\r\nvar taggedConstraint = function (key) { return function (value) {\r\n var constraint = function (request) {\r\n return request !== null && request.target !== null && request.target.matchesTag(key)(value);\r\n };\r\n constraint.metaData = new Metadata(key, value);\r\n return constraint;\r\n}; };\r\nvar namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG);\r\nvar typeConstraint = function (type) { return function (request) {\r\n var binding = null;\r\n if (request !== null) {\r\n binding = request.bindings[0];\r\n if (typeof type === 'string') {\r\n var serviceIdentifier = binding.serviceIdentifier;\r\n return serviceIdentifier === type;\r\n }\r\n else {\r\n var constructor = request.bindings[0].implementationType;\r\n return type === constructor;\r\n }\r\n }\r\n return false;\r\n}; };\r\nexport { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { namedConstraint, taggedConstraint, traverseAncerstors, typeConstraint } from './constraint_helpers';\r\nvar BindingWhenSyntax = (function () {\r\n function BindingWhenSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingWhenSyntax.prototype.when = function (constraint) {\r\n this._binding.constraint = constraint;\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetNamed = function (name) {\r\n this._binding.constraint = namedConstraint(name);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetIsDefault = function () {\r\n this._binding.constraint = function (request) {\r\n if (request === null) {\r\n return false;\r\n }\r\n var targetIsDefault = (request.target !== null) &&\r\n (!request.target.isNamed()) &&\r\n (!request.target.isTagged());\r\n return targetIsDefault;\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n this._binding.constraint = taggedConstraint(tag)(value);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenInjectedInto = function (parent) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && typeConstraint(parent)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && namedConstraint(name)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && taggedConstraint(tag)(value)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n return BindingWhenSyntax;\r\n}());\r\nexport { BindingWhenSyntax };\r\n","import { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingOnSyntax = (function () {\r\n function BindingOnSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingOnSyntax.prototype.onActivation = function (handler) {\r\n this._binding.onActivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n BindingOnSyntax.prototype.onDeactivation = function (handler) {\r\n this._binding.onDeactivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n return BindingOnSyntax;\r\n}());\r\nexport { BindingOnSyntax };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingWhenOnSyntax = (function () {\r\n function BindingWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n }\r\n BindingWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingWhenOnSyntax;\r\n}());\r\nexport { BindingWhenOnSyntax };\r\n","import { BindingScopeEnum } from '../constants/literal_types';\r\nimport { BindingWhenOnSyntax } from './binding_when_on_syntax';\r\nvar BindingInSyntax = (function () {\r\n function BindingInSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingInSyntax.prototype.inRequestScope = function () {\r\n this._binding.scope = BindingScopeEnum.Request;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inSingletonScope = function () {\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inTransientScope = function () {\r\n this._binding.scope = BindingScopeEnum.Transient;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n return BindingInSyntax;\r\n}());\r\nexport { BindingInSyntax };\r\n","import { BindingInSyntax } from './binding_in_syntax';\r\nimport { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingInWhenOnSyntax = (function () {\r\n function BindingInWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n this._bindingInSyntax = new BindingInSyntax(binding);\r\n }\r\n BindingInWhenOnSyntax.prototype.inRequestScope = function () {\r\n return this._bindingInSyntax.inRequestScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inSingletonScope = function () {\r\n return this._bindingInSyntax.inSingletonScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inTransientScope = function () {\r\n return this._bindingInSyntax.inTransientScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingInWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingInWhenOnSyntax;\r\n}());\r\nexport { BindingInWhenOnSyntax };\r\n","import * as ERROR_MSGS from \"../constants/error_msgs\";\r\nimport { BindingScopeEnum, BindingTypeEnum } from \"../constants/literal_types\";\r\nimport { BindingInWhenOnSyntax } from \"./binding_in_when_on_syntax\";\r\nimport { BindingWhenOnSyntax } from \"./binding_when_on_syntax\";\r\nvar BindingToSyntax = (function () {\r\n function BindingToSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingToSyntax.prototype.to = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Instance;\r\n this._binding.implementationType = constructor;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toSelf = function () {\r\n if (typeof this._binding.serviceIdentifier !== \"function\") {\r\n throw new Error(\"\" + ERROR_MSGS.INVALID_TO_SELF_VALUE);\r\n }\r\n var self = this._binding.serviceIdentifier;\r\n return this.to(self);\r\n };\r\n BindingToSyntax.prototype.toConstantValue = function (value) {\r\n this._binding.type = BindingTypeEnum.ConstantValue;\r\n this._binding.cache = value;\r\n this._binding.dynamicValue = null;\r\n this._binding.implementationType = null;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toDynamicValue = function (func) {\r\n this._binding.type = BindingTypeEnum.DynamicValue;\r\n this._binding.cache = null;\r\n this._binding.dynamicValue = func;\r\n this._binding.implementationType = null;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toConstructor = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Constructor;\r\n this._binding.implementationType = constructor;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFactory = function (factory) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = factory;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFunction = function (func) {\r\n if (typeof func !== \"function\") {\r\n throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);\r\n }\r\n var bindingWhenOnSyntax = this.toConstantValue(func);\r\n this._binding.type = BindingTypeEnum.Function;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return bindingWhenOnSyntax;\r\n };\r\n BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n var autofactory = function () { return context.container.get(serviceIdentifier); };\r\n return autofactory;\r\n };\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toAutoNamedFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n return function (named) { return context.container.getNamed(serviceIdentifier, named); };\r\n };\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toProvider = function (provider) {\r\n this._binding.type = BindingTypeEnum.Provider;\r\n this._binding.provider = provider;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toService = function (service) {\r\n this.toDynamicValue(function (context) { return context.container.get(service); });\r\n };\r\n return BindingToSyntax;\r\n}());\r\nexport { BindingToSyntax };\r\n","var ContainerSnapshot = (function () {\r\n function ContainerSnapshot() {\r\n }\r\n ContainerSnapshot.of = function (bindings, middleware, activations, deactivations, moduleActivationStore) {\r\n var snapshot = new ContainerSnapshot();\r\n snapshot.bindings = bindings;\r\n snapshot.middleware = middleware;\r\n snapshot.deactivations = deactivations;\r\n snapshot.activations = activations;\r\n snapshot.moduleActivationStore = moduleActivationStore;\r\n return snapshot;\r\n };\r\n return ContainerSnapshot;\r\n}());\r\nexport { ContainerSnapshot };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { isClonable } from '../utils/clonable';\r\nvar Lookup = (function () {\r\n function Lookup() {\r\n this._map = new Map();\r\n }\r\n Lookup.prototype.getMap = function () {\r\n return this._map;\r\n };\r\n Lookup.prototype.add = function (serviceIdentifier, value) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (value === null || value === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n entry.push(value);\r\n }\r\n else {\r\n this._map.set(serviceIdentifier, [value]);\r\n }\r\n };\r\n Lookup.prototype.get = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n return entry;\r\n }\r\n else {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.remove = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (!this._map.delete(serviceIdentifier)) {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.removeIntersection = function (lookup) {\r\n var _this = this;\r\n this.traverse(function (serviceIdentifier, value) {\r\n var lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;\r\n if (lookupActivations !== undefined) {\r\n var filteredValues = value.filter(function (lookupValue) {\r\n return !lookupActivations.some(function (moduleActivation) { return lookupValue === moduleActivation; });\r\n });\r\n _this._setValue(serviceIdentifier, filteredValues);\r\n }\r\n });\r\n };\r\n Lookup.prototype.removeByCondition = function (condition) {\r\n var _this = this;\r\n var removals = [];\r\n this._map.forEach(function (entries, key) {\r\n var updatedEntries = [];\r\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n var entry = entries_1[_i];\r\n var remove = condition(entry);\r\n if (remove) {\r\n removals.push(entry);\r\n }\r\n else {\r\n updatedEntries.push(entry);\r\n }\r\n }\r\n _this._setValue(key, updatedEntries);\r\n });\r\n return removals;\r\n };\r\n Lookup.prototype.hasKey = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n return this._map.has(serviceIdentifier);\r\n };\r\n Lookup.prototype.clone = function () {\r\n var copy = new Lookup();\r\n this._map.forEach(function (value, key) {\r\n value.forEach(function (b) { return copy.add(key, isClonable(b) ? b.clone() : b); });\r\n });\r\n return copy;\r\n };\r\n Lookup.prototype.traverse = function (func) {\r\n this._map.forEach(function (value, key) {\r\n func(key, value);\r\n });\r\n };\r\n Lookup.prototype._setValue = function (serviceIdentifier, value) {\r\n if (value.length > 0) {\r\n this._map.set(serviceIdentifier, value);\r\n }\r\n else {\r\n this._map.delete(serviceIdentifier);\r\n }\r\n };\r\n return Lookup;\r\n}());\r\nexport { Lookup };\r\n","function isClonable(obj) {\r\n return (typeof obj === 'object')\r\n && (obj !== null)\r\n && ('clone' in obj)\r\n && typeof obj.clone === 'function';\r\n}\r\nexport { isClonable };\r\n","import { Lookup } from './lookup';\r\nvar ModuleActivationStore = (function () {\r\n function ModuleActivationStore() {\r\n this._map = new Map();\r\n }\r\n ModuleActivationStore.prototype.remove = function (moduleId) {\r\n if (this._map.has(moduleId)) {\r\n var handlers = this._map.get(moduleId);\r\n this._map.delete(moduleId);\r\n return handlers;\r\n }\r\n return this._getEmptyHandlersStore();\r\n };\r\n ModuleActivationStore.prototype.addDeactivation = function (moduleId, serviceIdentifier, onDeactivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onDeactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n ModuleActivationStore.prototype.addActivation = function (moduleId, serviceIdentifier, onActivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onActivations.add(serviceIdentifier, onActivation);\r\n };\r\n ModuleActivationStore.prototype.clone = function () {\r\n var clone = new ModuleActivationStore();\r\n this._map.forEach(function (handlersStore, moduleId) {\r\n clone._map.set(moduleId, {\r\n onActivations: handlersStore.onActivations.clone(),\r\n onDeactivations: handlersStore.onDeactivations.clone(),\r\n });\r\n });\r\n return clone;\r\n };\r\n ModuleActivationStore.prototype._getModuleActivationHandlers = function (moduleId) {\r\n var moduleActivationHandlers = this._map.get(moduleId);\r\n if (moduleActivationHandlers === undefined) {\r\n moduleActivationHandlers = this._getEmptyHandlersStore();\r\n this._map.set(moduleId, moduleActivationHandlers);\r\n }\r\n return moduleActivationHandlers;\r\n };\r\n ModuleActivationStore.prototype._getEmptyHandlersStore = function () {\r\n var handlersStore = {\r\n onActivations: new Lookup(),\r\n onDeactivations: new Lookup()\r\n };\r\n return handlersStore;\r\n };\r\n return ModuleActivationStore;\r\n}());\r\nexport { ModuleActivationStore };\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { Binding } from '../bindings/binding';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { MetadataReader } from '../planning/metadata_reader';\r\nimport { createMockRequest, getBindingDictionary, plan } from '../planning/planner';\r\nimport { resolve } from '../resolution/resolver';\r\nimport { BindingToSyntax } from '../syntax/binding_to_syntax';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nimport { id } from '../utils/id';\r\nimport { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport { ContainerSnapshot } from './container_snapshot';\r\nimport { Lookup } from './lookup';\r\nimport { ModuleActivationStore } from './module_activation_store';\r\nvar Container = (function () {\r\n function Container(containerOptions) {\r\n var options = containerOptions || {};\r\n if (typeof options !== 'object') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);\r\n }\r\n if (options.defaultScope === undefined) {\r\n options.defaultScope = BindingScopeEnum.Transient;\r\n }\r\n else if (options.defaultScope !== BindingScopeEnum.Singleton &&\r\n options.defaultScope !== BindingScopeEnum.Transient &&\r\n options.defaultScope !== BindingScopeEnum.Request) {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);\r\n }\r\n if (options.autoBindInjectable === undefined) {\r\n options.autoBindInjectable = false;\r\n }\r\n else if (typeof options.autoBindInjectable !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);\r\n }\r\n if (options.skipBaseClassChecks === undefined) {\r\n options.skipBaseClassChecks = false;\r\n }\r\n else if (typeof options.skipBaseClassChecks !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);\r\n }\r\n this.options = {\r\n autoBindInjectable: options.autoBindInjectable,\r\n defaultScope: options.defaultScope,\r\n skipBaseClassChecks: options.skipBaseClassChecks\r\n };\r\n this.id = id();\r\n this._bindingDictionary = new Lookup();\r\n this._snapshots = [];\r\n this._middleware = null;\r\n this._activations = new Lookup();\r\n this._deactivations = new Lookup();\r\n this.parent = null;\r\n this._metadataReader = new MetadataReader();\r\n this._moduleActivationStore = new ModuleActivationStore();\r\n }\r\n Container.merge = function (container1, container2) {\r\n var containers = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n containers[_i - 2] = arguments[_i];\r\n }\r\n var container = new Container();\r\n var targetContainers = __spreadArray([container1, container2], containers, true).map(function (targetContainer) { return getBindingDictionary(targetContainer); });\r\n var bindingDictionary = getBindingDictionary(container);\r\n function copyDictionary(origin, destination) {\r\n origin.traverse(function (_key, value) {\r\n value.forEach(function (binding) {\r\n destination.add(binding.serviceIdentifier, binding.clone());\r\n });\r\n });\r\n }\r\n targetContainers.forEach(function (targetBindingDictionary) {\r\n copyDictionary(targetBindingDictionary, bindingDictionary);\r\n });\r\n return container;\r\n };\r\n Container.prototype.load = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n var getHelpers = this._getContainerModuleHelpersFactory();\r\n for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {\r\n var currentModule = modules_1[_a];\r\n var containerModuleHelpers = getHelpers(currentModule.id);\r\n currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);\r\n }\r\n };\r\n Container.prototype.loadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n getHelpers = this._getContainerModuleHelpersFactory();\r\n _a = 0, modules_2 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_2.length)) return [3, 4];\r\n currentModule = modules_2[_a];\r\n containerModuleHelpers = getHelpers(currentModule.id);\r\n return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unload = function () {\r\n var _this = this;\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n modules.forEach(function (module) {\r\n var deactivations = _this._removeModuleBindings(module.id);\r\n _this._deactivateSingletons(deactivations);\r\n _this._removeModuleHandlers(module.id);\r\n });\r\n };\r\n Container.prototype.unloadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, modules_3, module_1, deactivations;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = 0, modules_3 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_3.length)) return [3, 4];\r\n module_1 = modules_3[_a];\r\n deactivations = this._removeModuleBindings(module_1.id);\r\n return [4, this._deactivateSingletonsAsync(deactivations)];\r\n case 2:\r\n _b.sent();\r\n this._removeModuleHandlers(module_1.id);\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.bind = function (serviceIdentifier) {\r\n var scope = this.options.defaultScope || BindingScopeEnum.Transient;\r\n var binding = new Binding(serviceIdentifier, scope);\r\n this._bindingDictionary.add(serviceIdentifier, binding);\r\n return new BindingToSyntax(binding);\r\n };\r\n Container.prototype.rebind = function (serviceIdentifier) {\r\n this.unbind(serviceIdentifier);\r\n return this.bind(serviceIdentifier);\r\n };\r\n Container.prototype.rebindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, this.unbindAsync(serviceIdentifier)];\r\n case 1:\r\n _a.sent();\r\n return [2, this.bind(serviceIdentifier)];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbind = function (serviceIdentifier) {\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n this._deactivateSingletons(bindings);\r\n }\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n };\r\n Container.prototype.unbindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var bindings;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];\r\n bindings = this._bindingDictionary.get(serviceIdentifier);\r\n return [4, this._deactivateSingletonsAsync(bindings)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbindAll = function () {\r\n var _this = this;\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n _this._deactivateSingletons(value);\r\n });\r\n this._bindingDictionary = new Lookup();\r\n };\r\n Container.prototype.unbindAllAsync = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var promises;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n promises = [];\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n promises.push(_this._deactivateSingletonsAsync(value));\r\n });\r\n return [4, Promise.all(promises)];\r\n case 1:\r\n _a.sent();\r\n this._bindingDictionary = new Lookup();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.onActivation = function (serviceIdentifier, onActivation) {\r\n this._activations.add(serviceIdentifier, onActivation);\r\n };\r\n Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {\r\n this._deactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n Container.prototype.isBound = function (serviceIdentifier) {\r\n var bound = this._bindingDictionary.hasKey(serviceIdentifier);\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBound(serviceIdentifier);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.isCurrentBound = function (serviceIdentifier) {\r\n return this._bindingDictionary.hasKey(serviceIdentifier);\r\n };\r\n Container.prototype.isBoundNamed = function (serviceIdentifier, named) {\r\n return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {\r\n var bound = false;\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n var request_1 = createMockRequest(this, serviceIdentifier, key, value);\r\n bound = bindings.some(function (b) { return b.constraint(request_1); });\r\n }\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBoundTagged(serviceIdentifier, key, value);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.snapshot = function () {\r\n this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));\r\n };\r\n Container.prototype.restore = function () {\r\n var snapshot = this._snapshots.pop();\r\n if (snapshot === undefined) {\r\n throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);\r\n }\r\n this._bindingDictionary = snapshot.bindings;\r\n this._activations = snapshot.activations;\r\n this._deactivations = snapshot.deactivations;\r\n this._middleware = snapshot.middleware;\r\n this._moduleActivationStore = snapshot.moduleActivationStore;\r\n };\r\n Container.prototype.createChild = function (containerOptions) {\r\n var child = new Container(containerOptions || this.options);\r\n child.parent = this;\r\n return child;\r\n };\r\n Container.prototype.applyMiddleware = function () {\r\n var middlewares = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n middlewares[_i] = arguments[_i];\r\n }\r\n var initial = (this._middleware) ? this._middleware : this._planAndResolve();\r\n this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);\r\n };\r\n Container.prototype.applyCustomMetadataReader = function (metadataReader) {\r\n this._metadataReader = metadataReader;\r\n };\r\n Container.prototype.get = function (serviceIdentifier) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getNamed = function (serviceIdentifier, named) {\r\n return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getNamedAsync = function (serviceIdentifier, named) {\r\n return this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAll = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllAsync = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllNamed = function (serviceIdentifier, named) {\r\n return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {\r\n return this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.resolve = function (constructorFunction) {\r\n var isBound = this.isBound(constructorFunction);\r\n if (!isBound) {\r\n this.bind(constructorFunction).toSelf();\r\n }\r\n var resolved = this.get(constructorFunction);\r\n if (!isBound) {\r\n this.unbind(constructorFunction);\r\n }\r\n return resolved;\r\n };\r\n Container.prototype._preDestroy = function (constructor, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n };\r\n Container.prototype._removeModuleHandlers = function (moduleId) {\r\n var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);\r\n this._activations.removeIntersection(moduleActivationsHandlers.onActivations);\r\n this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);\r\n };\r\n Container.prototype._removeModuleBindings = function (moduleId) {\r\n return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });\r\n };\r\n Container.prototype._deactivate = function (binding, instance) {\r\n var _this = this;\r\n var constructor = Object.getPrototypeOf(instance).constructor;\r\n try {\r\n if (this._deactivations.hasKey(binding.serviceIdentifier)) {\r\n var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());\r\n if (isPromise(result)) {\r\n return this._handleDeactivationError(result.then(function () { return _this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor); }), constructor);\r\n }\r\n }\r\n var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);\r\n if (isPromise(propagateDeactivationResult)) {\r\n return this._handleDeactivationError(propagateDeactivationResult, constructor);\r\n }\r\n }\r\n catch (ex) {\r\n if (ex instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));\r\n }\r\n }\r\n };\r\n Container.prototype._handleDeactivationError = function (asyncResult, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n _a.sent();\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n if (ex_1 instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));\r\n }\r\n return [3, 3];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {\r\n var _this = this;\r\n var deactivation = deactivationsIterator.next();\r\n while (deactivation.value) {\r\n var result = deactivation.value(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () {\r\n return _this._deactivateContainerAsync(instance, deactivationsIterator);\r\n });\r\n }\r\n deactivation = deactivationsIterator.next();\r\n }\r\n };\r\n Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var deactivation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n deactivation = deactivationsIterator.next();\r\n _a.label = 1;\r\n case 1:\r\n if (!deactivation.value) return [3, 3];\r\n return [4, deactivation.value(instance)];\r\n case 2:\r\n _a.sent();\r\n deactivation = deactivationsIterator.next();\r\n return [3, 1];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._getContainerModuleHelpersFactory = function () {\r\n var _this = this;\r\n var setModuleId = function (bindingToSyntax, moduleId) {\r\n bindingToSyntax._binding.moduleId = moduleId;\r\n };\r\n var getBindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.bind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getUnbindFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbind(serviceIdentifier);\r\n };\r\n };\r\n var getUnbindAsyncFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbindAsync(serviceIdentifier);\r\n };\r\n };\r\n var getIsboundFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.isBound(serviceIdentifier);\r\n };\r\n };\r\n var getRebindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.rebind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getOnActivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onActivation) {\r\n _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);\r\n _this.onActivation(serviceIdentifier, onActivation);\r\n };\r\n };\r\n var getOnDeactivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onDeactivation) {\r\n _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);\r\n _this.onDeactivation(serviceIdentifier, onDeactivation);\r\n };\r\n };\r\n return function (mId) { return ({\r\n bindFunction: getBindFunction(mId),\r\n isboundFunction: getIsboundFunction(),\r\n onActivationFunction: getOnActivationFunction(mId),\r\n onDeactivationFunction: getOnDeactivationFunction(mId),\r\n rebindFunction: getRebindFunction(mId),\r\n unbindFunction: getUnbindFunction(),\r\n unbindAsyncFunction: getUnbindAsyncFunction()\r\n }); };\r\n };\r\n Container.prototype._getAll = function (getArgs) {\r\n return Promise.all(this._get(getArgs));\r\n };\r\n Container.prototype._get = function (getArgs) {\r\n var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });\r\n if (this._middleware) {\r\n var middlewareResult = this._middleware(planAndResolveArgs);\r\n if (middlewareResult === undefined || middlewareResult === null) {\r\n throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);\r\n }\r\n return middlewareResult;\r\n }\r\n return this._planAndResolve()(planAndResolveArgs);\r\n };\r\n Container.prototype._getButThrowIfAsync = function (getArgs) {\r\n var result = this._get(getArgs);\r\n if (isPromiseOrContainsPromise(result)) {\r\n throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));\r\n }\r\n return result;\r\n };\r\n Container.prototype._getAllArgs = function (serviceIdentifier) {\r\n var getAllArgs = {\r\n avoidConstraints: true,\r\n isMultiInject: true,\r\n serviceIdentifier: serviceIdentifier,\r\n };\r\n return getAllArgs;\r\n };\r\n Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {\r\n var getNotAllArgs = {\r\n avoidConstraints: false,\r\n isMultiInject: isMultiInject,\r\n serviceIdentifier: serviceIdentifier,\r\n key: key,\r\n value: value,\r\n };\r\n return getNotAllArgs;\r\n };\r\n Container.prototype._planAndResolve = function () {\r\n var _this = this;\r\n return function (args) {\r\n var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);\r\n context = args.contextInterceptor(context);\r\n var result = resolve(context);\r\n return result;\r\n };\r\n };\r\n Container.prototype._deactivateIfSingleton = function (binding) {\r\n var _this = this;\r\n if (!binding.activated) {\r\n return;\r\n }\r\n if (isPromise(binding.cache)) {\r\n return binding.cache.then(function (resolved) { return _this._deactivate(binding, resolved); });\r\n }\r\n return this._deactivate(binding, binding.cache);\r\n };\r\n Container.prototype._deactivateSingletons = function (bindings) {\r\n for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n var binding = bindings_1[_i];\r\n var result = this._deactivateIfSingleton(binding);\r\n if (isPromise(result)) {\r\n throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);\r\n }\r\n }\r\n };\r\n Container.prototype._deactivateSingletonsAsync = function (bindings) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, Promise.all(bindings.map(function (b) { return _this._deactivateIfSingleton(b); }))];\r\n case 1:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {\r\n if (this.parent) {\r\n return this._deactivate.bind(this.parent)(binding, instance);\r\n }\r\n else {\r\n return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);\r\n }\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.parent) return [3, 2];\r\n return [4, this._deactivate.bind(this.parent)(binding, instance)];\r\n case 1:\r\n _a.sent();\r\n return [3, 4];\r\n case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];\r\n case 3:\r\n _a.sent();\r\n _a.label = 4;\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {\r\n try {\r\n this._bindingDictionary.remove(serviceIdentifier);\r\n }\r\n catch (e) {\r\n throw new Error(ERROR_MSGS.CANNOT_UNBIND + \" \" + getServiceIdentifierAsString(serviceIdentifier));\r\n }\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {\r\n var _this = this;\r\n if (typeof binding.onDeactivation === 'function') {\r\n var result = binding.onDeactivation(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () { return _this._preDestroy(constructor, instance); });\r\n }\r\n }\r\n return this._preDestroy(constructor, instance);\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(typeof binding.onDeactivation === 'function')) return [3, 2];\r\n return [4, binding.onDeactivation(instance)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [4, this._preDestroy(constructor, instance)];\r\n case 3:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n return Container;\r\n}());\r\nexport { Container };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFirstArrayDuplicate } from '../utils/js';\r\nfunction targetIsConstructorFunction(target) {\r\n return target.prototype !== undefined;\r\n}\r\nfunction _throwIfMethodParameter(parameterName) {\r\n if (parameterName !== undefined) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n}\r\nfunction tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {\r\n _throwIfMethodParameter(parameterName);\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);\r\n}\r\nfunction tagProperty(annotationTarget, propertyName, metadata) {\r\n if (targetIsConstructorFunction(annotationTarget)) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED_PROP, annotationTarget.constructor, propertyName, metadata);\r\n}\r\nfunction _ensureNoMetadataKeyDuplicates(metadata) {\r\n var metadatas = [];\r\n if (Array.isArray(metadata)) {\r\n metadatas = metadata;\r\n var duplicate = getFirstArrayDuplicate(metadatas.map(function (md) { return md.key; }));\r\n if (duplicate !== undefined) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + duplicate.toString());\r\n }\r\n }\r\n else {\r\n metadatas = [metadata];\r\n }\r\n return metadatas;\r\n}\r\nfunction _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {\r\n var metadatas = _ensureNoMetadataKeyDuplicates(metadata);\r\n var paramsOrPropertiesMetadata = {};\r\n if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) {\r\n paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget);\r\n }\r\n var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];\r\n if (paramOrPropertyMetadata === undefined) {\r\n paramOrPropertyMetadata = [];\r\n }\r\n else {\r\n var _loop_1 = function (m) {\r\n if (metadatas.some(function (md) { return md.key === m.key; })) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + m.key.toString());\r\n }\r\n };\r\n for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) {\r\n var m = paramOrPropertyMetadata_1[_i];\r\n _loop_1(m);\r\n }\r\n }\r\n paramOrPropertyMetadata.push.apply(paramOrPropertyMetadata, metadatas);\r\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\r\n Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\r\n}\r\nfunction createTaggedDecorator(metadata) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (typeof indexOrPropertyDescriptor === 'number') {\r\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\r\n }\r\n else {\r\n tagProperty(target, targetKey, metadata);\r\n }\r\n };\r\n}\r\nfunction _decorate(decorators, target) {\r\n Reflect.decorate(decorators, target);\r\n}\r\nfunction _param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); };\r\n}\r\nfunction decorate(decorator, target, parameterIndexOrProperty) {\r\n if (typeof parameterIndexOrProperty === 'number') {\r\n _decorate([_param(parameterIndexOrProperty, decorator)], target);\r\n }\r\n else if (typeof parameterIndexOrProperty === 'string') {\r\n Reflect.decorate([decorator], target, parameterIndexOrProperty);\r\n }\r\n else {\r\n _decorate([decorator], target);\r\n }\r\n}\r\nexport { decorate, tagParameter, tagProperty, createTaggedDecorator };\r\n","export function getFirstArrayDuplicate(array) {\r\n var seenValues = new Set();\r\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\r\n var entry = array_1[_i];\r\n if (seenValues.has(entry)) {\r\n return entry;\r\n }\r\n else {\r\n seenValues.add(entry);\r\n }\r\n }\r\n return undefined;\r\n}\r\n","import * as ERRORS_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nfunction injectable() {\r\n return function (target) {\r\n if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) {\r\n throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR);\r\n }\r\n var types = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || [];\r\n Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types, target);\r\n return target;\r\n };\r\n}\r\nexport { injectable };\r\n","import { UNDEFINED_INJECT_ANNOTATION } from '../constants/error_msgs';\r\nimport { Metadata } from '../planning/metadata';\r\nimport { createTaggedDecorator } from './decorator_utils';\r\nexport function injectBase(metadataKey) {\r\n return function (serviceIdentifier) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (serviceIdentifier === undefined) {\r\n var className = typeof target === 'function' ? target.name : target.constructor.name;\r\n throw new Error(UNDEFINED_INJECT_ANNOTATION(className));\r\n }\r\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(target, targetKey, indexOrPropertyDescriptor);\r\n };\r\n };\r\n}\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar inject = injectBase(METADATA_KEY.INJECT_TAG);\r\nexport { inject };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar multiInject = injectBase(METADATA_KEY.MULTI_INJECT_TAG);\r\nexport { multiInject };\r\n","const TYPES = {\n AudioContextManager: Symbol.for(\"AudioContextManager\"),\n AudioEditor: Symbol.for(\"AudioEditor\"),\n AudioProcessor: Symbol.for(\"AudioProcessor\"),\n BufferManager: Symbol.for(\"BufferManager\"),\n FilterManager: Symbol.for(\"FilterManager\"),\n RendererManager: Symbol.for(\"RendererManager\"),\n SaveBufferManager: Symbol.for(\"SaveBufferManager\"),\n ConfigService: Symbol.for(\"ConfigService\"),\n EventEmitter: Symbol.for(\"EventEmitter\"),\n BufferPlayer: Symbol.for(\"BufferPlayer\"),\n BufferDecoderService: Symbol.for(\"BufferDecoderService\"),\n BufferFetcherService: Symbol.for(\"BufferFetcherService\"),\n AudioBuffersToFetch: Symbol.for(\"AudioBuffersToFetch\"),\n Renderers: Symbol.for(\"Renderers\"),\n Filters: Symbol.for(\"Filters\"),\n EntryPointFilter: Symbol.for(\"EntryPointFilter\"),\n VoiceRecorder: Symbol.for(\"VoiceRecorder\")\n};\n\nexport { TYPES };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum EventType {\n LOADING_BUFFERS = \"loadingBuffers\",\n LOADING_BUFFERS_ERROR = \"loadingBuffersError\",\n FETCHING_BUFFERS = \"fetchingBuffers\",\n FETCHING_BUFFERS_ERROR = \"fetchingBuffersError\",\n FINISHED_FETCHING_BUFFERS = \"finishedFetchingBuffers\",\n LOADED_BUFFERS = \"loadedBuffers\",\n COMPATIBILITY_MODE_AUTO_ENABLED = \"compatibilityModeAutoEnabled\",\n RENDERING_AUDIO_PROBLEM_DETECTED = \"renderingAudioProblemDetected\",\n AUDIO_RENDERING_FINISHED = \"audioRenderingFinished\",\n OFFLINE_AUDIO_RENDERING_FINISHED = \"offlineAudioRenderingFinished\",\n PLAYING_STOPPED = \"playingStopped\",\n PLAYING_STARTED = \"playingStarted\",\n PLAYING_FINISHED = \"playingFinished\",\n PLAYING_UPDATE = \"playingUpdate\",\n RECORDER_INIT = \"recorderInit\",\n RECORDER_SUCCESS = \"recorderSuccess\",\n RECORDER_ERROR = \"recorderError\",\n RECORDER_UPDATE_CONSTRAINTS = \"recorderUpdateConstraints\",\n RECORDER_RECORDING = \"recorderRecording\",\n RECORDER_STOPPED = \"recorderStopped\",\n RECORDER_PAUSED = \"recorderPaused\",\n RECORDER_RESETED = \"recorderReseted\",\n RECORDER_COUNT_UPDATE = \"recorderCountUpdate\",\n SAMPLE_RATE_CHANGED = \"sampleRateChanged\",\n DECODING_AUDIO_FILE = \"decodingAudioFile\",\n DECODED_AUDIO_FILE = \"decodedAudioFile\",\n ERROR_DECODING_AUDIO_FILE = \"errorDecodingAudioFile\",\n RECORDER_NOT_FOUND_ERROR = \"recorderNotFoundError\",\n RECORDER_UNKNOWN_ERROR = \"recorderUnknownError\",\n UPDATE_AUDIO_TREATMENT_PERCENT = \"updateAudioTreatmentPercent\",\n UPDATE_REMAINING_TIME_ESTIMATED = \"updateRemainingTimeEstimated\",\n CANCELLED_AND_LOADED_INITIAL_AUDIO = \"cancelledAndLoadedInitialAudio\",\n CANCELLING_AUDIO_PROCESSING = \"cancellingAudioProcessing\"\n};\n","const Constants = {\n AUDIO_EDITOR: \"audioEditor\",\n VOICE_RECORDER: \"voiceRecorder\",\n BUFFER_PLAYER: \"bufferPlayer\",\n AUDIO_CONTEXT_MANAGER: \"audioContextManager\",\n AUDIO_PROCESSOR: \"audioProcessor\",\n BUFFER_MANAGER: \"bufferManager\",\n FILTER_MANAGER: \"filterManager\",\n RENDERER_MANAGER: \"rendererManager\",\n SAVE_BUFFER_MANAGER: \"saveBufferManager\",\n EXPORT_WAV_COMMAND: \"exportWAV\",\n EXPORT_MP3_COMMAND: \"exportMP3\",\n AUDIO_WAV: \"audio/wav\",\n AUDIO_MP3: \"audio/mp3\",\n RECORD_COMMAND: \"record\",\n INIT_COMMAND: \"init\",\n FILTERS_NAMES: {\n REVERB: \"reverb\",\n ECHO: \"echo\",\n BASS_BOOST: \"bassboost\",\n BITCRUSHER: \"bitcrusher\",\n HIGH_PASS: \"highpass\",\n LIMITER: \"limiter\",\n LOW_PASS: \"lowpass\",\n PASSTHROUGH: \"passthroughfilter\",\n RETURN_AUDIO: \"returnAudio\",\n SOUNDTOUCH: \"soundtouch\",\n TELEPHONIZER: \"telephonizer\",\n VOCODER: \"vocoder\"\n },\n WORKLET_PATHS: {\n BITCRUSHER: \"BitCrusher.worklet.js\",\n LIMITER: \"Limiter.worklet.js\",\n SOUNDTOUCH: \"Soundtouch.worklet.js\",\n RECORDER_WORKLET: \"RecorderWorklet.js\",\n PASSTHROUGH: \"Passthrough.worklet.js\"\n },\n WORKLET_NAMES: {\n BITCRUSHER: \"bitcrusher-processor\",\n LIMITER: \"limiter-processor\",\n SOUNDTOUCH: \"soundtouch-worklet\",\n RECORDER_WORKLET: \"recorder-worklet\",\n PASSTHROUGH: \"passthrough\"\n },\n PREFERENCES_KEYS: {\n COMPATIBILITY_MODE_ENABLED: \"compatibility-mode-enabled\",\n COMPATIBILITY_MODE_CHECKED: \"compatibility-mode-checked\",\n ENABLE_AUDIO_WORKLET: \"enable-audio-worklet\",\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: \"enable-soundtouch-audio-worklet\",\n BUFFER_SIZE: \"buffer-size\",\n SAMPLE_RATE: \"sample-rate\",\n DISABLE_INITIAL_RENDERING: \"disable-initial-rendering\",\n BITRATE_MP3: \"bitrate-mp3\"\n },\n // Enable or disable the use of Audio Worklet version of Soundtouch\n // If disabled, the ScriptProcessorNode version is used\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: true,\n ENABLE_AUDIO_WORKLET: true,\n ENABLE_RECORDER_AUDIO_WORKLET: true,\n SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE: 16384,\n DEFAULT_REVERB_ENVIRONMENT: {\n name: \"Medium Damping Cave E002 M2S\",\n url: \"impulse_response.wav\",\n size: 1350278,\n addDuration: 4,\n link: \"http://www.cksde.com/p_6_250.htm\"\n },\n VOCODER_MODULATOR: \"modulator.mp3\",\n DEFAULT_BUFFER_SIZE: 0,\n VALID_BUFFER_SIZE: [0, 256, 512, 1024, 2048, 4096, 8192, 16384],\n VALID_MP3_BITRATES: [32, 64, 96, 128, 160, 256, 320],\n DEFAULT_SAMPLE_RATE: 0, // 0 = AUTO\n VALID_SAMPLE_RATES: [0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000],\n // Interval used by the treatment percent counter. The event will be dispatched each ms defined here\n TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL: 100,\n // Smoothing factor for the time couting estimation (between 0 and 1)\n TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR: 0.9,\n // Disable initial rendering (when opening audio file or buffer)\n DISABLE_INITIAL_RENDERING: true,\n // Default save format\n DEFAULT_SAVE_FORMAT: \"wav\",\n // Default bitrate for the MP3 encoder\n DEFAULT_MP3_BITRATE: 320\n};\n\nexport default Constants;\n","import { injectable } from \"inversify\";\nimport AudioEditorEvents from \"../model/AudioEditorEvent\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default class EventEmitter implements EventEmitterInterface {\n listeners: AudioEditorEvents = {};\n \n constructor() {\n this.listeners = {};\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event].push(callback);\n }\n\n emit(event: string, data?: string | number | AudioBuffer) {\n if (this.listeners[event]) {\n this.listeners[event].forEach(callback => {\n callback(data);\n });\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event].filter(cb => cb !== callback);\n }\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport Constants from \"@/model/Constants\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioContextManager implements AudioContextManagerInterface {\n\n /** The current event emitter */\n private eventEmitter: EventEmitterInterface | undefined;\n\n /** The config service */\n private configService: ConfigService | null;\n\n /** The current audio context */\n private _currentContext: AudioContext | null | undefined;\n\n /** The old audio context */\n private oldAudioContext: AudioContext | null | undefined;\n\n /** The previous sample rate setting */\n private previousSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n constructor(\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService | null) {\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n\n this.setup();\n }\n\n private setup() {\n if (this.configService) {\n this.previousSampleRate = this.configService.getSampleRate();\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.previousSampleRate);\n }\n }\n\n if (!this.currentContext) {\n this.createNewContext(this.previousSampleRate);\n }\n }\n\n createNewContextIfNeeded(principalBuffer?: AudioBuffer | null) {\n const isCompatibilityModeEnabled = this.configService && this.configService.isCompatibilityModeEnabled();\n\n if (isCompatibilityModeEnabled && principalBuffer) {\n // If compatibility mode is enabled, we use the sample rate of the input audio buffer\n if (this.currentSampleRate != principalBuffer.sampleRate) {\n this.createNewContext(principalBuffer.sampleRate);\n this.previousSampleRate = principalBuffer.sampleRate;\n\n return true;\n }\n } else {\n // Otherwise we change the context if the sample rate has changed\n let currentSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n if (this.configService) {\n currentSampleRate = this.configService.getSampleRate();\n }\n\n // If sample rate setting has changed, create a new audio context\n if (currentSampleRate != this.previousSampleRate) {\n this.createNewContext(currentSampleRate);\n this.previousSampleRate = currentSampleRate;\n\n return true;\n }\n }\n\n return false;\n }\n\n /** \n * Stop previous audio context and create a new one\n * @param sampleRate New sample rate\n */\n createNewContext(sampleRate: number) {\n if (this._currentContext) {\n this.oldAudioContext = this._currentContext;\n this.destroyOldContext();\n }\n\n const options: AudioContextOptions = {\n latencyHint: \"interactive\"\n };\n\n if (sampleRate != 0) {\n options.sampleRate = sampleRate;\n }\n\n this._currentContext = new AudioContext(options);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.currentSampleRate);\n }\n }\n\n /**\n * Destroy previous AudioContext\n */\n private destroyOldContext() {\n if (this.oldAudioContext) {\n this.oldAudioContext.close();\n this.oldAudioContext = null;\n }\n }\n\n get currentSampleRate(): number {\n if (this.currentContext) {\n return this.currentContext.sampleRate;\n }\n\n return 0;\n }\n\n get currentContext() {\n return this._currentContext;\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport type { ConfigService } from \"../../services/interfaces/ConfigService\";\nimport { TYPES } from \"@/inversify.types\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\nimport type BufferDecoderServiceInterface from \"@/services/interfaces/BufferDecoderServiceInterface\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default abstract class AbstractAudioElement {\n\n /** Is this element enabled? */\n private enabled = false;\n\n /** Is this element enabled by default? */\n private defaultEnabled = false;\n\n @inject(TYPES.BufferFetcherService)\n protected bufferFetcherService: BufferFetcherServiceInterface | null = null;\n\n @inject(TYPES.BufferDecoderService)\n protected bufferDecoderService: BufferDecoderServiceInterface | null = null;\n\n @inject(TYPES.ConfigService)\n protected configService: ConfigService | null = null;\n\n @inject(TYPES.EventEmitter)\n protected eventEmitter: EventEmitterInterface | null = null;\n\n /** Returns the order in which the filter/renderer needs to be applied */\n abstract get order(): number;\n\n /** Returns the id of this filter/renderer */\n abstract get id(): string;\n\n /** Is this filter/renderer enabled? */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /** Is this filter/renderer enabled by default? */\n isDefaultEnabled(): boolean {\n return this.defaultEnabled;\n }\n\n /** Set to true if this filter/renderer needs to be enabled by default */\n setDefaultEnabled(state: boolean) {\n this.defaultEnabled = state;\n }\n\n setEnabled(state: boolean) {\n this.enabled = state;\n }\n\n /** Enable this filter/renderer */\n enable() {\n this.setEnabled(true);\n }\n\n /** Disable this filter/renderer */\n disable() {\n this.setEnabled(false);\n }\n\n /** Toggle to enabled/disabled this filter */\n toggle() {\n this.setEnabled(!this.isEnabled());\n }\n\n injectDependencies(bufferFetcherService: BufferFetcherServiceInterface | null, bufferDecoderService: BufferDecoderServiceInterface | null, configService: ConfigService | null, eventEmitter: EventEmitterInterface | null) {\n this.bufferFetcherService = bufferFetcherService;\n this.bufferDecoderService = bufferDecoderService;\n this.configService = configService;\n this.eventEmitter = eventEmitter;\n }\n}\n","import { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport FilterManagerInterface from \"@/audioEditor/interfaces/FilterManagerInterface\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\nconst utilFunctions = {\n calcAudioDuration: (audio: AudioBuffer, speed: number) => {\n if (audio) {\n let duration = audio.duration + 1;\n\n if (speed) {\n duration = duration / speed;\n }\n\n return duration;\n }\n\n return 0;\n },\n loadAudioBuffer: async (context: AudioContext, file: File) => {\n const arrayBuffer = await utilFunctions.readAsArrayBufferPromisified(file);\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n return utilFunctions.decodeBuffer(context, audioBuffer);\n },\n readAsArrayBufferPromisified: (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = ev => {\n const result = ev?.target?.result;\n\n if (result instanceof ArrayBuffer) {\n resolve(result);\n } else {\n reject();\n }\n };\n\n if (file) {\n reader.readAsArrayBuffer(file); // Read the file\n }\n });\n },\n decodeBuffer: (context: AudioContext, buffer: AudioBuffer) => {\n if (buffer.numberOfChannels == 1) { // convert to stereo buffer\n context.resume();\n\n const duration = buffer.duration;\n const sampleRate = context.sampleRate;\n\n const newBuffer = context.createBuffer(2, sampleRate * duration + sampleRate * 2, sampleRate);\n\n // Original buffer data\n const sourceChannelData = buffer.getChannelData(0);\n\n // Destination buffers\n const channel0Data = newBuffer.getChannelData(0);\n const channel1Data = newBuffer.getChannelData(1);\n\n for (let i = 0; i < sourceChannelData.length; i++) {\n channel0Data[i] = sourceChannelData[i];\n channel1Data[i] = sourceChannelData[i];\n }\n\n return newBuffer;\n }\n\n return buffer;\n },\n convertAudioBufferToFloat32Array: (buffer: AudioBuffer) => {\n const array: Float32Array[] = [];\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n array.push(buffer.getChannelData(channel));\n }\n\n return array;\n },\n convertAudioParamToFloat32Array: (param: AudioParam, length: number) => {\n const array = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n array.set([param.value], i);\n }\n\n return array;\n },\n sumAudioBufferChannel(buffer: AudioBuffer, channel: number) {\n return buffer.getChannelData(channel).reduce((a, b) => a + b, 0);\n },\n sumAudioBuffer(buffer: AudioBuffer) {\n let sum = 0;\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n sum += this.sumAudioBufferChannel(buffer, channel);\n }\n\n return sum;\n },\n /**\n * This method checks if the browser is compatible with audio worklets\n * @param audioContext \n */\n isAudioWorkletCompatible(audioContext: BaseAudioContext) {\n if (typeof (audioContext) !== \"undefined\" && typeof (audioContext.audioWorklet) !== \"undefined\") {\n return true;\n }\n\n return false;\n },\n /**\n * Check that the setting value is correct\n * @param value FilterSettingValue\n */\n isSettingValueValid(value: FilterSettingValue) {\n return typeof (value) !== \"undefined\" && !isNaN(Number(value)) && !(typeof (value) === \"string\" && value.trim() === \"\");\n },\n /**\n * Calculate approximative audio duration according to enabled filters and their settings\n * @param speedAudio Current audio speed\n * @returns The audio duration\n */\n calculateAudioDuration(buffer: AudioBuffer, filterManager: FilterManagerInterface, speedAudio: number): number {\n if (buffer && filterManager) {\n const duration = this.calcAudioDuration(buffer, speedAudio);\n return duration + filterManager.getAddingTime();\n }\n\n return 0;\n },\n /**\n * Reset audio rendering progress\n */\n resetAudioRenderingProgress(eventEmitter: EventEmitterInterface | null) {\n if (eventEmitter) {\n eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, 0);\n eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n }\n },\n forceDownload(blob: Blob, filename: string) {\n const link = window.document.createElement(\"a\");\n const url = (window.URL || window.webkitURL).createObjectURL(blob);\n window.document.body.appendChild(link);\n link.href = url;\n link.download = filename || \"output.wav\";\n link.click();\n window.URL.revokeObjectURL(url);\n }\n};\n\nexport default utilFunctions;\n","import AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"../filters/interfaces/AbstractAudioFilter\";\nimport AbstractAudioRenderer from \"../filters/interfaces/AbstractAudioRenderer\";\nimport utils from \"../utils/Functions\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport Constants from \"../model/Constants\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettings } from \"../model/filtersSettings/FilterSettings\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { FilterState } from \"../model/FilterState\";\nimport SaveBufferOptions from \"../model/SaveBufferOptions\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport AudioEditorInterface from \"./interfaces/AudioEditorInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\n\n@injectable()\nexport default class AudioEditor extends AbstractAudioElement implements AudioEditorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The renderer manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The save buffer manager */\n private saveBufferManager: SaveBufferManagerInterface | undefined;\n\n /** The save buffer manager */\n private audioProcessor: AudioProcessorInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The audio buffer to be processed */\n private principalBuffer: AudioBuffer | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.SaveBufferManager) saveBufferManager: SaveBufferManagerInterface,\n @inject(TYPES.AudioProcessor) audioProcessor: AudioProcessorInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface,\n @inject(TYPES.BufferPlayer) player: BufferPlayerInterface\n ) {\n super();\n\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.contextManager = contextManager;\n this.saveBufferManager = saveBufferManager;\n this.audioProcessor = audioProcessor;\n this.bufferManager = bufferManager;\n this.bufferPlayer = player;\n\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called just before starting playing audio, when compatibility mode is enabled\n this.bufferPlayer.onBeforePlaying(async () => {\n if (this.bufferPlayer && this.bufferPlayer.compatibilityMode\n && this.contextManager && this.contextManager.currentContext && this.audioProcessor) {\n await this.audioProcessor.setupOutput(this.principalBuffer, this.contextManager.currentContext);\n }\n });\n\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.bufferPlayer && this.bufferPlayer.loop) {\n this.bufferPlayer.start();\n }\n });\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n if (this.filterManager) {\n this.filterManager.addFilters(...filters);\n }\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n if (this.rendererManager) {\n this.rendererManager.addRenderers(...renderers);\n }\n }\n\n get currentSampleRate(): number {\n if (this.contextManager) {\n return this.contextManager.currentSampleRate;\n }\n\n return 0;\n }\n\n get defaultDeviceSampleRate(): number {\n const tempContext = new AudioContext();\n let sampleRate = 0;\n\n if (tempContext) {\n sampleRate = tempContext.sampleRate;\n tempContext.close();\n }\n\n return sampleRate;\n }\n\n async loadBufferFromFile(file: File) {\n this.principalBuffer = null;\n\n if (this.audioProcessor) {\n await this.audioProcessor.prepareContext(this.principalBuffer);\n }\n\n if (this.contextManager && this.contextManager.currentContext && this.bufferDecoderService && this.audioProcessor) {\n this.principalBuffer = await this.bufferDecoderService.decodeBufferFromFile(file);\n this.audioProcessor.initialRenderingDone = false;\n\n if (this.principalBuffer) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n } else {\n throw new Error(\"Error decoding audio file\");\n }\n\n utilFunctions.resetAudioRenderingProgress(this.eventEmitter);\n } else {\n throw new Error(\"Audio Context is not ready!\");\n }\n }\n\n loadBuffer(audioBuffer: AudioBuffer) {\n this.principalBuffer = audioBuffer;\n\n if (this.audioProcessor) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n this.audioProcessor.initialRenderingDone = false;\n }\n }\n\n getOutputBuffer() {\n if (this.audioProcessor) {\n return this.audioProcessor.renderedBuffer;\n }\n\n return null;\n }\n\n async renderAudio(): Promise {\n if (this.audioProcessor) {\n return await this.audioProcessor.renderAudio(this.principalBuffer);\n }\n\n return false;\n }\n\n isAudioWorkletAvailable(): boolean {\n if (this.contextManager && this.contextManager.currentContext) {\n return utilFunctions.isAudioWorkletCompatible(this.contextManager.currentContext);\n }\n\n return false;\n }\n\n /** Filters settings */\n\n getFiltersState(): FilterState {\n if (this.filterManager && this.rendererManager) {\n return {\n ...this.filterManager.getFiltersState(),\n ...this.rendererManager.getRenderersState()\n };\n }\n\n return {};\n }\n\n getFiltersSettings(): Map {\n if (this.filterManager) {\n return this.filterManager.getFiltersSettings();\n }\n\n return new Map();\n }\n\n async reconnectNodesIfNeeded() {\n if (this.contextManager && this.bufferPlayer && this.bufferPlayer.compatibilityMode &&\n this.contextManager.currentContext && this.principalBuffer &&\n this.filterManager && this.filterManager.entrypointFilter) {\n await this.filterManager.connectNodes(this.contextManager.currentContext, this.principalBuffer, true, this.bufferPlayer.compatibilityMode);\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n this.bufferPlayer.speedAudio = speedAudio;\n this.bufferPlayer.duration = utilFunctions.calculateAudioDuration(this.principalBuffer, this.filterManager, speedAudio) * speedAudio;\n }\n }\n\n toggleFilter(filterId: string) {\n if (this.rendererManager) {\n this.rendererManager.toggleRenderer(filterId);\n }\n\n if (this.filterManager) {\n this.filterManager.toggleFilter(filterId);\n this.reconnectNodesIfNeeded();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n if (this.filterManager) {\n await this.filterManager.changeFilterSettings(filterId, settings);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n async resetFilterSettings(filterId: string) {\n if (this.filterManager) {\n await this.filterManager.resetFilterSettings(filterId);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n resetAllFiltersState() {\n if (this.rendererManager) {\n this.rendererManager.resetAllRenderersState();\n }\n\n if (this.filterManager) {\n this.filterManager.resetAllFiltersState();\n this.reconnectNodesIfNeeded();\n }\n }\n\n /** Events and exit */\n\n exit() {\n if (this.bufferPlayer) {\n this.bufferPlayer.stop();\n this.bufferPlayer.reset();\n }\n\n this.cancelAudioRendering();\n this.principalBuffer = null;\n }\n\n cancelAudioRendering() {\n if (this.audioProcessor) {\n this.audioProcessor.cancelAudioRendering();\n }\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.off(event, callback);\n }\n }\n\n async saveBuffer(options?: SaveBufferOptions): Promise {\n if (this.saveBufferManager && this.audioProcessor) {\n return await this.saveBufferManager?.saveBuffer(this.audioProcessor.renderedBuffer, options);\n }\n\n return false;\n }\n\n set downloadingInitialData(state: boolean) {\n if (this.bufferManager) {\n this.bufferManager.downloadingInitialData = state;\n }\n }\n\n get downloadingInitialData(): boolean {\n if (this.bufferManager) {\n return this.bufferManager.downloadingInitialData;\n }\n\n return false;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_EDITOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport utils from \"../utils/Functions\";\nimport Constants from \"@/model/Constants\";\nimport AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioProcessor extends AbstractAudioElement implements AudioProcessorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The filter manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The current offline context */\n private currentOfflineContext: OfflineAudioContext | null | undefined;\n\n /** The resulting audio buffer */\n private _renderedBuffer: AudioBuffer | null = null;\n\n /** true if the user wanted to cancel audio rendering */\n private audioRenderingLastCanceled = false;\n\n /** true if initial rendering for the current buffer was done */\n initialRenderingDone = false;\n /** The sum of all the samples of the input buffer,\n * used to detect the need to enable the compatibility mode */\n sumInputBuffer: number = 0;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.bufferManager = bufferManager;\n }\n\n async prepareContext(inputBuffer: AudioBuffer | null) {\n if (this.contextManager) {\n const changed = this.contextManager.createNewContextIfNeeded(inputBuffer);\n\n if (changed && this.bufferManager) {\n await this.bufferManager.resetBufferFetcher();\n }\n\n if (this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n }\n }\n\n async renderAudio(inputBuffer: AudioBuffer | null): Promise {\n await this.prepareContext(inputBuffer);\n\n if (!this.contextManager || !this.contextManager.currentContext) {\n throw new Error(\"AudioContext is not yet available\");\n }\n\n if (!this.filterManager) {\n throw new Error(\"Filter manager is not available\");\n }\n\n if (!this.rendererManager) {\n throw new Error(\"Renderer manager is not available\");\n }\n\n if (!this.filterManager.entrypointFilter) {\n throw new Error(\"Entrypoint filter is not available\");\n }\n\n if (!inputBuffer) {\n throw new Error(\"No principal buffer available\");\n }\n\n // If initial rendering is disabled and compatibility mode is disabled, we stop here\n if (!this.initialRenderingDone && this.configService && this.configService.isInitialRenderingDisabled() && !this.configService.isCompatibilityModeEnabled()) {\n this.loadInitialBuffer(inputBuffer);\n this.initialRenderingDone = true;\n return true;\n }\n\n // If switching from compatiblity mode to normal mode, we stop the audio player\n if (this.configService && this.bufferPlayer && !this.configService.isCompatibilityModeEnabled() && this.bufferPlayer.compatibilityMode) {\n this.bufferPlayer.stop();\n }\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n const durationAudio = utils.calculateAudioDuration(inputBuffer, this.filterManager, speedAudio);\n const offlineContext = new OfflineAudioContext(2, this.contextManager.currentContext.sampleRate * durationAudio, this.contextManager.currentContext.sampleRate);\n const outputContext = this.configService && this.configService.isCompatibilityModeEnabled() ? this.contextManager.currentContext : offlineContext;\n\n this._renderedBuffer = await this.rendererManager.executeAudioRenderers(inputBuffer, outputContext);\n this.currentOfflineContext = null;\n this.audioRenderingLastCanceled = false;\n\n\n utils.resetAudioRenderingProgress(this.eventEmitter);\n this.filterManager.setupTotalSamples(durationAudio, this.contextManager.currentContext);\n\n return await this.setupOutput(inputBuffer, outputContext, durationAudio, offlineContext);\n }\n\n private setupPlayerSpeed(bufferPlayer: BufferPlayerInterface) {\n if (this.filterManager && this.filterManager.entrypointFilter) {\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n bufferPlayer.speedAudio = speedAudio;\n }\n }\n\n async setupOutput(inputBuffer: AudioBuffer | null, outputContext: BaseAudioContext, durationAudio?: number, offlineContext?: OfflineAudioContext): Promise {\n if (this._renderedBuffer && this.configService && this.eventEmitter && this.bufferPlayer && this.filterManager) {\n // Initialize worklets then connect the filter nodes\n await this.filterManager.initializeWorklets(outputContext);\n await this.filterManager.connectNodes(outputContext, this._renderedBuffer, false, this.configService.isCompatibilityModeEnabled());\n\n this.setupPlayerSpeed(this.bufferPlayer);\n\n // Standard mode\n if (!this.configService.isCompatibilityModeEnabled() && offlineContext && this.filterManager.currentNodes) {\n this.currentOfflineContext = offlineContext;\n this.filterManager.currentNodes.output.connect(outputContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n if (this.contextManager && !this.loadRenderedAudio(inputBuffer, renderedBuffer)) {\n return await this.setupOutput(inputBuffer, this.contextManager.currentContext!, durationAudio);\n }\n\n if (this.audioRenderingLastCanceled) {\n return false;\n }\n\n this.eventEmitter.emit(EventType.OFFLINE_AUDIO_RENDERING_FINISHED);\n } else { // Compatibility mode\n this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes!.output, durationAudio);\n this.initialRenderingDone = true;\n }\n\n this.eventEmitter.emit(EventType.AUDIO_RENDERING_FINISHED);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Load rendered audio buffer into audio player\n * @param renderedBuffer Rendered audio buffer - AudioBuffer\n * @returns false if the rendred audio buffer is invalid, true otherwise\n */\n private loadRenderedAudio(inputBuffer: AudioBuffer | null, renderedBuffer: AudioBuffer): boolean {\n if (this.eventEmitter && this.bufferPlayer) {\n if (!this.audioRenderingLastCanceled) {\n const sumRenderedAudio = utils.sumAudioBuffer(renderedBuffer);\n\n if (sumRenderedAudio == 0 && this.sumInputBuffer !== 0) {\n if (this.configService && !this.configService.isCompatibilityModeChecked()) {\n this.setCompatibilityModeChecked(true);\n this.configService.enableCompatibilityMode();\n this.eventEmitter.emit(EventType.COMPATIBILITY_MODE_AUTO_ENABLED);\n\n return false;\n }\n\n this.eventEmitter.emit(EventType.RENDERING_AUDIO_PROBLEM_DETECTED);\n }\n\n this._renderedBuffer = renderedBuffer;\n this.bufferPlayer.loadBuffer(this._renderedBuffer);\n } else if (!this.initialRenderingDone) {\n this.loadInitialBuffer(inputBuffer);\n this.eventEmitter.emit(EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO);\n }\n\n this.initialRenderingDone = true;\n }\n\n return true;\n }\n\n /**\n * Load the initial audio buffer to the buffer player\n */\n private loadInitialBuffer(inputBuffer: AudioBuffer | null) {\n if (this.bufferPlayer) {\n this._renderedBuffer = inputBuffer;\n this.bufferPlayer.loadBuffer(inputBuffer!);\n }\n }\n\n public cancelAudioRendering() {\n if (this.currentOfflineContext && !this.audioRenderingLastCanceled && this.filterManager) {\n this.audioRenderingLastCanceled = true;\n this.filterManager.disconnectOldNodes(false);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.CANCELLING_AUDIO_PROCESSING);\n }\n }\n }\n\n /**\n * Set compatibility/direct audio rendering mode already checked for auto enabling (if an error occurs rendering in offline context)\n * @param checked boolean\n */\n private setCompatibilityModeChecked(checked: boolean) {\n if (this.configService) {\n this.configService.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED, \"\" + checked);\n }\n }\n\n get renderedBuffer() {\n return this._renderedBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_PROCESSOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport Constants from \"@/model/Constants\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport { inject, injectable } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\n\n@injectable()\nexport default class BufferManager extends AbstractAudioElement implements BufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** True if we are downloading initial buffer data */\n downloadingInitialData = false;\n\n /** List of audio buffers to fetch */\n private audioBuffersToFetch: string[] = [];\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.BufferFetcherService) bufferFetcherService: BufferFetcherServiceInterface,\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.AudioBuffersToFetch) audioBuffersToFetch: string[]) {\n super();\n\n this.bufferFetcherService = bufferFetcherService;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.filterManager = filterManager;\n this.filterManager = filterManager;\n this.audioBuffersToFetch = audioBuffersToFetch;\n\n this.setup();\n }\n\n private setup() {\n if (this.audioBuffersToFetch.length > 0) {\n this.fetchBuffers(false);\n }\n }\n\n /**\n * Fetch default buffers from network\n * @param refetch true if we need to refetch the buffers\n */\n private async fetchBuffers(refetch: boolean) {\n if (this.downloadingInitialData || !this.bufferFetcherService) {\n return;\n }\n\n this.downloadingInitialData = true;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS);\n }\n\n try {\n await this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch);\n this.downloadingInitialData = false;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADED_BUFFERS);\n }\n } catch (e) {\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS_ERROR);\n }\n }\n }\n\n async resetBufferFetcher() {\n if (this.bufferFetcherService) {\n this.bufferFetcherService.reset();\n\n await this.fetchBuffers(true);\n\n if (this.filterManager) {\n await this.filterManager.resetFilterBuffers();\n }\n }\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_MANAGER;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"@/filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"@/filters/interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"@/model/AudioNodes\";\nimport AbstractAudioFilterWorklet from \"@/filters/interfaces/AbstractAudioFilterWorklet\";\nimport { FilterState } from \"@/model/FilterState\";\nimport { FilterSettings } from \"@/model/filtersSettings/FilterSettings\";\nimport Constants from \"@/model/Constants\";\nimport FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { inject, injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class FilterManager extends AbstractAudioElement implements FilterManagerInterface {\n\n /** A list of filters */\n private filters: AbstractAudioFilter[] = [];\n\n /** The entrypoint filter */\n private _entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null = null;\n\n /** The current connected nodes */\n private _currentNodes: AudioFilterNodes | null = null;\n\n constructor(\n @multiInject(TYPES.Filters) filters: AbstractAudioFilter[],\n @inject(TYPES.EntryPointFilter) entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null\n ) {\n super();\n\n this.filters = filters;\n this._entryPointFilter = entryPointFilter;\n\n this.setup();\n }\n\n private setup() {\n for (const filter of this.filters) {\n filter.initializeDefaultSettings();\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n for (const filter of filters) {\n filter.initializeDefaultSettings();\n filter.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.filters.push(...filters);\n }\n\n getFiltersState(): FilterState {\n const state: FilterState = {};\n\n this.filters.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n getFiltersSettings(): Map {\n const settings = new Map();\n\n for (const filter of this.filters) {\n settings.set(filter.id, filter.getSettings());\n }\n\n return settings;\n }\n\n toggleFilter(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n filter.toggle();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n for (const key of Object.keys(settings)) {\n await filter.setSetting(key, settings[key]);\n }\n }\n }\n\n async resetFilterSettings(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n await filter.resetSettings();\n }\n }\n\n resetAllFiltersState() {\n this.filters.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async connectNodes(context: BaseAudioContext, buffer: AudioBuffer, keepCurrentInputOutput: boolean, isCompatibilityMode: boolean) {\n if (!this._entryPointFilter) {\n return;\n }\n\n let entrypointNode: AudioNode | null = null;\n\n if (keepCurrentInputOutput && this._currentNodes) {\n entrypointNode = this._currentNodes.input;\n } else {\n const entrypointNodes = await this._entryPointFilter.getEntrypointNode(context, buffer, !isCompatibilityMode);\n entrypointNode = entrypointNodes.input;\n }\n\n const intermediateNodes: AudioFilterNodes[] = [];\n let previousNode: AudioNode | undefined = entrypointNode;\n\n this.disconnectOldNodes(keepCurrentInputOutput);\n\n // Sort by filter order, then remove the disabled filter (but always keep the last/output filter)\n const filters = this.filters\n .sort((a, b) => a.order - b.order)\n .filter((filter, index) => filter !== this._entryPointFilter && (filter.isEnabled() || index >= this.filters.length - 1));\n\n for (const filter of filters) {\n const node = filter.getNode(context);\n\n if (previousNode) {\n previousNode.connect(node.input);\n }\n\n previousNode = node.output;\n intermediateNodes.push(node);\n }\n\n if (this._entryPointFilter) {\n this._entryPointFilter.updateState();\n }\n\n this._currentNodes = {\n input: entrypointNode!,\n output: previousNode!,\n intermediateNodes: intermediateNodes\n .filter(n => n.input != previousNode && n.output != previousNode &&\n n.input != entrypointNode && n.output != entrypointNode)\n };\n }\n\n disconnectOldNodes(keepCurrentOutput: boolean) {\n if (this._currentNodes) {\n this._currentNodes.input.disconnect();\n\n if (!keepCurrentOutput) {\n this._currentNodes.output.disconnect();\n }\n\n if (this._currentNodes.intermediateNodes) {\n for (const intermediate of this._currentNodes.intermediateNodes) {\n intermediate.input.disconnect();\n intermediate.output.disconnect();\n }\n }\n }\n }\n\n async initializeWorklets(context: BaseAudioContext) {\n for (const filter of this.filters) {\n if (filter.isWorklet()) {\n await (filter as AbstractAudioFilterWorklet).initializeWorklet(context);\n }\n }\n }\n\n getAddingTime() {\n let duration = 0;\n\n for (const filter of this.filters) {\n if (filter.isEnabled()) {\n duration += filter.getAddingTime();\n }\n }\n\n return duration;\n }\n\n setupTotalSamples(durationAudio: number, currentContext: AudioContext | null) {\n if (currentContext) {\n const totalSamples = durationAudio * currentContext.sampleRate;\n\n for (const filter of this.filters) {\n filter.totalSamples = totalSamples;\n }\n }\n }\n\n async resetFilterBuffers() {\n for (const filter of this.filters) {\n await filter.bufferFetcherReseted();\n }\n }\n\n get entrypointFilter() {\n return this._entryPointFilter;\n }\n\n get currentNodes() {\n return this._currentNodes;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.FILTER_MANAGER;\n }\n}\n","import { injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioRenderer from \"@/filters/interfaces/AbstractAudioRenderer\";\nimport { FilterState } from \"@/model/FilterState\";\nimport Constants from \"@/model/Constants\";\nimport RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\n\n@injectable()\nexport default class RendererManager extends AbstractAudioElement implements RendererManagerInterface {\n\n /** A list of renderers */\n private renderers: AbstractAudioRenderer[] = [];\n\n constructor(\n @multiInject(TYPES.Renderers) renderers: AbstractAudioRenderer[] = []) {\n super();\n\n this.renderers = renderers;\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n for (const renderer of renderers) {\n renderer.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.renderers.push(...renderers);\n }\n\n getRenderersState(): FilterState {\n const state: FilterState = {};\n\n this.renderers.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n toggleRenderer(rendererId: string) {\n const renderer = this.renderers.find(f => f.id === rendererId);\n\n if (renderer) {\n renderer.toggle();\n }\n }\n\n resetAllRenderersState() {\n this.renderers.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async executeAudioRenderers(buffer: AudioBuffer, outputContext: AudioContext | OfflineAudioContext) {\n let currentBuffer = buffer;\n\n for (const renderer of this.renderers.sort((a, b) => a.order - b.order)) {\n if (renderer.isEnabled()) {\n currentBuffer = await renderer.renderAudio(outputContext, currentBuffer);\n }\n }\n\n return currentBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.RENDERER_MANAGER;\n }\n}\n","export default function getRecorderWorker(workerBasePath?: string): Worker {\n return new Worker((workerBasePath ? workerBasePath : \"\") + \"RecorderWorker.js\");\n};\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { RecorderCallback, RecorderCallbacks } from \"../model/RecorderCallback\";\nimport type RecorderConfig from \"../model/RecorderConfig\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport RecorderWorkletMessage from \"../model/RecorderWorkletMessage\";\nimport utilFunctions from \"../utils/Functions\";\nimport getRecorderWorker from \"./getRecorderWorker\";\nimport RecorderInterface from \"./interfaces/RecorderInterface\";\n\n@injectable()\nexport class Recorder implements RecorderInterface {\n\n // Inline Worker\n private worker: Worker | null = null;\n private node: ScriptProcessorNode | AudioWorkletNode | null = null;\n private context: BaseAudioContext | null = null;\n\n private config: RecorderConfig = {\n bufferLen: 4096,\n sampleRate: 44100,\n numChannels: 2,\n mimeType: \"audio/wav\",\n workletBasePath: \"worklets/\",\n workerBasePath: \"workers/\",\n bitrate: Constants.DEFAULT_MP3_BITRATE,\n callback: () => { }\n };\n\n private callbacks: RecorderCallbacks = {\n getBuffer: [],\n exportWAV: [],\n exportMP3: []\n };\n\n recording = false;\n\n constructor(cfg: RecorderConfig) {\n Object.assign(this.config, cfg);\n }\n\n async setup(source: AudioNode) {\n if (this.node) { // Disconnect previous node\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n\n this.node.disconnect();\n }\n\n if (source) {\n this.context = source.context;\n\n await this.createRecorderNode();\n\n if (this.node && this.context) {\n source.connect(this.node);\n this.node.connect(this.context.destination); //this should not be necessary\n }\n }\n\n if (this.context && !this.worker) {\n this.worker = getRecorderWorker(this.config.workerBasePath);\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"init\",\n config: {\n sampleRate: this.context.sampleRate,\n numChannels: this.config.numChannels,\n bitrate: this.config.bitrate\n }\n });\n\n this.worker.onmessage = (e: RecorderWorkerMessage) => {\n let callbacks = null;\n\n switch (e.data.command) {\n case \"getBuffer\":\n callbacks = this.callbacks.getBuffer;\n break;\n case Constants.EXPORT_WAV_COMMAND:\n callbacks = this.callbacks.exportWAV;\n break;\n case Constants.EXPORT_MP3_COMMAND:\n callbacks = this.callbacks.exportMP3;\n break;\n }\n\n if (callbacks) {\n const cb = callbacks.pop();\n if (typeof cb == \"function\") {\n (cb as RecorderCallback)(e.data.data);\n }\n }\n };\n }\n }\n }\n\n\n private async createRecorderNode() {\n if (this.context) {\n if (utilFunctions.isAudioWorkletCompatible(this.context) && Constants.ENABLE_RECORDER_AUDIO_WORKLET) {\n try {\n await this.createRecorderWorklet();\n } catch(e) {\n this.createRecorderScriptProcessorNode();\n }\n } else {\n this.createRecorderScriptProcessorNode();\n }\n }\n }\n\n private async createRecorderWorklet() {\n if (this.context) {\n await this.context.audioWorklet.addModule(this.config.workletBasePath + Constants.WORKLET_PATHS.RECORDER_WORKLET);\n\n this.node = new AudioWorkletNode(this.context, Constants.WORKLET_NAMES.RECORDER_WORKLET);\n\n if (this.node && this.node.port) {\n const numChannelParameter = this.node.parameters.get(\"numChannels\");\n\n if(numChannelParameter) {\n numChannelParameter.value = this.config.numChannels;\n numChannelParameter.setValueAtTime(this.config.numChannels, 0);\n }\n\n this.node.port.onmessage = (e: MessageEvent) => {\n if (this.worker && e.data.command == \"record\" && e.data.buffer.length > 0) {\n this.worker.postMessage({\n command: \"record\",\n buffer: e.data.buffer\n });\n }\n };\n }\n }\n }\n\n private createRecorderScriptProcessorNode() {\n if (this.context) {\n this.node = (this.context.createScriptProcessor).call(this.context,\n this.config.bufferLen, this.config.numChannels, this.config.numChannels);\n\n this.node.onaudioprocess = (e) => {\n if (!this.recording) return;\n\n const buffer = [];\n for (let channel = 0; channel < this.config.numChannels; channel++) {\n buffer.push(e.inputBuffer.getChannelData(channel));\n }\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"record\",\n buffer: buffer\n });\n }\n };\n }\n }\n\n record() {\n this.recording = true;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"record\");\n }\n }\n\n stop() {\n this.recording = false;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n }\n\n clear() {\n if (this.worker) {\n this.worker.postMessage({ command: \"clear\" });\n }\n }\n\n kill() {\n this.clear();\n this.stop();\n\n if (this.worker) {\n this.worker.terminate();\n }\n }\n\n getBuffer(cb: RecorderCallback) {\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.getBuffer.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({ command: \"getBuffer\" });\n }\n }\n\n exportWAV(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportWAV.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_WAV_COMMAND,\n type: mimeType\n });\n }\n }\n\n exportMP3(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportMP3.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_MP3_COMMAND,\n type: mimeType\n });\n }\n } \n};\n\nexport default Recorder;\n","import { inject, injectable } from \"inversify\";\nimport { TYPES } from \"../inversify.types\";\nimport { Recorder } from \"../recorder/Recorder\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport SaveBufferOptions from \"@/model/SaveBufferOptions\";\nimport Constants from \"@/model/Constants\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport getRecorderWorker from \"../recorder/getRecorderWorker\";\nimport SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport utilFunctions from \"@/utils/Functions\";\n\n@injectable()\nexport default class SaveBufferManager extends AbstractAudioElement implements SaveBufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** If we are currently processing and downloading the buffer */\n private savingBuffer = false;\n /** Callback used when saving audio */\n private playingStoppedCallback: (() => void) | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface\n ) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n\n // Callback called just before starting audio player\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.savingBuffer && this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n }\n }\n\n async saveBuffer(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n if (this.savingBuffer) {\n throw new Error(\"The buffer is currently saving\");\n }\n\n if (!this.bufferPlayer) {\n throw new Error(\"No buffer player was found\");\n }\n\n this.savingBuffer = true;\n\n let savingResult = false;\n\n if (!this.bufferPlayer.compatibilityMode) {\n savingResult = await this.saveBufferDirect(renderedBuffer, options);\n } else {\n savingResult = await this.saveBufferCompatibilityMode(options);\n }\n\n this.savingBuffer = false;\n\n return savingResult;\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is disabled\n * @param renderedBuffer The rendered buffer to save\n * @param options The save options\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferDirect(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!renderedBuffer || (this.contextManager && !this.contextManager.currentContext)) {\n return reject(\"No rendered buffer or AudioContext not initialized\");\n }\n\n const worker = getRecorderWorker(this.configService?.getWorkerBasePath());\n\n if (worker) {\n const buffer: Float32Array[] = [];\n\n for (let i = 0; i < renderedBuffer.numberOfChannels; i++) {\n buffer.push(renderedBuffer.getChannelData(i));\n }\n\n worker.onmessage = (e: RecorderWorkerMessage) => {\n if (e.data.command == Constants.EXPORT_WAV_COMMAND || e.data.command == Constants.EXPORT_MP3_COMMAND) {\n this.downloadAudioBlob(e.data.data, options);\n }\n\n worker.terminate();\n this.savingBuffer = false;\n resolve(true);\n };\n\n worker.postMessage({\n command: Constants.INIT_COMMAND,\n config: {\n sampleRate: renderedBuffer.sampleRate,\n numChannels: 2,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n }\n });\n\n worker.postMessage({\n command: Constants.RECORD_COMMAND,\n buffer\n });\n\n worker.postMessage({\n command: options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\" ? Constants.EXPORT_MP3_COMMAND : Constants.EXPORT_WAV_COMMAND,\n type: Constants.AUDIO_WAV\n });\n }\n });\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is enabled\n * @param options The save options - see SaveBufferOptions\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferCompatibilityMode(options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!this.bufferPlayer) {\n return reject(\"No buffer player found\");\n }\n\n this.bufferPlayer.start().then(() => {\n if (!this.configService) {\n return reject(\"No config service found\");\n }\n\n if (!this.filterManager) {\n return reject(\"No filter manager found\");\n }\n\n const rec = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: options?.format == \"mp3\" ? Constants.AUDIO_MP3 : Constants.AUDIO_WAV,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n });\n\n rec.setup(this.filterManager.currentNodes!.output).then(() => {\n rec.record();\n\n this.playingStoppedCallback = () => {\n rec.kill();\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n\n if (this.playingStoppedCallback) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n }\n\n resolve(true);\n };\n\n const finishedCallback = () => {\n if (this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n\n rec.stop();\n\n const downloadBlobCallback = (blob: Blob) => {\n this.downloadAudioBlob(blob, options);\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n }\n\n rec.kill();\n\n resolve(true);\n };\n\n if (options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\") {\n rec.exportMP3(downloadBlobCallback);\n } else {\n rec.exportWAV(downloadBlobCallback);\n }\n };\n\n if (this.eventEmitter) {\n this.eventEmitter.on(EventType.PLAYING_FINISHED, finishedCallback);\n this.eventEmitter.on(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n });\n });\n }\n\n /**\n * Download an audio Blob\n * @param blob The blob\n * @param options The save options - see SaveBufferOptions\n */\n private downloadAudioBlob(blob: Blob, options?: SaveBufferOptions) {\n utilFunctions.forceDownload(blob, \"audio-\" + new Date().toISOString() + \".\" + (options?.format || Constants.DEFAULT_SAVE_FORMAT));\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.SAVE_BUFFER_MANAGER;\n }\n}\n","/*\n * Copyright (C) 2019-2024 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The audio buffer player\n// Used to play the audio buffer, with time controls, pause/play, stop and loop\nimport { EventType } from \"../model/EventTypeEnum\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport BufferPlayerInterface from \"./interfaces/BufferPlayerInterface\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n// Also used in compatibility mode (which doesn't use audio buffer) with less functions (no time control)\n@injectable()\nexport default class BufferPlayer extends AbstractAudioElement implements BufferPlayerInterface {\n\n private _contextManager: AudioContextManagerInterface | undefined | null;\n\n private buffer: AudioBuffer | null = null;\n private source: AudioBufferSourceNode | null = null;\n currentTime = 0;\n displayTime = 0;\n duration = 0;\n private intervals: number[] = [];\n playing = false;\n loop = false;\n speedAudio = 1;\n private onBeforePlayingCallback: () => void = async () => { };\n\n compatibilityMode = false;\n currentNode: AudioNode | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined | null) {\n super();\n\n this._contextManager = contextManager;\n }\n\n init(direct?: boolean) {\n this.playing = false;\n\n if (this._contextManager && this._contextManager.currentContext) {\n this._contextManager.currentContext.resume();\n\n if (!this.compatibilityMode && this.buffer) {\n if (this.source != null && !direct) this.source.disconnect();\n this.source = this._contextManager.currentContext.createBufferSource();\n this.source.buffer = this.buffer;\n this.duration = this.buffer.duration * this.speedAudio;\n this.source.connect(this._contextManager.currentContext.destination);\n }\n }\n\n this.updateInfos();\n }\n\n loadBuffer(buffer: AudioBuffer) {\n this.compatibilityMode = false;\n this.reset();\n this.buffer = buffer;\n this.init();\n }\n\n setCompatibilityMode(currentNode: AudioNode, duration?: number) {\n this.compatibilityMode = true;\n this.reset();\n this.init();\n\n if (duration != null) {\n this.duration = duration * this.speedAudio;\n }\n\n this.currentNode = currentNode;\n this.updateInfos();\n }\n\n reset(direct?: boolean) {\n this.clearIntervals();\n\n this.currentTime = 0;\n this.displayTime = 0;\n\n if (!direct) {\n this.stop();\n }\n }\n\n stop() {\n this.clearIntervals();\n\n if (this.source != undefined && this.source != null && this.playing) {\n this.source.stop(0);\n this.playing = false;\n }\n\n if (this.currentNode) {\n this.currentNode.disconnect();\n\n if (this.compatibilityMode) {\n this.currentTime = 0;\n this.displayTime = 0;\n }\n }\n\n this.eventEmitter?.emit(EventType.PLAYING_STOPPED);\n this.updateInfos();\n }\n\n /**\n * Clear old intervals\n */\n private clearIntervals() {\n for (const interval of this.intervals) {\n clearInterval(interval);\n }\n\n this.intervals = [];\n }\n\n async start(direct?: boolean) {\n if (this.source || this.compatibilityMode) {\n if (!direct) {\n this.stop();\n }\n\n this.init(direct);\n\n await this.onBeforePlayingCallback();\n\n this.eventEmitter?.emit(EventType.PLAYING_STARTED);\n\n if (!this.compatibilityMode) {\n if (this.source) {\n this.source.start(0, direct ? 0 : this.currentTime / this.speedAudio);\n this.playing = true;\n } else {\n return;\n }\n } else {\n if (this.currentNode && this._contextManager && this._contextManager.currentContext) {\n this.currentNode.connect(this._contextManager.currentContext.destination);\n } else {\n return;\n }\n }\n\n let startTime = performance.now();\n\n this.intervals.push(window.setInterval(() => {\n const timeNow = performance.now();\n const nextTime = timeNow - startTime;\n startTime = timeNow;\n\n this.currentTime += (nextTime / 1000) * this.speedAudio;\n this.displayTime = this.currentTime;\n\n if (this.currentTime > this.duration) {\n if (this.loop) {\n if (!this.compatibilityMode) {\n this.reset(direct);\n this.start();\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n }\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n this.reset(direct);\n }\n } else {\n this.updateInfos();\n }\n }, 100));\n }\n }\n\n async playDirect() {\n if (!this.compatibilityMode) {\n this.start(true);\n } else {\n // Play direct is not possible when compatibility mode is enabled\n this.start(false);\n }\n }\n\n pause() {\n this.stop();\n }\n\n /** Send an event to update the informations of this player */\n private updateInfos() {\n this.eventEmitter?.emit(EventType.PLAYING_UPDATE);\n }\n\n setTimePercent(percent: number) {\n if (!this.compatibilityMode) {\n this.currentTime = Math.round(this.duration * (percent / 100));\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n setTime(time: number) {\n if (!this.compatibilityMode) {\n this.currentTime = time;\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n onBeforePlaying(callback: () => void) {\n this.onBeforePlayingCallback = callback;\n }\n\n toggleLoop() {\n this.loop = !this.loop;\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n get currentTimeDisplay() {\n return (\"0\" + Math.trunc(this.displayTime / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.displayTime % 60)).slice(-2);\n }\n\n get maxTimeDisplay() {\n return (\"0\" + Math.trunc(this.duration / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.duration % 60)).slice(-2);\n }\n\n get percent() {\n return (100 - Math.round((this.duration - this.displayTime) / this.duration * 100));\n }\n\n get remainingTimeDisplay() {\n return (\"0\" + Math.trunc((this.duration - this.displayTime) / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc((this.duration - this.displayTime) % 60)).slice(-2);\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_PLAYER;\n }\n}\n","import { EventType } from \"../model/EventTypeEnum\";\nimport type { ConfigService } from \"./interfaces/ConfigService\";\nimport utilFunctions from \"../utils/Functions\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport BufferFetcherServiceInterface from \"./interfaces/BufferFetcherServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferFetcherService implements BufferFetcherServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private buffers: Map = new Map();\n private bufferErrors: string[] = [];\n private eventEmitter: EventEmitterInterface | null;\n private configService: ConfigService | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.ConfigService) configService: ConfigService,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n }\n\n async fetchBuffer(bufferURI: string, force?: boolean) {\n const realBufferURI = (this.configService ? this.configService.getSoundBasePath() : \"\") + bufferURI;\n\n if(this.buffers.get(this.getKeyFromLocation(realBufferURI)) != null && !force) {\n return;\n }\n\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS, realBufferURI);\n\n try {\n const response = await fetch(realBufferURI);\n\n if(!response.ok) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n } else {\n const arrayBuffer = await response.arrayBuffer();\n\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await this.contextManager.currentContext.decodeAudioData(arrayBuffer);\n this.buffers.set(this.getKeyFromLocation(realBufferURI), utilFunctions.decodeBuffer(this.contextManager.currentContext, buffer));\n }\n }\n \n this.eventEmitter?.emit(EventType.FINISHED_FETCHING_BUFFERS, realBufferURI);\n } catch(e) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n }\n }\n\n async fetchAllBuffers(bufferURIs: string[]) {\n for(const uri of bufferURIs) {\n await this.fetchBuffer(uri);\n }\n }\n\n getAudioBuffer(filename: string): AudioBuffer | undefined {\n return this.buffers.get(this.getKeyFromLocation(filename));\n }\n\n async getOrFetchAudioBuffer(filename: string): Promise {\n if(this.getAudioBuffer(filename) == null) {\n await this.fetchBuffer(filename);\n }\n\n return this.getAudioBuffer(filename);\n }\n\n getDownloadedBuffersList(): string[] {\n return Array.from(this.buffers.keys());\n }\n\n private getKeyFromLocation(location: string) {\n return location.substring(location.lastIndexOf(\"/\") + 1);\n }\n\n reset() {\n this.buffers.clear();\n }\n}\n","import type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport utilFunctions from \"../utils/Functions\";\nimport BufferDecoderServiceInterface from \"./interfaces/BufferDecoderServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferDecoderService implements BufferDecoderServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private eventEmitter: EventEmitterInterface | null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n }\n\n async decodeBufferFromFile(file: File): Promise {\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODING_AUDIO_FILE);\n }\n\n try {\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await utilFunctions.loadAudioBuffer(this.contextManager.currentContext, file);\n \n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n }\n \n return buffer;\n }\n } catch (e) {\n console.error(e);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n this.eventEmitter.emit(EventType.ERROR_DECODING_AUDIO_FILE);\n }\n }\n\n return null;\n }\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\n\nexport default abstract class AbstractAudioRenderer extends AbstractAudioElement {\n\n /** Render an AudioBuffer based on another input AudioBuffer */\n abstract renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise;\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\nimport { AudioFilterNodes } from \"../../model/AudioNodes\";\nimport { FilterSettingValue, FilterSettings } from \"../../model/filtersSettings/FilterSettings\";\n\nexport default abstract class AbstractAudioFilter extends AbstractAudioElement {\n\n /** The default settings */\n private defaultSettings: FilterSettings | null = null;\n\n /** Total sample of the input audio buffer */\n protected _totalSamples = 0;\n\n /** Return a input and output AudioNode of the filter */\n abstract getNode(context: BaseAudioContext): AudioFilterNodes;\n\n /** Return an object with current settings of this filter */\n abstract getSettings(): FilterSettings;\n\n /** Set a filter setting */\n abstract setSetting(settingId: string, value: FilterSettingValue): Promise;\n\n /** Get the amount of time this filter add to the audio */\n getAddingTime(): number {\n return 0;\n }\n\n /** Store the default settings */\n public initializeDefaultSettings() {\n this.defaultSettings = this.getSettings();\n }\n\n /** Returns the default settings of this filter */\n public getDefaultSettings() {\n return this.defaultSettings;\n }\n\n /** Reset the default settings of this filter */\n public async resetSettings() {\n if (this.defaultSettings) {\n for (const key in this.defaultSettings) {\n if (this.defaultSettings && typeof (this.defaultSettings[key]) !== \"undefined\") {\n await this.setSetting(key, this.defaultSettings[key]);\n }\n }\n }\n }\n\n /** Return if the current filter use an audio worklet */\n public isWorklet() {\n return false;\n }\n\n /**\n * Called when the buffer fetcher was reseted\n * @returns boolean\n */\n public async bufferFetcherReseted(): Promise {\n return false;\n }\n\n set totalSamples(value: number) {\n this._totalSamples = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * This class is a polyfill for the standard web AudioParam class used by worklets\n */\nexport default class AudioParamPolyfill implements AudioParam {\n private _value: number = 0;\n private _minValue: number = 0;\n private _maxValue: number = Number.MAX_SAFE_INTEGER;\n private _defaultValue: number = 0;\n private context: BaseAudioContext | null = null;\n automationRate: AutomationRate = \"a-rate\";\n\n constructor(context: BaseAudioContext, defaultValue?: number) {\n this._defaultValue = defaultValue !== undefined ? defaultValue : 0;\n this._value = this._defaultValue;\n this.context = context;\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(newValue: number) {\n this._value = Math.max(this._minValue, Math.min(this._maxValue, newValue));\n }\n\n get minValue(): number {\n return this._minValue;\n }\n\n get maxValue(): number {\n return this._maxValue;\n }\n\n get defaultValue(): number {\n return this._defaultValue;\n }\n\n setValueAtTime(value: number, startTime: number): AudioParam {\n console.warn(\"setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n linearRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n exponentialRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n cancelAndHoldAtTime(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n cancelScheduledValues(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setValueCurveAtTime(values: unknown, startTime: unknown, duration: unknown): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\nimport AudioParamPolyfill from \"./AudioParamPolyfill\";\nimport Functions from \"../utils/Functions\";\n\n/**\n * This class convert an audio worklet processor node to a script processor node\n * automagically. Highly experimental, and might not work with some WorkletProcessor\n */\nexport default class WorkletScriptProcessorNodeAdapter {\n\n private workletProcessor: SimpleAudioWorkletProcessor;\n private _parameters = new Map();\n private _port: MessagePort | null = null;\n private _scriptProcessorNode: ScriptProcessorNode | null;\n private currentContext: BaseAudioContext | null = null;\n\n constructor(context: BaseAudioContext, node: SimpleAudioWorkletProcessor, bufferSize?: number) {\n this.workletProcessor = node;\n this.currentContext = context;\n\n // Create a ScriptProcessorNode with the same number of input and output channels\n this._scriptProcessorNode = context.createScriptProcessor(\n bufferSize,\n 2,\n 2\n );\n\n this.setupPort();\n this.setupProcessor();\n this.setupWorkletScope(context);\n }\n\n private setupPort(): void {\n const messageChannel = new MessageChannel();\n\n messageChannel.port1.onmessage = (ev) => {\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.postMessage(ev.data);\n }\n };\n\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.onmessage = (ev) => {\n messageChannel.port1.postMessage(ev.data);\n };\n }\n\n this._port = messageChannel.port2;\n }\n\n private setupProcessor() {\n if(!this._scriptProcessorNode) {\n return;\n }\n\n this._scriptProcessorNode.onaudioprocess = (ev: AudioProcessingEvent) => {\n if(this.workletProcessor) {\n const inputArray = [Functions.convertAudioBufferToFloat32Array(ev.inputBuffer)];\n const ouputArray = [Functions.convertAudioBufferToFloat32Array(ev.outputBuffer)];\n\n const records: [string, Float32Array][] = [];\n\n for (const [key, value] of this._parameters.entries()) {\n records.push([key, Functions.convertAudioParamToFloat32Array(value, 1)]);\n }\n\n const recordsMap: Record = Object.fromEntries(records);\n \n this.workletProcessor.process(inputArray, ouputArray, recordsMap);\n }\n };\n\n const descriptors = this.workletProcessor.defaultParameterDescriptors;\n\n if(descriptors) {\n descriptors.forEach(descriptor => {\n if(this.currentContext) {\n this._parameters.set(descriptor.name, new AudioParamPolyfill(this.currentContext, descriptor.defaultValue));\n }\n });\n }\n }\n\n private setupWorkletScope(context: BaseAudioContext) {\n if(typeof(window) !== \"undefined\") {\n window.sampleRate = context.sampleRate;\n }\n }\n\n get port() {\n return this._port;\n }\n\n get parameters(): AudioParamMap {\n return this._parameters;\n }\n\n get node() {\n return this._scriptProcessorNode;\n }\n\n get context() {\n return this._scriptProcessorNode?.context;\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\n/**\n * Polyfill for registerProcessor method used in AudioWorklets\n */\nexport default class RegisterProcessorPolyfill {\n\n private static processorsMap = new Map();\n\n static registerProcessor(processorName: string, processorClass: typeof SimpleAudioWorkletProcessor) {\n RegisterProcessorPolyfill.processorsMap.set(processorName, processorClass);\n }\n\n static getProcessor(processorName: string): SimpleAudioWorkletProcessor | null {\n const processor = RegisterProcessorPolyfill.processorsMap.get(processorName);\n\n if(processor) {\n return new processor();\n }\n\n return null;\n }\n};\n","/**\n * This class is the standard AudioWorkletProcessor interface\n */\nexport interface AudioWorkletProcessorInterface {\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean;\n get parameters(): AudioParamMap;\n get parameterDescriptors(): AudioParamMap;\n messageProcessor?: (event: MessageEvent) => void;\n}\n\ntype ParameterDescriptors = {\n name: string;\n defaultValue: number;\n}[];\n\n/**\n * This class is a polyfill for the AudioWorkletProcessor interface\n */\nexport default class SimpleAudioWorkletProcessor implements AudioWorkletProcessorInterface {\n private messageChannel: MessageChannel | null = null;\n messageProcessor?: ((event: MessageEvent) => void) | undefined;\n\n constructor() {\n this.messageChannel = new MessageChannel();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n return true;\n }\n\n get port(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port1;\n }\n\n get port2(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port2;\n }\n\n get parameters(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get parameterDescriptors(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get defaultParameterDescriptors(): ParameterDescriptors {\n return [];\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RegisterProcessorPolyfill from \"./RegisterProcessorPolyfill\";\nimport SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\nif(typeof(window) !== \"undefined\" && !(\"AudioWorkletProcessor\" in window)) {\n (window as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (window as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n\nif(typeof(global) !== \"undefined\" && !(\"AudioWorkletProcessor\" in global)) {\n (global as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (global as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n","import WorkletScriptProcessorNodeAdapter from \"../../workletPolyfill/WorkletScriptProcessorNodeAdapter\";\nimport AbstractAudioFilter from \"./AbstractAudioFilter\";\nimport Constants from \"../../model/Constants\";\nimport \"../../workletPolyfill/AudioWorkletProcessorPolyfill\";\nimport RegisterProcessorPolyfill from \"../../workletPolyfill/RegisterProcessorPolyfill\";\nimport utilFunctions from \"../../utils/Functions\";\n\nexport default abstract class AbstractAudioFilterWorklet extends AbstractAudioFilter {\n\n protected currentWorkletNode: AudioWorkletNode | WorkletScriptProcessorNodeAdapter | null = null;\n\n protected fallbackToScriptProcessor = false;\n\n protected keepCurrentNodeIfPossible = false;\n\n /**\n * Return the worklet name (as registered with method registerProcessor)\n */\n abstract get workletName(): string;\n\n /**\n * Return the path to worklet file\n */\n abstract get workletPath(): string;\n\n /**\n * Receive event from the worklet\n */\n abstract receiveEvent(message: MessageEvent): void;\n\n /**\n * Initialize the audio worklet by loading the module\n * @param audioContext The audio context\n */\n async initializeWorklet(audioContext: BaseAudioContext): Promise {\n this.stop();\n\n if (!utilFunctions.isAudioWorkletCompatible(audioContext)) {\n console.error(\"Audio Worklets not supported on this browser. Fallback to ScriptProcessor\");\n this.fallbackToScriptProcessor = true;\n return;\n }\n\n const workletPath = (this.configService ? this.configService.getWorkletBasePath() : \"\") + this.workletPath;\n\n await audioContext.audioWorklet.addModule(workletPath)\n .catch(e => {\n console.error(`Error when loading Worklet (${workletPath}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`, e);\n this.fallbackToScriptProcessor = true;\n });\n }\n\n /**\n * This method checks if audio worklet are enabled\n * @param audioContext \n */\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n /**\n * Initialize the AudioWorkletNode or fallback to ScriptProcessorNode\n * @param context The audio context\n * @param workletName The worklet name\n */\n private initializeNode(context: BaseAudioContext, workletName: string) {\n if (this.isAudioWorkletEnabled() && !this.fallbackToScriptProcessor) {\n // Standard Audio Worklet\n this.currentWorkletNode = new AudioWorkletNode(context, workletName);\n } else {\n // Fallback to ScriptProcessorNode (polyfill)\n const processor = RegisterProcessorPolyfill.getProcessor(workletName);\n\n if (processor) {\n this.currentWorkletNode = new WorkletScriptProcessorNodeAdapter(context, processor, this.configService!.getBufferSize());\n } else {\n throw new Error(`No processor registered with name ${workletName} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);\n }\n }\n\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.onmessage = message => this.receiveEvent(message);\n }\n }\n\n /**\n * Apply current settings to the audio worklet node.\n * Uses the getSettings method to extract the settings.\n */\n protected applyCurrentSettingsToWorklet() {\n if (this.currentWorkletNode && this.currentWorkletNode.parameters) {\n const currentSettings = this.getSettings();\n\n for (const settingKey of Object.keys(currentSettings)) {\n const settingFromWorklet = this.currentWorkletNode.parameters.get(settingKey);\n\n if (settingFromWorklet) {\n settingFromWorklet.value = currentSettings[settingKey] as number;\n settingFromWorklet.setValueAtTime(currentSettings[settingKey] as number, 0);\n }\n }\n }\n }\n\n /** Default implementation for GetNode - AbstractAudioFilterWorklet */\n getNode(context: BaseAudioContext) {\n if (!this.keepCurrentNodeIfPossible || !this.currentWorkletNode\n || this.currentWorkletNode.context != context) {\n this.stop();\n this.initializeNode(context, this.workletName);\n }\n\n this.applyCurrentSettingsToWorklet();\n this.setEnabled(this.isEnabled());\n\n if (this.currentWorkletNode) {\n if (this.currentWorkletNode instanceof WorkletScriptProcessorNodeAdapter) {\n return {\n input: this.currentWorkletNode.node!,\n output: this.currentWorkletNode.node!,\n };\n } else {\n return {\n input: this.currentWorkletNode,\n output: this.currentWorkletNode,\n };\n }\n }\n\n throw new Error(\"Worklet node has not yet been created\");\n }\n\n /**\n * Stop the current worklet node. The worklet need to respond to \"stop\" events.\n */\n stop() {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(\"stop\");\n this.currentWorkletNode.port.onmessage = null;\n }\n\n this.currentWorkletNode = null;\n }\n\n /**\n * Pass the current disabled/enabled state to the worklet.\n * The worklet need to respond to \"enable\"/\"disable\" events.\n * @param state The current disabled/enabled state\n */\n setEnabled(state: boolean): void {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(state ? \"enable\" : \"disable\");\n }\n\n super.setEnabled(state);\n }\n\n public isWorklet(): boolean {\n return true;\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass BitCrusherProcessor extends AudioWorkletProcessor {\n private stopped = false;\n private phaser: number[] | null = null;\n private last: number[] | null = null;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"bits\", defaultValue: 16 },\n { name: \"normFreq\", defaultValue: 0.9 },\n ];\n }\n\n get defaultParameterDescriptors() {\n return BitCrusherProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n const step = 2 * Math.pow(1 / 2, parameters.bits[0]);\n const currentNormFreq = (1 - parameters.normFreq[0]) / (sampleRate / 48000);\n\n if (this.last == null) {\n this.last = new Array(input.length).fill(0);\n }\n\n if (this.phaser == null) {\n this.phaser = new Array(input.length).fill(0);\n }\n\n if (input && input[0]) {\n const blockSize = input[0].length;\n\n for (let channel = 0; channel < input.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp && out) {\n for (let i = 0; i < blockSize; i++) {\n this.phaser[channel] += currentNormFreq;\n\n if (this.phaser[channel] >= 1.0) {\n this.phaser[channel] -= 1.0;\n this.last[channel] = step * Math.floor((inp[i] * (1 / step)) + 0.5);\n }\n\n out[i] = this.last[channel];\n }\n }\n }\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n this.phaser = null;\n this.last = null;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.BITCRUSHER, BitCrusherProcessor);\n","export default class DelayBuffer {\n private _array: Float32Array = new Float32Array();\n private n: number = 0;\n private length: number = 0;\n private readPointer: number = 0;\n private writePointer: number = 0;\n\n constructor(n: number) {\n this.n = Math.floor(n);\n this.init();\n }\n\n init() {\n this._array = new Float32Array(2 * this.n);\n this.length = this._array.length;\n this.readPointer = 0;\n this.writePointer = this.n - 1;\n this._array.fill(0);\n }\n\n read() {\n const value = this._array[this.readPointer % this.length];\n this.readPointer = (this.readPointer + 1) % this.length;\n return value;\n }\n\n push(v: number) {\n this._array[this.writePointer % this.length] = v;\n this.writePointer = (this.writePointer + 1) % this.length;\n }\n\n reset() {\n this.init();\n }\n\n clear() {\n this._array = new Float32Array();\n this.length = 0;\n this.readPointer = 0;\n this.writePointer = 0;\n }\n\n sum() {\n return this._array.reduce((a, b) => a + b, 0);\n }\n}\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// Source: https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/ (https://web.archive.org/web/20220519100003/https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/)\n// Original code: https://webaudiotech.com/sites/limiter_comparison/limiter.js\n// Additions by Eliastik (eliastiksofts.com): Stereo and multi-channel support, code simplified in one object class (Limiter), converted into AudioWorklet\nimport Constants from \"../../model/Constants\";\nimport DelayBuffer from \"../../utils/DelayBuffer\";\n\nclass LimiterProcessor extends AudioWorkletProcessor {\n private delayBuffer: DelayBuffer[] = [];\n private envelopeSample = 0;\n private stopped = false;\n private disabled = false;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"reset\") {\n this.reset();\n } else if (event.data == \"stop\") {\n this.stop();\n } else if (event.data == \"disable\") {\n this.disabled = true;\n } else if (event.data == \"enable\") {\n this.disabled = false;\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"preGain\", defaultValue: 0 },\n { name: \"postGain\", defaultValue: 0 },\n { name: \"attackTime\", defaultValue: 0 },\n { name: \"releaseTime\", defaultValue: 3 },\n { name: \"threshold\", defaultValue: -0.05 },\n { name: \"lookAheadTime\", defaultValue: 0 }\n ];\n }\n\n get defaultParameterDescriptors() {\n return LimiterProcessor.parameterDescriptors;\n }\n\n getEnvelope(data: Float32Array, attackTime: number, releaseTime: number, sampleRate: number) {\n const attackGain = Math.exp(-1 / (sampleRate * attackTime));\n const releaseGain = Math.exp(-1 / (sampleRate * releaseTime));\n\n const envelope = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n const envIn = Math.abs(data[i]);\n\n if (this.envelopeSample < envIn) {\n this.envelopeSample = envIn + attackGain * (this.envelopeSample - envIn);\n } else {\n this.envelopeSample = envIn + releaseGain * (this.envelopeSample - envIn);\n }\n\n envelope[i] = this.envelopeSample;\n }\n\n return envelope;\n }\n\n getMaxEnvelope(envelope: Float32Array[], channels: number, index: number) {\n let max = envelope[0][index];\n\n for (let channel = 0; channel < channels; channel++) {\n if (envelope[channel][index] > max) {\n max = envelope[channel][index];\n }\n }\n\n return max;\n }\n\n ampToDB(value: number) {\n return 20 * Math.log10(value);\n }\n\n dBToAmp(db: number) {\n return Math.pow(10, db / 20);\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const inputBuffer = inputs[0];\n const outputBuffer = outputs[0];\n const envelopeData = [];\n\n // transform db to amplitude value\n const postGainAmp = this.dBToAmp(parameters.postGain[0]);\n const preGainAmp = this.dBToAmp(parameters.preGain[0]);\n\n // apply pre gain to signal\n // compute the envelope for each channel\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n // create a delay buffer\n if (this.delayBuffer[channel] == null) {\n this.delayBuffer[channel] = new DelayBuffer(parameters.lookAheadTime[0] * sampleRate);\n }\n\n // apply pre gain to signal\n if (inp && out) {\n for (let k = 0; k < inp.length; ++k) {\n if (!this.disabled) {\n out[k] = preGainAmp * inp[k];\n } else {\n out[k] = inp[k];\n }\n }\n }\n\n // compute the envelope\n if (!this.disabled && out) {\n envelopeData[channel] = this.getEnvelope(out, parameters.attackTime[0], parameters.releaseTime[0], sampleRate);\n }\n }\n\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n if (parameters.lookAheadTime[0] > 0 && out) {\n // write signal into buffer and read delayed signal\n for (let i = 0; i < out.length; i++) {\n this.delayBuffer[channel].push(out[i]);\n out[i] = this.delayBuffer[channel].read();\n }\n }\n\n // If disabled we don't apply the limitation to the audio\n if (this.disabled) {\n continue;\n }\n\n // limiter mode: slope is 1\n const slope = 1;\n\n if (inp && out) {\n for (let i = 0; i < inp.length; i++) {\n let gainDB = slope * (parameters.threshold[0] - this.ampToDB(this.getMaxEnvelope(envelopeData, outputBuffer.length, i))); // max gain\n\n // is gain below zero?\n gainDB = Math.min(0, gainDB);\n const gain = this.dBToAmp(gainDB);\n out[i] *= (gain * postGainAmp);\n }\n }\n }\n\n return true;\n }\n\n reset() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].reset();\n }\n }\n\n this.envelopeSample = 0;\n }\n\n stop() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].clear();\n }\n }\n\n this.delayBuffer = [];\n this.envelopeSample = 0;\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.LIMITER, LimiterProcessor);\n","/*\n * SoundTouch JS v0.1.30 audio processing library\n * Copyright (c) Olli Parviainen\n * Copyright (c) Ryan Berdeen\n * Copyright (c) Jakub Fiala\n * Copyright (c) Steve 'Cutter' Blades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n */\n\nclass FifoSampleBuffer {\n constructor() {\n this._vector = new Float32Array();\n this._position = 0;\n this._frameCount = 0;\n }\n get vector() {\n return this._vector;\n }\n get position() {\n return this._position;\n }\n get startIndex() {\n return this._position * 2;\n }\n get frameCount() {\n return this._frameCount;\n }\n get endIndex() {\n return (this._position + this._frameCount) * 2;\n }\n clear() {\n this.receive(this._frameCount);\n this.rewind();\n }\n put(numFrames) {\n this._frameCount += numFrames;\n }\n putSamples(samples, position, numFrames = 0) {\n position = position || 0;\n const sourceOffset = position * 2;\n if (!(numFrames >= 0)) {\n numFrames = (samples.length - sourceOffset) / 2;\n }\n const numSamples = numFrames * 2;\n this.ensureCapacity(numFrames + this._frameCount);\n const destOffset = this.endIndex;\n this.vector.set(samples.subarray(sourceOffset, sourceOffset + numSamples), destOffset);\n this._frameCount += numFrames;\n }\n putBuffer(buffer, position, numFrames = 0) {\n position = position || 0;\n if (!(numFrames >= 0)) {\n numFrames = buffer.frameCount - position;\n }\n this.putSamples(buffer.vector, buffer.position + position, numFrames);\n }\n receive(numFrames) {\n if (!(numFrames >= 0) || numFrames > this._frameCount) {\n numFrames = this.frameCount;\n }\n this._frameCount -= numFrames;\n this._position += numFrames;\n }\n receiveSamples(output, numFrames = 0) {\n const numSamples = numFrames * 2;\n const sourceOffset = this.startIndex;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n this.receive(numFrames);\n }\n extract(output, position = 0, numFrames = 0) {\n const sourceOffset = this.startIndex + position * 2;\n const numSamples = numFrames * 2;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n }\n ensureCapacity(numFrames = 0) {\n const minLength = parseInt(numFrames * 2);\n if (this._vector.length < minLength) {\n const newVector = new Float32Array(minLength);\n newVector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._vector = newVector;\n this._position = 0;\n } else {\n this.rewind();\n }\n }\n ensureAdditionalCapacity(numFrames = 0) {\n this.ensureCapacity(this._frameCount + numFrames);\n }\n rewind() {\n if (this._position > 0) {\n this._vector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._position = 0;\n }\n }\n}\n\nclass AbstractFifoSamplePipe {\n constructor(createBuffers) {\n if (createBuffers) {\n this._inputBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n } else {\n this._inputBuffer = this._outputBuffer = null;\n }\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n set inputBuffer(inputBuffer) {\n this._inputBuffer = inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n set outputBuffer(outputBuffer) {\n this._outputBuffer = outputBuffer;\n }\n clear() {\n this._inputBuffer.clear();\n this._outputBuffer.clear();\n }\n}\n\nclass RateTransposer extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this.reset();\n this._rate = 1;\n }\n set rate(rate) {\n this._rate = rate;\n }\n reset() {\n this.slopeCount = 0;\n this.prevSampleL = 0;\n this.prevSampleR = 0;\n }\n clone() {\n const result = new RateTransposer();\n result.rate = this._rate;\n return result;\n }\n process() {\n const numFrames = this._inputBuffer.frameCount;\n this._outputBuffer.ensureAdditionalCapacity(numFrames / this._rate + 1);\n const numFramesOutput = this.transpose(numFrames);\n this._inputBuffer.receive();\n this._outputBuffer.put(numFramesOutput);\n }\n transpose(numFrames = 0) {\n if (numFrames === 0) {\n return 0;\n }\n const src = this._inputBuffer.vector;\n const srcOffset = this._inputBuffer.startIndex;\n const dest = this._outputBuffer.vector;\n const destOffset = this._outputBuffer.endIndex;\n let used = 0;\n let i = 0;\n while (this.slopeCount < 1.0) {\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * this.prevSampleL + this.slopeCount * src[srcOffset];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * this.prevSampleR + this.slopeCount * src[srcOffset + 1];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n this.slopeCount -= 1.0;\n if (numFrames !== 1) {\n out: while (true) {\n while (this.slopeCount > 1.0) {\n this.slopeCount -= 1.0;\n used = used + 1;\n if (used >= numFrames - 1) {\n break out;\n }\n }\n const srcIndex = srcOffset + 2 * used;\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * src[srcIndex] + this.slopeCount * src[srcIndex + 2];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * src[srcIndex + 1] + this.slopeCount * src[srcIndex + 3];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n }\n this.prevSampleL = src[srcOffset + 2 * numFrames - 2];\n this.prevSampleR = src[srcOffset + 2 * numFrames - 1];\n return i;\n }\n}\n\nclass FilterSupport {\n constructor(pipe) {\n this._pipe = pipe;\n }\n get pipe() {\n return this._pipe;\n }\n get inputBuffer() {\n return this._pipe.inputBuffer;\n }\n get outputBuffer() {\n return this._pipe.outputBuffer;\n }\n fillInputBuffer() {\n throw new Error('fillInputBuffer() not overridden');\n }\n fillOutputBuffer(numFrames = 0) {\n while (this.outputBuffer.frameCount < numFrames) {\n const numInputFrames = 8192 * 2 - this.inputBuffer.frameCount;\n this.fillInputBuffer(numInputFrames);\n if (this.inputBuffer.frameCount < 8192 * 2) {\n break;\n }\n this._pipe.process();\n }\n }\n clear() {\n this._pipe.clear();\n }\n}\n\nconst noop = function () {\n return;\n};\n\nclass SimpleFilter extends FilterSupport {\n constructor(sourceSound, pipe, callback = noop) {\n super(pipe);\n this.callback = callback;\n this.sourceSound = sourceSound;\n this.historyBufferSize = 22050;\n this._sourcePosition = 0;\n this.outputBufferPosition = 0;\n this._position = 0;\n }\n get position() {\n return this._position;\n }\n set position(position) {\n if (position > this._position) {\n throw new RangeError('New position may not be greater than current position');\n }\n const newOutputBufferPosition = this.outputBufferPosition - (this._position - position);\n if (newOutputBufferPosition < 0) {\n throw new RangeError('New position falls outside of history buffer');\n }\n this.outputBufferPosition = newOutputBufferPosition;\n this._position = position;\n }\n get sourcePosition() {\n return this._sourcePosition;\n }\n set sourcePosition(sourcePosition) {\n this.clear();\n this._sourcePosition = sourcePosition;\n }\n onEnd() {\n this.callback();\n }\n fillInputBuffer(numFrames = 0) {\n const samples = new Float32Array(numFrames * 2);\n const numFramesExtracted = this.sourceSound.extract(samples, numFrames, this._sourcePosition);\n this._sourcePosition += numFramesExtracted;\n this.inputBuffer.putSamples(samples, 0, numFramesExtracted);\n }\n extract(target, numFrames = 0) {\n this.fillOutputBuffer(this.outputBufferPosition + numFrames);\n const numFramesExtracted = Math.min(numFrames, this.outputBuffer.frameCount - this.outputBufferPosition);\n this.outputBuffer.extract(target, this.outputBufferPosition, numFramesExtracted);\n const currentFrames = this.outputBufferPosition + numFramesExtracted;\n this.outputBufferPosition = Math.min(this.historyBufferSize, currentFrames);\n this.outputBuffer.receive(Math.max(currentFrames - this.historyBufferSize, 0));\n this._position += numFramesExtracted;\n return numFramesExtracted;\n }\n handleSampleData(event) {\n this.extract(event.data, 4096);\n }\n clear() {\n super.clear();\n this.outputBufferPosition = 0;\n }\n}\n\nconst USE_AUTO_SEQUENCE_LEN = 0;\nconst DEFAULT_SEQUENCE_MS = USE_AUTO_SEQUENCE_LEN;\nconst USE_AUTO_SEEKWINDOW_LEN = 0;\nconst DEFAULT_SEEKWINDOW_MS = USE_AUTO_SEEKWINDOW_LEN;\nconst DEFAULT_OVERLAP_MS = 8;\nconst _SCAN_OFFSETS = [[124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806, 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0], [-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];\nconst AUTOSEQ_TEMPO_LOW = 0.5;\nconst AUTOSEQ_TEMPO_TOP = 2.0;\nconst AUTOSEQ_AT_MIN = 125.0;\nconst AUTOSEQ_AT_MAX = 50.0;\nconst AUTOSEQ_K = (AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEQ_C = AUTOSEQ_AT_MIN - AUTOSEQ_K * AUTOSEQ_TEMPO_LOW;\nconst AUTOSEEK_AT_MIN = 25.0;\nconst AUTOSEEK_AT_MAX = 15.0;\nconst AUTOSEEK_K = (AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEEK_C = AUTOSEEK_AT_MIN - AUTOSEEK_K * AUTOSEQ_TEMPO_LOW;\nclass Stretch extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this._quickSeek = true;\n this.midBufferDirty = false;\n this.midBuffer = null;\n this.overlapLength = 0;\n this.autoSeqSetting = true;\n this.autoSeekSetting = true;\n this._tempo = 1;\n this.setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);\n }\n clear() {\n super.clear();\n this.clearMidBuffer();\n }\n clearMidBuffer() {\n if (this.midBufferDirty) {\n this.midBufferDirty = false;\n this.midBuffer = null;\n }\n }\n setParameters(sampleRate, sequenceMs, seekWindowMs, overlapMs) {\n if (sampleRate > 0) {\n this.sampleRate = sampleRate;\n }\n if (overlapMs > 0) {\n this.overlapMs = overlapMs;\n }\n if (sequenceMs > 0) {\n this.sequenceMs = sequenceMs;\n this.autoSeqSetting = false;\n } else {\n this.autoSeqSetting = true;\n }\n if (seekWindowMs > 0) {\n this.seekWindowMs = seekWindowMs;\n this.autoSeekSetting = false;\n } else {\n this.autoSeekSetting = true;\n }\n this.calculateSequenceParameters();\n this.calculateOverlapLength(this.overlapMs);\n this.tempo = this._tempo;\n }\n set tempo(newTempo) {\n let intskip;\n this._tempo = newTempo;\n this.calculateSequenceParameters();\n this.nominalSkip = this._tempo * (this.seekWindowLength - this.overlapLength);\n this.skipFract = 0;\n intskip = Math.floor(this.nominalSkip + 0.5);\n this.sampleReq = Math.max(intskip + this.overlapLength, this.seekWindowLength) + this.seekLength;\n }\n get tempo() {\n return this._tempo;\n }\n get inputChunkSize() {\n return this.sampleReq;\n }\n get outputChunkSize() {\n return this.overlapLength + Math.max(0, this.seekWindowLength - 2 * this.overlapLength);\n }\n calculateOverlapLength(overlapInMsec = 0) {\n let newOvl;\n newOvl = this.sampleRate * overlapInMsec / 1000;\n newOvl = newOvl < 16 ? 16 : newOvl;\n newOvl -= newOvl % 8;\n this.overlapLength = newOvl;\n this.refMidBuffer = new Float32Array(this.overlapLength * 2);\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n }\n checkLimits(x, mi, ma) {\n return x < mi ? mi : x > ma ? ma : x;\n }\n calculateSequenceParameters() {\n let seq;\n let seek;\n if (this.autoSeqSetting) {\n seq = AUTOSEQ_C + AUTOSEQ_K * this._tempo;\n seq = this.checkLimits(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);\n this.sequenceMs = Math.floor(seq + 0.5);\n }\n if (this.autoSeekSetting) {\n seek = AUTOSEEK_C + AUTOSEEK_K * this._tempo;\n seek = this.checkLimits(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);\n this.seekWindowMs = Math.floor(seek + 0.5);\n }\n this.seekWindowLength = Math.floor(this.sampleRate * this.sequenceMs / 1000);\n this.seekLength = Math.floor(this.sampleRate * this.seekWindowMs / 1000);\n }\n set quickSeek(enable) {\n this._quickSeek = enable;\n }\n clone() {\n const result = new Stretch();\n result.tempo = this._tempo;\n result.setParameters(this.sampleRate, this.sequenceMs, this.seekWindowMs, this.overlapMs);\n return result;\n }\n seekBestOverlapPosition() {\n return this._quickSeek ? this.seekBestOverlapPositionStereoQuick() : this.seekBestOverlapPositionStereo();\n }\n seekBestOverlapPositionStereo() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let i = 0;\n this.preCalculateCorrelationReferenceStereo();\n bestOffset = 0;\n bestCorrelation = Number.MIN_VALUE;\n for (; i < this.seekLength; i = i + 1) {\n correlation = this.calculateCrossCorrelationStereo(2 * i, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = i;\n }\n }\n return bestOffset;\n }\n seekBestOverlapPositionStereoQuick() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let scanCount = 0;\n let correlationOffset;\n let tempOffset;\n this.preCalculateCorrelationReferenceStereo();\n bestCorrelation = Number.MIN_VALUE;\n bestOffset = 0;\n correlationOffset = 0;\n tempOffset = 0;\n for (; scanCount < 4; scanCount = scanCount + 1) {\n let j = 0;\n while (_SCAN_OFFSETS[scanCount][j]) {\n tempOffset = correlationOffset + _SCAN_OFFSETS[scanCount][j];\n if (tempOffset >= this.seekLength) {\n break;\n }\n correlation = this.calculateCrossCorrelationStereo(2 * tempOffset, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = tempOffset;\n }\n j = j + 1;\n }\n correlationOffset = bestOffset;\n }\n return bestOffset;\n }\n preCalculateCorrelationReferenceStereo() {\n let i = 0;\n let context;\n let temp;\n for (; i < this.overlapLength; i = i + 1) {\n temp = i * (this.overlapLength - i);\n context = i * 2;\n this.refMidBuffer[context] = this.midBuffer[context] * temp;\n this.refMidBuffer[context + 1] = this.midBuffer[context + 1] * temp;\n }\n }\n calculateCrossCorrelationStereo(mixingPosition, compare) {\n const mixing = this._inputBuffer.vector;\n mixingPosition += this._inputBuffer.startIndex;\n let correlation = 0;\n let i = 2;\n const calcLength = 2 * this.overlapLength;\n let mixingOffset;\n for (; i < calcLength; i = i + 2) {\n mixingOffset = i + mixingPosition;\n correlation += mixing[mixingOffset] * compare[i] + mixing[mixingOffset + 1] * compare[i + 1];\n }\n return correlation;\n }\n overlap(overlapPosition) {\n this.overlapStereo(2 * overlapPosition);\n }\n overlapStereo(inputPosition) {\n const input = this._inputBuffer.vector;\n inputPosition += this._inputBuffer.startIndex;\n const output = this._outputBuffer.vector;\n const outputPosition = this._outputBuffer.endIndex;\n let i = 0;\n let context;\n let tempFrame;\n const frameScale = 1 / this.overlapLength;\n let fi;\n let inputOffset;\n let outputOffset;\n for (; i < this.overlapLength; i = i + 1) {\n tempFrame = (this.overlapLength - i) * frameScale;\n fi = i * frameScale;\n context = 2 * i;\n inputOffset = context + inputPosition;\n outputOffset = context + outputPosition;\n output[outputOffset + 0] = input[inputOffset + 0] * fi + this.midBuffer[context + 0] * tempFrame;\n output[outputOffset + 1] = input[inputOffset + 1] * fi + this.midBuffer[context + 1] * tempFrame;\n }\n }\n process() {\n let offset;\n let temp;\n let overlapSkip;\n if (this.midBuffer === null) {\n if (this._inputBuffer.frameCount < this.overlapLength) {\n return;\n }\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n this._inputBuffer.receiveSamples(this.midBuffer, this.overlapLength);\n }\n while (this._inputBuffer.frameCount >= this.sampleReq) {\n offset = this.seekBestOverlapPosition();\n this._outputBuffer.ensureAdditionalCapacity(this.overlapLength);\n this.overlap(Math.floor(offset));\n this._outputBuffer.put(this.overlapLength);\n temp = this.seekWindowLength - 2 * this.overlapLength;\n if (temp > 0) {\n this._outputBuffer.putBuffer(this._inputBuffer, offset + this.overlapLength, temp);\n }\n const start = this._inputBuffer.startIndex + 2 * (offset + this.seekWindowLength - this.overlapLength);\n this.midBuffer.set(this._inputBuffer.vector.subarray(start, start + 2 * this.overlapLength));\n this.skipFract += this.nominalSkip;\n overlapSkip = Math.floor(this.skipFract);\n this.skipFract -= overlapSkip;\n this._inputBuffer.receive(overlapSkip);\n }\n }\n}\n\nconst testFloatEqual = function (a, b) {\n return (a > b ? a - b : b - a) > 1e-10;\n};\n\nclass SoundTouch {\n constructor() {\n this.transposer = new RateTransposer(false);\n this.stretch = new Stretch(false);\n this._inputBuffer = new FifoSampleBuffer();\n this._intermediateBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n this._rate = 0;\n this._tempo = 0;\n this.virtualPitch = 1.0;\n this.virtualRate = 1.0;\n this.virtualTempo = 1.0;\n this.calculateEffectiveRateAndTempo();\n }\n clear() {\n this.transposer.clear();\n this.stretch.clear();\n }\n clone() {\n const result = new SoundTouch();\n result.rate = this.rate;\n result.tempo = this.tempo;\n return result;\n }\n get rate() {\n return this._rate;\n }\n set rate(rate) {\n this.virtualRate = rate;\n this.calculateEffectiveRateAndTempo();\n }\n set rateChange(rateChange) {\n this._rate = 1.0 + 0.01 * rateChange;\n }\n get tempo() {\n return this._tempo;\n }\n set tempo(tempo) {\n this.virtualTempo = tempo;\n this.calculateEffectiveRateAndTempo();\n }\n set tempoChange(tempoChange) {\n this.tempo = 1.0 + 0.01 * tempoChange;\n }\n set pitch(pitch) {\n this.virtualPitch = pitch;\n this.calculateEffectiveRateAndTempo();\n }\n set pitchOctaves(pitchOctaves) {\n this.pitch = Math.exp(0.69314718056 * pitchOctaves);\n this.calculateEffectiveRateAndTempo();\n }\n set pitchSemitones(pitchSemitones) {\n this.pitchOctaves = pitchSemitones / 12.0;\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n calculateEffectiveRateAndTempo() {\n const previousTempo = this._tempo;\n const previousRate = this._rate;\n this._tempo = this.virtualTempo / this.virtualPitch;\n this._rate = this.virtualRate * this.virtualPitch;\n if (testFloatEqual(this._tempo, previousTempo)) {\n this.stretch.tempo = this._tempo;\n }\n if (testFloatEqual(this._rate, previousRate)) {\n this.transposer.rate = this._rate;\n }\n if (this._rate > 1.0) {\n if (this._outputBuffer != this.transposer.outputBuffer) {\n this.stretch.inputBuffer = this._inputBuffer;\n this.stretch.outputBuffer = this._intermediateBuffer;\n this.transposer.inputBuffer = this._intermediateBuffer;\n this.transposer.outputBuffer = this._outputBuffer;\n }\n } else {\n if (this._outputBuffer != this.stretch.outputBuffer) {\n this.transposer.inputBuffer = this._inputBuffer;\n this.transposer.outputBuffer = this._intermediateBuffer;\n this.stretch.inputBuffer = this._intermediateBuffer;\n this.stretch.outputBuffer = this._outputBuffer;\n }\n }\n }\n process() {\n if (this._rate > 1.0) {\n this.stretch.process();\n this.transposer.process();\n } else {\n this.transposer.process();\n this.stretch.process();\n }\n }\n}\n\nclass WebAudioBufferSource {\n constructor(buffer) {\n this.buffer = buffer;\n this._position = 0;\n }\n get dualChannel() {\n return this.buffer.numberOfChannels > 1;\n }\n get position() {\n return this._position;\n }\n set position(value) {\n this._position = value;\n }\n extract(target, numFrames = 0, position = 0) {\n this.position = position;\n let left = this.buffer.getChannelData(0);\n let right = this.dualChannel ? this.buffer.getChannelData(1) : this.buffer.getChannelData(0);\n let i = 0;\n for (; i < numFrames; i++) {\n target[i * 2] = left[i + position];\n target[i * 2 + 1] = right[i + position];\n }\n return Math.min(numFrames, left.length - position);\n }\n}\n\nconst getWebAudioNode = function (context, filter, sourcePositionCallback = noop, bufferSize = 4096) {\n const node = context.createScriptProcessor(bufferSize, 2, 2);\n const samples = new Float32Array(bufferSize * 2);\n node.onaudioprocess = event => {\n let left = event.outputBuffer.getChannelData(0);\n let right = event.outputBuffer.getChannelData(1);\n let framesExtracted = filter.extract(samples, bufferSize);\n sourcePositionCallback(filter.sourcePosition);\n if (framesExtracted === 0) {\n filter.onEnd();\n }\n let i = 0;\n for (; i < framesExtracted; i++) {\n left[i] = samples[i * 2];\n right[i] = samples[i * 2 + 1];\n }\n };\n return node;\n};\n\nconst pad = function (n, width, z) {\n z = z || '0';\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n};\nconst minsSecs = function (secs) {\n const mins = Math.floor(secs / 60);\n const seconds = secs - mins * 60;\n return `${mins}:${pad(parseInt(seconds), 2)}`;\n};\n\nconst onUpdate = function (sourcePosition) {\n const currentTimePlayed = this.timePlayed;\n const sampleRate = this.sampleRate;\n this.sourcePosition = sourcePosition;\n this.timePlayed = sourcePosition / sampleRate;\n if (currentTimePlayed !== this.timePlayed) {\n const timePlayed = new CustomEvent('play', {\n detail: {\n timePlayed: this.timePlayed,\n formattedTimePlayed: this.formattedTimePlayed,\n percentagePlayed: this.percentagePlayed\n }\n });\n this._node.dispatchEvent(timePlayed);\n }\n};\nclass PitchShifter {\n constructor(context, buffer, bufferSize, onEnd = noop) {\n this._soundtouch = new SoundTouch();\n const source = new WebAudioBufferSource(buffer);\n this.timePlayed = 0;\n this.sourcePosition = 0;\n this._filter = new SimpleFilter(source, this._soundtouch, onEnd);\n this._node = getWebAudioNode(context, this._filter, sourcePostion => onUpdate.call(this, sourcePostion), bufferSize);\n this.tempo = 1;\n this.rate = 1;\n this.duration = buffer.duration;\n this.sampleRate = context.sampleRate;\n this.listeners = [];\n }\n get formattedDuration() {\n return minsSecs(this.duration);\n }\n get formattedTimePlayed() {\n return minsSecs(this.timePlayed);\n }\n get percentagePlayed() {\n return 100 * this._filter.sourcePosition / (this.duration * this.sampleRate);\n }\n set percentagePlayed(perc) {\n this._filter.sourcePosition = parseInt(perc * this.duration * this.sampleRate);\n this.sourcePosition = this._filter.sourcePosition;\n this.timePlayed = this.sourcePosition / this.sampleRate;\n }\n get node() {\n return this._node;\n }\n set pitch(pitch) {\n this._soundtouch.pitch = pitch;\n }\n set pitchSemitones(semitone) {\n this._soundtouch.pitchSemitones = semitone;\n }\n set rate(rate) {\n this._soundtouch.rate = rate;\n }\n set tempo(tempo) {\n this._soundtouch.tempo = tempo;\n }\n connect(toNode) {\n this._node.connect(toNode);\n }\n disconnect() {\n this._node.disconnect();\n }\n on(eventName, cb) {\n this.listeners.push({\n name: eventName,\n cb: cb\n });\n this._node.addEventListener(eventName, event => cb(event.detail));\n }\n off(eventName = null) {\n let listeners = this.listeners;\n if (eventName) {\n listeners = listeners.filter(e => e.name === eventName);\n }\n listeners.forEach(e => {\n this._node.removeEventListener(e.name, event => e.cb(event.detail));\n });\n }\n}\n\nexport { AbstractFifoSamplePipe, PitchShifter, RateTransposer, SimpleFilter, SoundTouch, Stretch, WebAudioBufferSource, getWebAudioNode };\n//# sourceMappingURL=soundtouch.js.map\n","import SoundtouchWorkletMessage from \"../../model/SoundtouchWorkletMessage\";\nimport { SoundtouchWorkletOptionsWrapper } from \"../../model/SoundtouchWorkletOptionsWrapper\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet soundtouchWrapperFilterWorkletNodeClass: any;\n\nif(typeof(window) !== \"undefined\" && typeof(window.AudioWorkletNode) !== \"undefined\") {\n soundtouchWrapperFilterWorkletNodeClass = class SoundtouchWrapperFilterWorkletNode extends AudioWorkletNode {\n\n name: string = \"\";\n private running = false;\n private _tempo = 1;\n private _pitch = 1;\n\n constructor(context: BaseAudioContext, workletName: string, options: SoundtouchWorkletOptionsWrapper) {\n super(context, workletName, options);\n this.name = this.constructor.name;\n this.running = true;\n this.updateInterval = options.processorOptions.updateInterval;\n }\n\n async setup(tempo: number, pitch: number): Promise {\n return new Promise(resolve => {\n if(this.port) {\n this.port.onmessage = (ev: MessageEvent) => {\n if(ev && ev.data && ev.data.status === \"OK\" && ev.data.args[0] === \"setup\") {\n this.port.onmessage = this.messageProcessor.bind(this);\n resolve();\n }\n };\n \n this.port.postMessage({ command: \"setup\", args: [tempo, pitch] });\n\n this._tempo = tempo;\n this._pitch = pitch;\n }\n });\n }\n\n set updateInterval(value: number) {\n this.port.postMessage({ command: \"updateInterval\", args: [value] });\n }\n\n get node() {\n return this;\n }\n\n set tempo(value: number) {\n this.port.postMessage({ command: \"setTempo\", args: [value] });\n }\n\n set pitch(value: number) {\n this.port.postMessage({ command: \"setPitch\", args: [value] });\n }\n\n get tempo(): number {\n this.port.postMessage({ command: \"getTempo\", args: [] });\n return this._tempo;\n }\n\n get pitch(): number {\n this.port.postMessage({ command: \"getPitch\", args: [] });\n return this._pitch;\n }\n\n async stop() {\n if (!this.running) return;\n\n this.port.postMessage({ command: \"stop\", args: [] });\n this.disconnect();\n\n this.running = false;\n }\n\n messageProcessor(e: MessageEvent) {\n if (e.data.command) {\n const { command } = e.data;\n \n switch (command) {\n case \"End\":\n this.stop();\n break;\n default:\n break;\n }\n\n if (e.data.status) {\n const value = e.data.args[1];\n\n switch (e.data.args[0]) {\n case \"getTempo\":\n this._tempo = value as number;\n break;\n case \"getPitch\":\n this._pitch = value as number;\n break;\n default:\n break;\n }\n return;\n }\n }\n }\n };\n}\n\nexport default soundtouchWrapperFilterWorkletNodeClass;\n","/*\n * Copyright (c) 2012 The Chromium Authors. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Copyright (C) 2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\ninterface VocoderBand {\n frequency: number;\n}\n\nexport default class Vocoder {\n\n private FILTER_QUALITY = 6; // The Q value for the carrier and modulator filters\n private FOURIER_SIZE = 4096;\n private WAVETABLEBOOST = 40.0;\n private SAWTOOTHBOOST = 0.40;\n private oscillatorType = 4; // CUSTOM\n private oscillatorDetuneValue = 0;\n\n private audioContext: BaseAudioContext | null = null;\n private modulatorBuffer: AudioBuffer | undefined;\n private carrierBuffer: AudioBuffer | null = null;\n private modulatorNode: AudioBufferSourceNode | null = null;\n private vocoding = false;\n\n // These are \"placeholder\" gain nodes - because the modulator and carrier will get swapped in\n // as they are loaded, it's easier to connect these nodes to all the bands, and the \"real\"\n // modulator & carrier AudioBufferSourceNodes connect to these.\n private modulatorInput: GainNode | null = null;\n private carrierInput: GainNode | null = null;\n\n private modulatorGain: GainNode | null = null;\n private modulatorGainValue = 1.0;\n\n // noise node added to the carrier signal\n private noiseBuffer: AudioBuffer | null = null;\n private noiseNode: AudioBufferSourceNode | null = null;\n private noiseGain: GainNode | null = null;\n private noiseGainValue = 0.2;\n\n // Carrier sample gain\n private carrierSampleNode: AudioBufferSourceNode | null = null;\n private carrierSampleGain: GainNode | null = null;\n private carrierSampleGainValue = 0.0;\n\n // Carrier Synth oscillator stuff\n private oscillatorNode: OscillatorNode | null = null;\n private oscillatorGain: GainNode | null = null;\n private oscillatorGainValue = 1.0;\n private wavetable: PeriodicWave | null = null;\n private wavetableSignalGain: GainNode | null = null;\n\n // These are the arrays of nodes - the \"columns\" across the frequency band \"rows\"\n private modFilterBands: BiquadFilterNode[] | null = null; // tuned bandpass filters\n private modFilterPostGains: GainNode[] | null = null; // post-filter gains.\n private heterodynes: GainNode[] | null = null; // gain nodes used to multiply bandpass X sine\n private powers: number[] | null = null; // gain nodes used to multiply prev out by itself\n private lpFilters: BiquadFilterNode[] | null = null; // tuned LP filters to remove doubled copy of product\n private lpFilterPostGains: GainNode[] | null = null; // gain nodes for tuning input to waveshapers\n private carrierBands: BiquadFilterNode[] | null = null; // tuned bandpass filters, same as modFilterBands but in carrier chain\n private carrierFilterPostGains: GainNode[] | null = null; // post-bandpass gain adjustment\n private carrierBandGains: GainNode[] | null = null; // these are the \"control gains\" driven by the lpFilters\n\n private vocoderBands: VocoderBand[] | null = null;\n private numVocoderBands: number = 0;\n\n private hpFilterGain: GainNode | null = null;\n private outputGain: GainNode | null = null;\n\n // Initialization function for the page.\n constructor(ctx: BaseAudioContext, carrierB: AudioBuffer, modulatorB?: AudioBuffer) {\n this.audioContext = ctx;\n this.carrierBuffer = carrierB;\n this.modulatorBuffer = modulatorB;\n }\n\n init() {\n this.generateVocoderBands(55, 7040, 28);\n // Set up the vocoder chains\n this.setupVocoderGraph();\n this.vocode();\n }\n\n getNodes() {\n return {\n modulatorNode: this.modulatorNode,\n modulatorGain: this.modulatorGain,\n synthLevel: this.oscillatorGain,\n noiseNode: this.noiseGain,\n oscillatorNode: this.oscillatorNode,\n hpFilterGain: this.hpFilterGain,\n outputGain: this.outputGain\n };\n }\n\n private shutOffCarrier() {\n if (this.oscillatorNode && this.noiseNode && this.carrierSampleNode) {\n this.oscillatorNode.stop(0);\n this.oscillatorNode = null;\n this.noiseNode.stop(0);\n this.noiseNode = null;\n this.carrierSampleNode.stop(0);\n this.carrierSampleNode = null;\n }\n }\n\n selectSawtooth() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n if (this.oscillatorNode)\n this.oscillatorNode.type = \"sawtooth\";\n }\n\n selectWavetable() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n if (this.oscillatorNode && this.wavetable)\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n }\n\n updateModGain(value: number) {\n this.modulatorGainValue = value;\n if (this.modulatorGain)\n this.modulatorGain.gain.value = value;\n }\n\n // sample-based carrier\n updateSampleLevel(value: number) {\n this.carrierSampleGainValue = value;\n if (this.carrierSampleGain)\n this.carrierSampleGain.gain.value = value;\n }\n\n // noise in carrier\n updateSynthLevel(value: number) {\n this.oscillatorGainValue = value;\n if (this.oscillatorGain)\n this.oscillatorGain.gain.value = value;\n }\n\n // noise in carrier\n updateNoiseLevel(value: number) {\n this.noiseGainValue = value;\n if (this.noiseGain)\n this.noiseGain.gain.value = value;\n }\n\n updateDetuneValue(value: number) {\n this.oscillatorDetuneValue = value;\n if (this.oscillatorNode)\n this.oscillatorNode.detune.value = value;\n }\n\n // this will algorithmically re-calculate vocoder bands, distributing evenly\n // from startFreq to endFreq, splitting evenly (logarhythmically) into a given numBands.\n // The function places this info into the global vocoderBands and numVocoderBands letiables.\n private generateVocoderBands(startFreq: number, endFreq: number, numBands: number) {\n // Remember: 1200 cents in octave, 100 cents per semitone\n\n const totalRangeInCents = 1200 * Math.log(endFreq / startFreq) / Math.LN2;\n const centsPerBand = totalRangeInCents / numBands;\n const scale = Math.pow(2, centsPerBand / 1200); // This is the scaling for successive bands\n\n this.vocoderBands = [];\n let currentFreq = startFreq;\n\n for (let i = 0; i < numBands; i++) {\n this.vocoderBands[i] = { frequency: currentFreq };\n //console.log( \"Band \" + i + \" centered at \" + currentFreq + \"Hz\" );\n currentFreq = currentFreq * scale;\n }\n\n this.numVocoderBands = numBands;\n }\n\n private loadNoiseBuffer() { // create a 5-second buffer of noise\n if (!this.audioContext) return;\n\n const lengthInSamples = 5 * this.audioContext.sampleRate;\n this.noiseBuffer = this.audioContext.createBuffer(1, lengthInSamples, this.audioContext.sampleRate);\n const bufferData = this.noiseBuffer.getChannelData(0);\n\n for (let i = 0; i < lengthInSamples; ++i) {\n bufferData[i] = (2 * Math.random() - 1); // -1 to +1\n }\n }\n\n private initBandpassFilters() {\n if (!this.audioContext) return;\n\n // When this function is called, the carrierNode and modulatorAnalyser\n // may not already be created. Create placeholder nodes for them.\n this.modulatorInput = this.audioContext.createGain();\n this.carrierInput = this.audioContext.createGain();\n\n if (this.modFilterBands == null)\n this.modFilterBands = [];\n\n if (this.modFilterPostGains == null)\n this.modFilterPostGains = [];\n\n if (this.heterodynes == null)\n this.heterodynes = [];\n\n if (this.powers == null)\n this.powers = [];\n\n if (this.lpFilters == null)\n this.lpFilters = [];\n\n if (this.lpFilterPostGains == null)\n this.lpFilterPostGains = [];\n\n if (this.carrierBands == null)\n this.carrierBands = [];\n\n if (this.carrierFilterPostGains == null)\n this.carrierFilterPostGains = [];\n\n if (this.carrierBandGains == null)\n this.carrierBandGains = [];\n\n const waveShaperCurve = new Float32Array(65536);\n // Populate with a \"curve\" that does an abs()\n const n = 65536;\n const n2 = n / 2;\n let x;\n\n for (let i = 0; i < n2; ++i) {\n x = i / n2;\n\n waveShaperCurve[n2 + i] = x;\n waveShaperCurve[n2 - i - 1] = x;\n }\n\n // Set up a high-pass filter to add back in the fricatives, etc.\n // (this isn't used by default in the \"production\" version, as I hid the slider)\n const hpFilter = this.audioContext.createBiquadFilter();\n hpFilter.type = \"highpass\";\n hpFilter.frequency.value = 8000; // or use vocoderBands[numVocoderBands-1].frequency;\n hpFilter.Q.value = 1; // no peaking\n this.modulatorInput.connect(hpFilter);\n\n this.hpFilterGain = this.audioContext.createGain();\n this.hpFilterGain.gain.value = 0.0;\n\n hpFilter.connect(this.hpFilterGain);\n\n if(this.modulatorBuffer) {\n this.hpFilterGain.connect(this.audioContext.destination);\n }\n\n //clear the arrays\n this.modFilterBands.length = 0;\n this.modFilterPostGains.length = 0;\n this.heterodynes.length = 0;\n this.powers.length = 0;\n this.lpFilters.length = 0;\n this.lpFilterPostGains.length = 0;\n this.carrierBands.length = 0;\n this.carrierFilterPostGains.length = 0;\n this.carrierBandGains.length = 0;\n\n this.outputGain = this.audioContext.createGain();\n\n if(this.modulatorBuffer) {\n this.outputGain.connect(this.audioContext.destination);\n }\n\n const rectifierCurve = new Float32Array(65536);\n for (let i = -32768; i < 32768; i++)\n rectifierCurve[i + 32768] = ((i > 0) ? i : -i) / 32768;\n\n for (let i = 0; i < this.numVocoderBands; i++) {\n // CREATE THE MODULATOR CHAIN\n // create the bandpass filter in the modulator chain\n const modulatorFilter = this.audioContext.createBiquadFilter();\n modulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n modulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n modulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n this.modulatorInput.connect(modulatorFilter);\n this.modFilterBands.push(modulatorFilter);\n\n // Now, create a second bandpass filter tuned to the same frequency -\n // this turns our second-order filter into a 4th-order filter,\n // which has a steeper rolloff/octave\n const secondModulatorFilter = this.audioContext.createBiquadFilter();\n secondModulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondModulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n secondModulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //modulatorFilter.chainedFilter = secondModulatorFilter;\n modulatorFilter.connect(secondModulatorFilter);\n\n // create a post-filtering gain to bump the levels up.\n const modulatorFilterPostGain = this.audioContext.createGain();\n modulatorFilterPostGain.gain.value = 6;\n secondModulatorFilter.connect(modulatorFilterPostGain);\n this.modFilterPostGains.push(modulatorFilterPostGain);\n\n // Create the sine oscillator for the heterodyne\n const heterodyneOscillator = this.audioContext.createOscillator();\n if (this.vocoderBands)\n heterodyneOscillator.frequency.value = this.vocoderBands[i].frequency;\n\n heterodyneOscillator.start(0);\n\n // Create the node to multiply the sine by the modulator\n const heterodyne = this.audioContext.createGain();\n modulatorFilterPostGain.connect(heterodyne);\n heterodyne.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n heterodyneOscillator.connect(heterodyne.gain);\n\n const heterodynePostGain = this.audioContext.createGain();\n heterodynePostGain.gain.value = 2.0; // GUESS: boost\n heterodyne.connect(heterodynePostGain);\n this.heterodynes.push(heterodynePostGain);\n\n\n // Create the rectifier node\n const rectifier = this.audioContext.createWaveShaper();\n rectifier.curve = rectifierCurve;\n heterodynePostGain.connect(rectifier);\n\n // Create the lowpass filter to mask off the difference (near zero)\n const lpFilter = this.audioContext.createBiquadFilter();\n lpFilter.type = \"lowpass\"; // Lowpass filter\n lpFilter.frequency.value = 5.0; // Guesstimate! Mask off 20Hz and above.\n lpFilter.Q.value = 1; // don't need a peak\n this.lpFilters.push(lpFilter);\n rectifier.connect(lpFilter);\n\n const lpFilterPostGain = this.audioContext.createGain();\n lpFilterPostGain.gain.value = 1.0;\n lpFilter.connect(lpFilterPostGain);\n this.lpFilterPostGains.push(lpFilterPostGain);\n\n const waveshaper = this.audioContext.createWaveShaper();\n waveshaper.curve = waveShaperCurve;\n lpFilterPostGain.connect(waveshaper);\n\n\n // Create the bandpass filter in the carrier chain\n const carrierFilter = this.audioContext.createBiquadFilter();\n carrierFilter.type = \"bandpass\";\n if (this.vocoderBands)\n carrierFilter.frequency.value = this.vocoderBands[i].frequency;\n carrierFilter.Q.value = this.FILTER_QUALITY;\n this.carrierBands.push(carrierFilter);\n this.carrierInput.connect(carrierFilter);\n\n // We want our carrier filters to be 4th-order filter too.\n const secondCarrierFilter = this.audioContext.createBiquadFilter();\n secondCarrierFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondCarrierFilter.frequency.value = this.vocoderBands[i].frequency;\n secondCarrierFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //carrierFilter.chainedFilter = secondCarrierFilter;\n carrierFilter.connect(secondCarrierFilter);\n\n const carrierFilterPostGain = this.audioContext.createGain();\n carrierFilterPostGain.gain.value = 10.0;\n secondCarrierFilter.connect(carrierFilterPostGain);\n this.carrierFilterPostGains.push(carrierFilterPostGain);\n\n // Create the carrier band gain node\n const bandGain = this.audioContext.createGain();\n this.carrierBandGains.push(bandGain);\n carrierFilterPostGain.connect(bandGain);\n bandGain.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n waveshaper.connect(bandGain.gain); // connect the lp controller\n\n bandGain.connect(this.outputGain);\n }\n\n\n // Now set up our wavetable stuff.\n const real = new Float32Array(this.FOURIER_SIZE);\n const imag = new Float32Array(this.FOURIER_SIZE);\n real[0] = 0.0;\n imag[0] = 0.0;\n for (let i = 1; i < this.FOURIER_SIZE; i++) {\n real[i] = 1.0;\n imag[i] = 1.0;\n }\n\n this.wavetable = this.audioContext.createPeriodicWave(real, imag);\n this.loadNoiseBuffer();\n }\n\n private setupVocoderGraph() {\n this.initBandpassFilters();\n }\n\n private createCarriersAndPlay(output: GainNode | null) {\n if(!this.audioContext || !output) return;\n\n this.carrierSampleNode = this.audioContext.createBufferSource();\n this.carrierSampleNode.buffer = this.carrierBuffer;\n this.carrierSampleNode.loop = true;\n\n this.carrierSampleGain = this.audioContext.createGain();\n this.carrierSampleGain.gain.value = this.carrierSampleGainValue;\n this.carrierSampleNode.connect(this.carrierSampleGain);\n this.carrierSampleGain.connect(output);\n\n // The wavetable signal needs a boost.\n this.wavetableSignalGain = this.audioContext.createGain();\n\n this.oscillatorNode = this.audioContext.createOscillator();\n if (this.oscillatorType == 4 && this.wavetable) { // wavetable\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n } else {\n //oscillatorNode.type = oscillatorType;\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n }\n this.oscillatorNode.frequency.value = 110;\n this.oscillatorNode.detune.value = this.oscillatorDetuneValue;\n this.oscillatorNode.connect(this.wavetableSignalGain);\n\n this.oscillatorGain = this.audioContext.createGain();\n this.oscillatorGain.gain.value = this.oscillatorGainValue;\n\n this.wavetableSignalGain.connect(this.oscillatorGain);\n this.oscillatorGain.connect(output);\n\n this.noiseNode = this.audioContext.createBufferSource();\n this.noiseNode.buffer = this.noiseBuffer;\n this.noiseNode.loop = true;\n this.noiseGain = this.audioContext.createGain();\n this.noiseGain.gain.value = this.noiseGainValue;\n this.noiseNode.connect(this.noiseGain);\n\n this.noiseGain.connect(output);\n this.oscillatorNode.start(0);\n this.noiseNode.start(0);\n this.carrierSampleNode.start(0);\n\n }\n\n private vocode() {\n if(!this.audioContext) return;\n\n if (this.vocoding) {\n if (this.modulatorNode) {\n this.modulatorNode.stop(0);\n }\n this.shutOffCarrier();\n this.vocoding = false;\n return;\n }\n\n this.createCarriersAndPlay(this.carrierInput);\n\n this.vocoding = true;\n\n this.modulatorGain = this.audioContext.createGain();\n this.modulatorGain.gain.value = this.modulatorGainValue;\n\n if(this.modulatorBuffer) {\n this.modulatorNode = this.audioContext.createBufferSource();\n this.modulatorNode.buffer = this.modulatorBuffer;\n this.modulatorNode.connect(this.modulatorGain);\n this.modulatorNode.start(0);\n }\n\n if (this.modulatorInput)\n this.modulatorGain.connect(this.modulatorInput);\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass PassthroughWorkletProcessor extends AudioWorkletProcessor {\n\n stopped = false;\n samplesCount = 0;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [];\n }\n\n get defaultParameterDescriptors() {\n return PassthroughWorkletProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n if (input && input[0]) {\n this.samplesCount += input[0].length;\n }\n\n if (output) {\n for(let channel = 0; channel < output.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp) {\n for (let sample = 0; sample < inp.length; sample++) {\n out[sample] = inp[sample];\n }\n }\n }\n\n this.port.postMessage({ command: \"update\", samplesCount: this.samplesCount });\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.PASSTHROUGH, PassthroughWorkletProcessor);\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\nexport default class TimerSaveTime {\n seconds = 0;\n initialSeconds = 0;\n interval: number | null = null;\n incr = 1;\n\n private countCallback: () => void = () => {};\n\n constructor(seconds: number, incr: number) {\n this.seconds = seconds;\n this.initialSeconds = seconds;\n this.interval;\n this.incr = incr;\n }\n\n start() {\n this.interval = window.setInterval(() => this.count(), 1000);\n }\n\n stop() {\n clearInterval(this.interval!);\n }\n\n count() {\n this.seconds += this.incr;\n\n if(this.seconds <= 0) {\n this.stop();\n }\n\n if(this.countCallback) {\n this.countCallback();\n }\n }\n\n onCount(callback: () => void) {\n this.countCallback = callback;\n }\n}","\n/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The Voice Recorder class\n// Used to record a sound (voice, etc.) with the user microphone\n// Offer control with play/pause and audio feedback\nimport { inject, injectable } from \"inversify\";\nimport TimerSaveTime from \"../utils/TimerSaveTime\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport AudioConstraintWrapper from \"../model/AudioConstraintWrapper\";\nimport { RecorderSettings } from \"../model/RecorderSettings\";\nimport type { ConfigService } from \"../services/interfaces/ConfigService\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { AudioConstraint } from \"../model/AudioConstraint\";\nimport Recorder from \"../recorder/Recorder\";\nimport VoiceRecorderInterface from \"./interfaces/VoiceRecorderInterface\";\nimport { TYPES } from \"@/inversify.types\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n@injectable()\nexport default class VoiceRecorder extends AbstractAudioElement implements VoiceRecorderInterface {\n\n private contextManager: AudioContextManagerInterface | null | undefined;\n\n private recorder: Recorder | null = null;\n\n private input: MediaStreamAudioSourceNode | null = null;\n\n private stream: MediaStream | null = null;\n\n private alreadyInit = false;\n\n private timer: TimerSaveTime | null = null;\n\n private enableAudioFeedback = false;\n\n private recording = false;\n\n private deviceList: MediaDeviceInfo[] = [];\n\n private constraints: AudioConstraintWrapper = {\n audio: {\n noiseSuppression: true,\n echoCancellation: true,\n autoGainControl: true,\n sampleRate: { ideal: 44100 }\n }\n };\n\n private sampleRateConfigNotSupported = false;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService) {\n super();\n\n this.contextManager = contextManager;\n this.configService = configService;\n }\n\n async init() {\n if (!this.isRecordingAvailable()) {\n return;\n }\n\n // Specific case: Firefox doesn't support changing sample-rate for MediaDevice API\n // In this case we disable sample-rate config feature for this VoiceRecorder\n this.sampleRateConfigNotSupported = !navigator.mediaDevices.getSupportedConstraints().sampleRate;\n\n if (this.contextManager) {\n if (this.sampleRateConfigNotSupported) {\n this.contextManager.createNewContext(0);\n } else {\n this.contextManager.createNewContextIfNeeded();\n }\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_INIT);\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n\n await this.setup(stream, false, false);\n\n this.alreadyInit = true;\n this.timer = new TimerSaveTime(0, 1);\n\n this.timer.onCount(() => {\n this.eventEmitter?.emit(EventType.RECORDER_COUNT_UPDATE);\n });\n\n this.successCallback();\n } catch (e) {\n console.error(e);\n\n const exception = e as DOMException;\n\n if (exception) {\n switch (exception.name) {\n case \"SecurityError\":\n case \"NotAllowedError\":\n this.errorCallback();\n break;\n case \"NotFoundError\":\n this.notFoundErrorCallback();\n break;\n // Disable sample rate configuration\n case \"NotSupportedError\":\n if (!this.sampleRateConfigNotSupported) {\n this.sampleRateConfigNotSupported = true;\n this.init();\n }\n break;\n default:\n this.unknownErrorCallback();\n break;\n }\n }\n }\n\n navigator.mediaDevices.ondevicechange = () => this.updateInputList();\n }\n\n private successCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_SUCCESS);\n }\n\n private errorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_ERROR);\n }\n\n private notFoundErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_NOT_FOUND_ERROR);\n }\n\n private unknownErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_UNKNOWN_ERROR);\n }\n\n audioFeedback(enable: boolean) {\n if (this.contextManager && this.contextManager.currentContext) {\n if (enable) {\n this.input && this.input.connect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = true;\n } else {\n this.input && this.input.connect(this.contextManager.currentContext.destination) && this.input.disconnect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = false;\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Get current constraints/settings\n * @returns MediaTrackSettings\n */\n private getConstraints() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n if (tracks && tracks.length > 0) {\n return tracks[0].getSettings();\n }\n }\n\n return null;\n }\n\n /**\n * Update the current constraints\n */\n private updateConstraints() {\n const constraints = this.getConstraints();\n\n if (constraints) {\n this.constraints.audio = Object.assign(this.constraints.audio, constraints);\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Reset the current constraints\n * @param newConstraint AudioConstraintWrapper\n */\n private async resetConstraints(newConstraint?: AudioConstraintWrapper) {\n if (this.stream) {\n const precAudioFeedback = this.enableAudioFeedback;\n const precRecording = this.recording;\n const tracks = this.stream.getTracks();\n\n if (newConstraint) {\n this.updateConstraints();\n this.constraints.audio = Object.assign(this.constraints.audio, newConstraint.audio);\n }\n\n if (tracks && tracks.length > 0) {\n try {\n await tracks[0].applyConstraints(this.constraints.audio);\n\n const newConstraints = this.getConstraints();\n const newConstraintName = newConstraint ? Object.keys(newConstraint.audio)[0] : \"\";\n\n this.audioFeedback(false);\n this.pause();\n\n if (!newConstraint ||\n (newConstraints && (newConstraints as AudioConstraint)[newConstraintName] != newConstraint.audio[newConstraintName])) {\n this.stopStream();\n\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n await this.setup(stream, precRecording, precAudioFeedback);\n } else {\n await this.setup(null, precRecording, precAudioFeedback);\n }\n } catch (e) {\n this.errorCallback();\n }\n }\n }\n }\n\n /**\n * Setup this voice recorder\n * @param stream MediaStream\n * @param precRecording Was recording?\n * @param precAudioFeedback Has audio feedback?\n */\n private async setup(stream: MediaStream | null, precRecording: boolean, precAudioFeedback: boolean) {\n if (stream && this.contextManager && this.contextManager.currentContext) {\n this.input = this.contextManager.currentContext.createMediaStreamSource(stream);\n this.stream = stream;\n }\n\n if (this.recorder && this.input) {\n await this.recorder.setup(this.input);\n\n if (precRecording) {\n await this.record();\n }\n }\n\n this.audioFeedback(precAudioFeedback);\n this.updateConstraints();\n await this.updateInputList();\n }\n\n setNoiseSuppression(enable: boolean) {\n this.resetConstraints({\n audio: {\n noiseSuppression: enable\n }\n });\n }\n\n setAutoGain(enable: boolean) {\n this.resetConstraints({\n audio: {\n autoGainControl: enable\n }\n });\n }\n\n setEchoCancellation(enable: boolean) {\n this.resetConstraints({\n audio: {\n echoCancellation: enable\n }\n });\n }\n\n /**\n * Update current audio input list\n */\n private async updateInputList() {\n if (this.deviceList) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.deviceList = [];\n\n devices.forEach(device => {\n if (device.kind == \"audioinput\") {\n this.deviceList.push(device);\n }\n });\n }\n }\n\n changeInput(deviceId: string, groupId: string | undefined) {\n if (groupId) {\n this.constraints.audio.deviceId = deviceId;\n this.constraints.audio.groupId = groupId;\n this.resetConstraints();\n }\n }\n\n async record() {\n if (this.alreadyInit && this.configService && this.input) {\n if (!this.recorder) {\n this.recorder = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: \"audio/wav\"\n });\n\n await this.recorder.setup(this.input);\n }\n\n if (this.recorder) {\n this.recorder.record();\n }\n\n this.timer && this.timer.start();\n this.recording = true;\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.RECORDER_RECORDING);\n }\n }\n }\n\n async stop() {\n if (this.alreadyInit && this.recorder) {\n this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n\n this.recorder.getBuffer((buffer: Float32Array[]) => {\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n\n const newBuffer = this.contextManager.currentContext.createBuffer(2, buffer[0].length, this.contextManager.currentContext.sampleRate);\n newBuffer.getChannelData(0).set(buffer[0]);\n newBuffer.getChannelData(1).set(buffer[1]);\n\n this.eventEmitter?.emit(EventType.RECORDER_STOPPED, newBuffer);\n this.reset();\n }\n });\n }\n }\n\n pause() {\n if (this.alreadyInit) {\n this.recorder && this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n this.eventEmitter?.emit(EventType.RECORDER_PAUSED);\n }\n }\n\n /**\n * Stop stream\n */\n private stopStream() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n tracks[i].stop();\n }\n }\n }\n\n reset() {\n this.recorder && this.recorder.kill();\n this.timer && this.timer.stop();\n this.audioFeedback(false);\n\n this.stopStream();\n\n this.input = null;\n this.recorder = null;\n this.stream = null;\n this.alreadyInit = false;\n this.timer = null;\n\n this.eventEmitter?.emit(EventType.RECORDER_RESETED);\n }\n\n get currentTimeDisplay() {\n return this.timer?.seconds ? (\"0\" + Math.trunc(this.timer?.seconds / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.timer?.seconds % 60)).slice(-2) : \"00:00\";\n }\n\n get currentTime() {\n return this.timer ? this.timer.seconds : 0;\n }\n\n getSettings(): RecorderSettings {\n return {\n deviceList: this.deviceList,\n audioFeedback: this.enableAudioFeedback,\n constraints: this.constraints.audio\n };\n }\n\n on(event: string, callback: EventEmitterCallback) {\n this.eventEmitter?.on(event, callback);\n }\n\n isRecordingAvailable() {\n return typeof (navigator.mediaDevices) !== \"undefined\" && typeof (navigator.mediaDevices.getUserMedia) !== \"undefined\";\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n throw Constants.VOICE_RECORDER;\n }\n}\n","import \"reflect-metadata\";\nimport { Container } from \"inversify\";\nimport { TYPES } from \"./inversify.types\";\nimport AudioContextManagerInterface from \"./audioEditor/interfaces/AudioContextManagerInterface\";\nimport AudioContextManager from \"./audioEditor/AudioContextManager\";\nimport AudioEditorInterface from \"./audioEditor/interfaces/AudioEditorInterface\";\nimport AudioProcessorInterface from \"./audioEditor/interfaces/AudioProcessorInterface\";\nimport BufferManagerInterface from \"./audioEditor/interfaces/BufferManagerInterface\";\nimport FilterManagerInterface from \"./audioEditor/interfaces/FilterManagerInterface\";\nimport RendererManagerInterface from \"./audioEditor/interfaces/RendererManagerInterface\";\nimport SaveBufferManagerInterface from \"./audioEditor/interfaces/SaveBufferManagerInteface\";\nimport AudioEditor from \"./audioEditor/AudioEditor\";\nimport AudioProcessor from \"./audioEditor/AudioProcessor\";\nimport BufferManager from \"./audioEditor/BufferManager\";\nimport FilterManager from \"./audioEditor/FilterManager\";\nimport RendererManager from \"./audioEditor/RendererManager\";\nimport SaveBufferManager from \"./audioEditor/SaveBufferManager\";\nimport EventEmitterInterface from \"./utils/interfaces/EventEmitterInterface\";\nimport EventEmitter from \"./utils/EventEmitter\";\nimport BufferPlayerInterface from \"./bufferPlayer/interfaces/BufferPlayerInterface\";\nimport BufferPlayer from \"./bufferPlayer/BufferPlayer\";\nimport BufferFetcherServiceInterface from \"./services/interfaces/BufferFetcherServiceInterface\";\nimport BufferDecoderServiceInterface from \"./services/interfaces/BufferDecoderServiceInterface\";\nimport BufferFetcherService from \"./services/BufferFetcherService\";\nimport BufferDecoderService from \"./services/BufferDecoderService\";\nimport AbstractAudioRenderer from \"./filters/interfaces/AbstractAudioRenderer\";\nimport ReturnAudioRenderer from \"./filters/ReturnAudioRenderer\";\nimport BassBoosterFilter from \"./filters/BassBoosterFilter\";\nimport BitCrusherFilter from \"./filters/BitCrusherFilter\";\nimport EchoFilter from \"./filters/EchoFilter\";\nimport HighPassFilter from \"./filters/HighPassFilter\";\nimport LimiterFilter from \"./filters/LimiterFilter\";\nimport LowPassFilter from \"./filters/LowPassFilter\";\nimport ReverbFilter from \"./filters/ReverbFilter\";\nimport SoundtouchWrapperFilter from \"./filters/SountouchWrapperFilter\";\nimport TelephonizerFilter from \"./filters/TelephonizerFilter\";\nimport VocoderFilter from \"./filters/VocoderFilter\";\nimport PassThroughFilter from \"./filters/PassThroughFilter\";\nimport AbstractAudioFilter from \"./filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"./filters/interfaces/AudioFilterEntrypointInterface\";\nimport VoiceRecorderInterface from \"./voiceRecorder/interfaces/VoiceRecorderInterface\";\nimport VoiceRecorder from \"./voiceRecorder/VoiceRecorder\";\n\nconst audioEditorContainer = new Container({ defaultScope: \"Singleton\" });\n\n// Entrypoint filter\naudioEditorContainer.bind(TYPES.EntryPointFilter).to(SoundtouchWrapperFilter);\n\n// Renderers\naudioEditorContainer.bind(TYPES.Renderers).to(ReturnAudioRenderer);\n\n// Filters\naudioEditorContainer.bind(TYPES.Filters).toDynamicValue(() => audioEditorContainer.get(TYPES.EntryPointFilter));\naudioEditorContainer.bind(TYPES.Filters).to(BassBoosterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(BitCrusherFilter);\naudioEditorContainer.bind(TYPES.Filters).to(EchoFilter);\naudioEditorContainer.bind(TYPES.Filters).to(HighPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LimiterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LowPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(ReverbFilter);\naudioEditorContainer.bind(TYPES.Filters).to(TelephonizerFilter);\naudioEditorContainer.bind(TYPES.Filters).to(VocoderFilter);\naudioEditorContainer.bind(TYPES.Filters).to(PassThroughFilter);\n\n// Services\naudioEditorContainer.bind(TYPES.EventEmitter).to(EventEmitter);\naudioEditorContainer.bind(TYPES.AudioContextManager).to(AudioContextManager);\naudioEditorContainer.bind(TYPES.AudioEditor).to(AudioEditor);\naudioEditorContainer.bind(TYPES.AudioProcessor).to(AudioProcessor);\naudioEditorContainer.bind(TYPES.BufferManager).to(BufferManager);\naudioEditorContainer.bind(TYPES.FilterManager).to(FilterManager);\naudioEditorContainer.bind(TYPES.RendererManager).to(RendererManager);\naudioEditorContainer.bind(TYPES.SaveBufferManager).to(SaveBufferManager);\naudioEditorContainer.bind(TYPES.BufferPlayer).to(BufferPlayer);\naudioEditorContainer.bind(TYPES.BufferFetcherService).to(BufferFetcherService);\naudioEditorContainer.bind(TYPES.BufferDecoderService).to(BufferDecoderService);\naudioEditorContainer.bind(TYPES.VoiceRecorder).to(VoiceRecorder);\n\nexport { audioEditorContainer };\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nimport { PitchShifter } from \"soundtouchjs\";\nimport Constants from \"../model/Constants\";\nimport AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport AudioFilterEntrypointInterface from \"./interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport utils from \"../utils/Functions\";\nimport SoundtouchWrapperFilterWorkletNode from \"./worklets/SoundtouchWrapperFilterWorkletNode\";\nimport SimpleAudioWorkletProcessor from \"../workletPolyfill/SimpleAudioWorkletProcessor\";\nimport SoundtouchSettings from \"../model/filtersSettings/SoundtouchSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class SoundtouchWrapperFilter extends AbstractAudioFilterWorklet implements AudioFilterEntrypointInterface {\n\n private speedAudio = 1;\n private frequencyAudio = 1;\n private currentSpeedAudio = 1;\n private currentPitchShifterWorklet: typeof SoundtouchWrapperFilterWorkletNode;\n private currentPitchShifter: PitchShifter;\n private isOfflineMode = false;\n\n constructor() {\n super();\n this.enable();\n this.setDefaultEnabled(true);\n }\n\n async initializeWorklet(): Promise {\n // Do nothing\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.SOUNDTOUCH;\n }\n\n constructAudioWorkletProcessor(): SimpleAudioWorkletProcessor {\n throw new Error(\"Method not implemented.\");\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.SOUNDTOUCH;\n }\n\n async getEntrypointNode(context: BaseAudioContext, buffer: AudioBuffer, offline: boolean): Promise {\n this.isOfflineMode = offline;\n\n this.cleanUpOldNodes();\n\n // In offline (compatibility) mode\n if (offline) {\n // If the settings are untouched, we don't use Soundtouch\n if (!this.isEnabled() || (this.speedAudio == 1 && this.frequencyAudio == 1)) {\n // Just return an audio buffer source node\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n return {\n input: bufferSource,\n output: bufferSource\n };\n } else {\n // If audio worklet is enabled for soundtouch, and if the speed of audio is untouched\n // Soundtouch Audio Worklet don't support speed editing yet\n if (this.isAudioWorkletEnabled() && utils.isAudioWorkletCompatible(context) && this.speedAudio == 1) {\n return this.renderWithWorklet(buffer, context);\n } else {\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n }\n\n // Not in offline mode: get classic soundtouch script processor node\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, context);\n this.updateState();\n\n return {\n input: this.currentPitchShifter,\n output: this.currentPitchShifter\n };\n }\n\n /** Cleanup old nodes (worklets, pitch shifter) */\n private cleanUpOldNodes() {\n // Stop current worklet\n if (this.currentPitchShifterWorklet) {\n this.currentPitchShifterWorklet.stop();\n this.currentPitchShifterWorklet.disconnect();\n }\n\n if (this.currentPitchShifter) {\n this.currentPitchShifter.disconnect();\n this.currentPitchShifter._filter = null;\n }\n }\n\n private getSoundtouchScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): AudioNode {\n return new PitchShifter(context, buffer, Constants.SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE);\n }\n\n /**\n * Use script processor node (deprecated) to render the audio buffer with Soundtouch, according to the current settings.\n * Not working on Firefox\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n const offlineContext = new OfflineAudioContext(2, context.sampleRate * durationAudio, context.sampleRate);\n\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, offlineContext);\n this.updateState();\n\n this.currentPitchShifter.connect(offlineContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n const bufferSourceRendered = context.createBufferSource();\n bufferSourceRendered.buffer = renderedBuffer;\n bufferSourceRendered.start();\n\n this.cleanUpOldNodes();\n\n return {\n input: bufferSourceRendered,\n output: bufferSourceRendered\n };\n }\n\n /**\n * EXPERIMENTAL - Use audio worklet to render the audio buffer with Soundtouch, according to the current settings.\n * Working in Firefox and Chrome\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithWorklet(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n\n try {\n // Setup worklet JS module\n await context.audioWorklet.addModule((this.configService ? this.configService.getWorkletBasePath() : \"\") + Constants.WORKLET_PATHS.SOUNDTOUCH);\n\n // Setup an audio buffer source from the audio buffer\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n // Create the worklet node\n this.currentPitchShifterWorklet = new SoundtouchWrapperFilterWorkletNode(context, \"soundtouch-worklet\", {\n processorOptions: {\n bypass: false,\n recording: false,\n nInputFrames: this.approximateNInputFrames(durationAudio, context),\n updateInterval: 10.0,\n sampleRate: buffer.sampleRate\n },\n });\n\n // Connect the node for correct rendering\n bufferSource.connect(this.currentPitchShifterWorklet.node);\n\n // Setup pitch/speed of Soundtouch\n if (this.isEnabled()) {\n await this.currentPitchShifterWorklet.setup(this.speedAudio, this.frequencyAudio);\n } else {\n await this.currentPitchShifterWorklet.setup(1, 1);\n }\n\n return {\n input: this.currentPitchShifterWorklet,\n output: this.currentPitchShifterWorklet\n };\n } catch (e) {\n // Fallback to script processor node\n console.error(e);\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n\n private approximateNInputFrames(durationAudio: number, context: BaseAudioContext) {\n // {frequencyAudio, multiplicator}: {{0.1, 10}, {0.2, 5}, {0.3, 3.33}, {0.4, 2.5}, {0.5, 2}, {0.6, 1.67}, {0.7, 1.43}, {0.8, 1.25}, {0.9, 1.11}, {1, 1}}\n return durationAudio * context.sampleRate * (Math.round(14 * Math.exp(-4 * this.frequencyAudio)) + 1);\n }\n\n get order(): number {\n return 2;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.SOUNDTOUCH;\n }\n\n getSettings(): SoundtouchSettings {\n return {\n speedAudio: this.speedAudio,\n frequencyAudio: this.frequencyAudio\n };\n }\n\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isSoundtouchAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n private getCurrentPitchShifter() {\n if (this.isOfflineMode) {\n // If the settings are untouched, we don't use Soundtouch\n if (this.speedAudio == 1 && this.frequencyAudio == 1) {\n return null;\n } else {\n if (this.isAudioWorkletEnabled() && this.currentPitchShifterWorklet && this.speedAudio == 1) {\n return this.currentPitchShifterWorklet;\n } else {\n return this.currentPitchShifter;\n }\n }\n }\n\n return this.currentPitchShifter;\n }\n\n updateState(): void {\n const pitchShifter = this.getCurrentPitchShifter();\n\n if (!this.isEnabled()) {\n if (pitchShifter) {\n pitchShifter.pitch = 1;\n pitchShifter.tempo = 1;\n }\n\n this.currentSpeedAudio = 1;\n } else {\n if (pitchShifter) {\n pitchShifter.pitch = this.frequencyAudio;\n pitchShifter.tempo = this.speedAudio;\n }\n\n this.currentSpeedAudio = this.speedAudio;\n }\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n const valueFloat = parseFloat(value as string);\n\n switch (settingId) {\n case \"speedAudio\":\n this.speedAudio = valueFloat;\n break;\n case \"frequencyAudio\":\n this.frequencyAudio = valueFloat;\n break;\n default:\n break;\n }\n\n this.updateState();\n }\n\n setEnabled(state: boolean): void {\n super.setEnabled(state);\n this.updateState();\n }\n\n getSpeed(): number {\n return this.currentSpeedAudio;\n }\n}\n","import AbstractAudioRenderer from \"./interfaces/AbstractAudioRenderer\";\nimport Constants from \"../model/Constants\";\n\nexport default class ReturnAudioRenderer extends AbstractAudioRenderer {\n\n renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise {\n return new Promise(resolve => {\n const numChannels = buffer.numberOfChannels;\n const totalFrames = context.sampleRate * buffer.duration + context.sampleRate * 2;\n const bufferReturned = context.createBuffer(numChannels, totalFrames, context.sampleRate);\n\n for (let channel = 0; channel < numChannels; channel++) {\n const nowBuffering = bufferReturned.getChannelData(channel);\n const sourceChannelData = buffer.getChannelData(channel);\n\n for (let i = 0; i < totalFrames; i++) {\n if (i < sourceChannelData.length) {\n nowBuffering[i] = sourceChannelData[sourceChannelData.length - 1 - i];\n } else {\n nowBuffering[i] = 0;\n }\n }\n }\n\n resolve(bufferReturned);\n });\n }\n\n get order(): number {\n return 0;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.RETURN_AUDIO;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport BassBoosterSettings from \"../model/filtersSettings/BassBoosterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BassBoosterFilter extends AbstractAudioFilter {\n private frequencyBooster = 200;\n private frequencyReduce = 200;\n private dbBooster = 15;\n private dbReduce = -2;\n\n getNode(context: BaseAudioContext) {\n const bassBoostFilter = context.createBiquadFilter();\n bassBoostFilter.type = \"lowshelf\";\n bassBoostFilter.frequency.value = this.frequencyBooster;\n bassBoostFilter.gain.value = this.dbBooster;\n\n const bassBoostFilterHighFreq = context.createBiquadFilter();\n bassBoostFilterHighFreq.type = \"highshelf\";\n bassBoostFilterHighFreq.frequency.value = this.frequencyReduce;\n bassBoostFilterHighFreq.gain.value = this.dbReduce;\n bassBoostFilterHighFreq.connect(bassBoostFilter);\n\n return {\n input: bassBoostFilterHighFreq,\n output: bassBoostFilter\n };\n }\n \n get order(): number {\n return 3;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BASS_BOOST;\n }\n\n getSettings(): BassBoosterSettings {\n return {\n frequencyBooster: this.frequencyBooster,\n frequencyReduce: this.frequencyReduce,\n dbBooster: this.dbBooster,\n dbReduce: this.dbReduce,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch(settingId) {\n case \"frequencyBooster\":\n this.frequencyBooster = parseInt(value as string);\n break;\n case \"frequencyReduce\":\n this.frequencyReduce = parseInt(value as string);\n break;\n case \"dbBooster\":\n this.dbBooster = parseInt(value as string);\n break;\n case \"dbReduce\":\n this.dbReduce = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport BitCrusherSettings from \"../model/filtersSettings/BitCrusherSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/BitCrusher.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilterWorklet {\n private bits = 16;\n private normFreq = 0.9;\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.BITCRUSHER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.BITCRUSHER;\n }\n\n get order(): number {\n return 6;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BITCRUSHER;\n }\n\n getSettings(): BitCrusherSettings {\n return {\n bits: this.bits,\n normFreq: this.normFreq,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch (settingId) {\n case \"bits\":\n this.bits = parseInt(value as string);\n break;\n case \"normFreq\":\n this.normFreq = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport EchoSettings from \"../model/filtersSettings/EchoSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class EchoFilter extends AbstractAudioFilter {\n private delay = 0.2;\n private gain = 0.75;\n\n getNode(context: BaseAudioContext) {\n const delayNode = context.createDelay(179);\n delayNode.delayTime.value = this.delay;\n\n const gainNode = context.createGain();\n gainNode.gain.value = this.gain;\n\n gainNode.connect(delayNode);\n delayNode.connect(gainNode);\n\n return {\n input: gainNode,\n output: delayNode\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.ECHO;\n }\n\n getAddingTime() {\n return 5;\n }\n\n getSettings(): EchoSettings {\n return {\n delay: this.delay,\n gain: this.gain\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"delay\":\n this.delay = parseFloat(value as string);\n break;\n case \"gain\":\n this.gain = parseFloat(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport HighPassSettings from \"../model/filtersSettings/HighPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class HighPassFilter extends AbstractAudioFilter {\n private highFrequency = 3500;\n\n getNode(context: BaseAudioContext) {\n const highPassFilter = context.createBiquadFilter();\n highPassFilter.type = \"highpass\";\n highPassFilter.frequency.value = this.highFrequency;\n\n return {\n input: highPassFilter,\n output: highPassFilter\n };\n }\n \n get order(): number {\n return 4;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.HIGH_PASS;\n }\n\n getSettings(): HighPassSettings {\n return {\n highFrequency: this.highFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"highFrequency\":\n this.highFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport LimiterSettings from \"../model/filtersSettings/LimiterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/Limiter.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LimiterFilter extends AbstractAudioFilterWorklet {\n private preGain = 0; // dB\n private postGain = 0; // dB\n private attackTime = 0; // s\n private releaseTime = 3; // s\n private threshold = -0.05; // dB\n private lookAheadTime = 0.1; // s\n\n constructor() {\n super();\n this.keepCurrentNodeIfPossible = true;\n this.enable();\n this.setDefaultEnabled(true);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.LIMITER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.LIMITER;\n }\n\n get order(): number {\n return 11;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LIMITER;\n }\n\n getAddingTime() {\n return this.lookAheadTime;\n }\n\n getSettings(): LimiterSettings {\n return {\n preGain: this.preGain,\n postGain: this.postGain,\n attackTime: this.attackTime,\n releaseTime: this.releaseTime,\n threshold: this.threshold,\n lookAheadTime: this.lookAheadTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"preGain\":\n this.preGain = parseFloat(value as string);\n break;\n case \"postGain\":\n this.postGain = parseFloat(value as string);\n break;\n case \"attackTime\":\n this.attackTime = parseFloat(value as string);\n break;\n case \"releaseTime\":\n this.releaseTime = parseFloat(value as string);\n break;\n case \"threshold\":\n this.threshold = parseFloat(value as string);\n break;\n case \"lookAheadTime\":\n this.lookAheadTime = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport LowPassSettings from \"../model/filtersSettings/LowPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LowPassFilter extends AbstractAudioFilter {\n private lowFrequency = 3500;\n \n getNode(context: BaseAudioContext) {\n const lowPassFilter = context.createBiquadFilter();\n lowPassFilter.type = \"lowpass\";\n lowPassFilter.frequency.value = this.lowFrequency;\n\n return {\n input: lowPassFilter,\n output: lowPassFilter\n };\n }\n \n get order(): number {\n return 5;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LOW_PASS;\n }\n\n getSettings(): LowPassSettings {\n return {\n lowFrequency: this.lowFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"lowFrequency\":\n this.lowFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { ReverbEnvironment } from \"../model/ReverbEnvironment\";\nimport ReverbSettings from \"../model/filtersSettings/ReverbSettings\";\nimport GenericSettingValue from \"../model/filtersSettings/GenericSettingValue\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"@/utils/Functions\";\n\nexport default class ReverbFilter extends AbstractAudioFilter {\n\n private reverbEnvironment: ReverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n private reverbCustomEnvironmentAddTime = 5;\n private customEnvironment: AudioBuffer | null = null;\n\n getNode(context: BaseAudioContext) {\n const convolver = context.createConvolver();\n\n if (!this.reverbEnvironment || (this.reverbEnvironment.url == \"custom\" && !this.customEnvironment)) {\n // Fallback to default environment otherwise\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n\n const buffer = this.getReverbBuffer(context);\n\n if (buffer) {\n convolver.buffer = buffer;\n }\n\n return {\n input: convolver,\n output: convolver\n };\n }\n\n private getReverbBuffer(context: BaseAudioContext): AudioBuffer | undefined {\n if (this.reverbEnvironment.url == \"custom\" && this.customEnvironment) {\n if (this.customEnvironment.sampleRate === context.sampleRate) {\n return this.customEnvironment;\n } else {\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n } else if (this.bufferFetcherService) {\n return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url);\n }\n\n return;\n }\n\n get order(): number {\n return 9;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.REVERB;\n }\n\n getAddingTime() {\n const settings = this.getSettings();\n\n if (settings && settings.reverbEnvironment) {\n if (settings.reverbEnvironment.value != \"custom\") {\n if (settings.reverbEnvironment.additionalData) {\n return settings.reverbEnvironment.additionalData.addDuration as number;\n }\n } else {\n return this.reverbCustomEnvironmentAddTime;\n }\n }\n\n return 0;\n }\n\n getSettings(): ReverbSettings {\n if (!this.reverbEnvironment) {\n return {\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n return {\n reverbEnvironment: {\n name: this.reverbEnvironment.name,\n value: this.reverbEnvironment.url,\n additionalData: {\n size: this.reverbEnvironment.size,\n link: this.reverbEnvironment.link,\n addDuration: this.reverbEnvironment.addDuration\n }\n },\n downloadedBuffers: this.bufferFetcherService?.getDownloadedBuffersList(),\n hasCustomEnvironment: this.customEnvironment ? true : false,\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (settingId == \"reverbEnvironment\") {\n const reverbEnvironment = value as GenericSettingValue;\n\n if (reverbEnvironment) {\n const url = reverbEnvironment.value;\n\n try {\n if (url != \"custom\") {\n await this.bufferFetcherService?.fetchBuffer(url);\n }\n\n if (reverbEnvironment.additionalData) {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: reverbEnvironment.additionalData.size as number,\n addDuration: reverbEnvironment.additionalData.addDuration as number,\n link: reverbEnvironment.additionalData.link as string\n };\n } else {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: 0,\n addDuration: 0,\n link: \"\"\n };\n }\n } catch (e) { /* empty */ }\n }\n } else if (settingId == \"reverbCustomEnvironmentAddTime\") {\n if (utilFunctions.isSettingValueValid(value)) {\n this.reverbCustomEnvironmentAddTime = parseInt(value as string);\n }\n } else if (settingId == \"reverbCustomEnvironmentFile\") {\n if (this.bufferDecoderService && value) {\n this.customEnvironment = await this.bufferDecoderService.decodeBufferFromFile(value as File);\n\n if (!this.customEnvironment) {\n // Fallback to default environment\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n }\n }\n }\n \n async bufferFetcherReseted() {\n const reverbSettings = this.getSettings();\n \n if (reverbSettings) {\n const reverbUrl = (reverbSettings as ReverbSettings).reverbEnvironment?.value;\n \n if (reverbUrl && reverbUrl !== \"custom\" && this.bufferFetcherService) {\n await this.bufferFetcherService.fetchBuffer(reverbUrl);\n return true;\n }\n }\n\n return false;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilter {\n\n getNode(context: BaseAudioContext) {\n const lpf1 = context.createBiquadFilter();\n lpf1.type = \"lowpass\";\n lpf1.frequency.value = 2000.0;\n const lpf2 = context.createBiquadFilter();\n lpf2.type = \"lowpass\";\n lpf2.frequency.value = 2000.0;\n const hpf1 = context.createBiquadFilter();\n hpf1.type = \"highpass\";\n hpf1.frequency.value = 500.0;\n const hpf2 = context.createBiquadFilter();\n hpf2.type = \"highpass\";\n hpf2.frequency.value = 500.0;\n lpf1.connect(lpf2);\n lpf2.connect(hpf1);\n hpf1.connect(hpf2);\n \n return {\n input: lpf1,\n output: hpf2\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.TELEPHONIZER;\n }\n\n getSettings() {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport Constants from \"../model/Constants\";\nimport Vocoder from \"../utils/Vocoder\";\nimport VocoderSettings from \"../model/filtersSettings/VocoderSettings\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class VocoderFilter extends AbstractAudioFilter {\n\n private currentVocoder: Vocoder | null = null;\n private modulatorGainValue = 1.0;\n private carrierSampleGainValue = 0;\n private oscillatorGainValue = 1.0;\n private noiseGainValue = 0.2;\n private oscillatorDetuneValue = 0;\n\n getNode(context: BaseAudioContext): AudioFilterNodes {\n const modulatorBuffer = this.bufferFetcherService?.getAudioBuffer(Constants.VOCODER_MODULATOR);\n\n this.currentVocoder = new Vocoder(context, modulatorBuffer!);\n this.currentVocoder.init();\n this.applyCurrentSettingsToVocoder();\n\n const { modulatorGain, outputGain } = this.currentVocoder.getNodes();\n\n return {\n input: modulatorGain!,\n output: outputGain!\n };\n }\n\n getSettings(): VocoderSettings {\n return {\n modulatorGainValue: this.modulatorGainValue,\n carrierSampleGainValue: this.carrierSampleGainValue,\n oscillatorGainValue: this.oscillatorGainValue,\n noiseGainValue: this.noiseGainValue,\n oscillatorDetuneValue: this.oscillatorDetuneValue\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"modulatorGainValue\":\n this.modulatorGainValue = parseFloat(value as string);\n break;\n case \"carrierSampleGainValue\":\n this.carrierSampleGainValue = parseFloat(value as string);\n break;\n case \"oscillatorGainValue\":\n this.oscillatorGainValue = parseFloat(value as string);\n break;\n case \"noiseGainValue\":\n this.noiseGainValue = parseFloat(value as string);\n break;\n case \"oscillatorDetuneValue\":\n this.oscillatorDetuneValue = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToVocoder();\n }\n\n private applyCurrentSettingsToVocoder() {\n if(this.currentVocoder) {\n this.currentVocoder.updateModGain(this.modulatorGainValue);\n this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue);\n this.currentVocoder.updateSynthLevel(this.oscillatorGainValue);\n this.currentVocoder.updateNoiseLevel(this.noiseGainValue);\n this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue);\n }\n }\n \n get order(): number {\n return 1;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.VOCODER;\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport \"./worklets/Passthrough.worklet\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport PassThroughWorkletEvent from \"@/model/PassThroughWorkletEvent\";\nimport { EventType } from \"@/model/EventTypeEnum\";\n\nexport default class PassThroughFilter extends AbstractAudioFilterWorklet {\n\n private currentTime = 0;\n private lastSampleCount = 0;\n private samplePerSecond = 0;\n private currentTimeSamplesPerSecond = 0;\n\n receiveEvent(message: MessageEvent): void {\n const currentTime = performance.now();\n const samplesProcessed = message.data.samplesCount;\n\n if (message.data.command === \"update\") {\n this.calculatePercentageProcessed(currentTime, samplesProcessed);\n }\n\n this.calculateRemainingTimeProcessing(currentTime, samplesProcessed);\n }\n\n /**\n * Calculate percentage processed\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculatePercentageProcessed(currentTime: number, samplesProcessed: number) {\n if (this.currentTime === 0) {\n this.currentTime = currentTime;\n }\n\n const timeDifference = currentTime - this.currentTime;\n const percentageProcessed = (samplesProcessed / this._totalSamples);\n\n if (this.eventEmitter && timeDifference >= Constants.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL) {\n this.eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, percentageProcessed * 100);\n this.currentTime = currentTime;\n }\n }\n\n /**\n * Calculate remaining time to process the audio\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculateRemainingTimeProcessing(currentTime: number, samplesProcessed: number) {\n if (this.currentTimeSamplesPerSecond === 0) {\n this.currentTimeSamplesPerSecond = currentTime;\n }\n\n const timeDifferenceSamplePerSecond = currentTime - this.currentTimeSamplesPerSecond;\n const remainingSamples = this._totalSamples - samplesProcessed;\n\n if (this.eventEmitter && remainingSamples <= 0) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, 0);\n return;\n }\n\n if (this.eventEmitter && timeDifferenceSamplePerSecond >= 1000) {\n this.calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond, samplesProcessed);\n\n const remainingTimeSeconds = remainingSamples / this.samplePerSecond;\n\n this.currentTimeSamplesPerSecond = currentTime;\n this.lastSampleCount = samplesProcessed;\n\n if (isNaN(remainingTimeSeconds) || !isFinite(remainingTimeSeconds)) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n } else {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, remainingTimeSeconds);\n }\n }\n }\n\n /**\n * Calculate smoothed samples per second\n * @param timeDifferenceSamplePerSecond Time difference \n * @param samplesProcessed Samples count processed\n * @returns Smoothed samples per second\n */\n private calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond: number, samplesProcessed: number): void {\n if (timeDifferenceSamplePerSecond > 0) {\n const currentSampleRate = (samplesProcessed - this.lastSampleCount) / (timeDifferenceSamplePerSecond / 1000);\n this.samplePerSecond = (Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR * currentSampleRate) + ((1 - Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR) * this.samplePerSecond);\n }\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.PASSTHROUGH;\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.PASSTHROUGH;\n }\n\n get order(): number {\n return 10;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.PASSTHROUGH;\n }\n\n set totalSamples(value: number) {\n super.totalSamples = value;\n this.currentTime = 0;\n this.currentTimeSamplesPerSecond = 0;\n this.samplePerSecond = 0;\n this.lastSampleCount = 0;\n }\n\n getSettings() {\n return {};\n }\n\n isEnabled(): boolean {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { ConfigService } from \"./interfaces/ConfigService\";\n\n/**\n * Default implementation for a ConfigService, using a built-in map.\n * The configuration is not stored in localstorage in this case.\n */\n@injectable()\nexport default class GenericConfigService implements ConfigService {\n\n private mapConfig = new Map();\n\n getConfig(key: string): string | undefined | null {\n return this.mapConfig.get(key);\n }\n\n setConfig(key: string, value: string): void {\n this.mapConfig.set(key, value);\n }\n\n isCompatibilityModeEnabled(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED) == \"true\";\n }\n\n isCompatibilityModeChecked(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED) == \"true\";\n }\n\n isAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n isSoundtouchAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n getBufferSize(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BUFFER_SIZE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_BUFFER_SIZE;\n }\n\n getSampleRate(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.SAMPLE_RATE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_SAMPLE_RATE;\n }\n\n getBitrateMP3(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BITRATE_MP3);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_MP3_BITRATE;\n }\n\n enableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"true\");\n }\n\n disableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"false\");\n }\n\n getWorkletBasePath(): string {\n return \"\";\n }\n\n getWorkerBasePath(): string {\n return \"\";\n }\n\n getSoundBasePath(): string {\n return \"\";\n }\n\n isInitialRenderingDisabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.DISABLE_INITIAL_RENDERING;\n }\n};\n","import { TYPES } from \"@/inversify.types\";\nimport AudioEditorInterface from \"@/audioEditor/interfaces/AudioEditorInterface\";\nimport { audioEditorContainer } from \"@/inversify.config\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\nimport BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport GenericConfigService from \"@/services/GenericConfigService\";\nimport VoiceRecorderInterface from \"@/voiceRecorder/interfaces/VoiceRecorderInterface\";\n\nexport default class SoundStudioFactory {\n\n private static ready = false;\n\n static createAudioEditor(configService?: ConfigService, buffersToFetch?: string[]): AudioEditorInterface {\n if (!SoundStudioFactory.ready) {\n if (configService) {\n audioEditorContainer.bind(TYPES.ConfigService).toDynamicValue(() => configService);\n } else {\n audioEditorContainer.bind(TYPES.ConfigService).to(GenericConfigService);\n console.warn(\"No ConfigService provided. Using default generic implementation.\");\n }\n \n audioEditorContainer.bind(TYPES.AudioBuffersToFetch).toConstantValue(buffersToFetch || []);\n SoundStudioFactory.ready = true;\n }\n\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static createVoiceRecorder(): VoiceRecorderInterface {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getAudioEditorInstance(): AudioEditorInterface | null {\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static getAudioPlayerInstance(): BufferPlayerInterface | null {\n return audioEditorContainer.get(TYPES.BufferPlayer);\n }\n\n static getAudioRecorderInstance(): VoiceRecorderInterface | null {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getEventEmitterInstance(): EventEmitterInterface | null {\n return audioEditorContainer.get(TYPES.EventEmitter);\n }\n\n static getConfigServiceInstance(): ConfigService | undefined {\n return audioEditorContainer.get(TYPES.ConfigService);\n }\n}\n"],"names":["Reflect","factory","root","globalThis","global","self","this","Function","_","functionThis","eval","indirectEvalThis","exporter","makeExporter","target","previous","key","value","Object","defineProperty","configurable","writable","hasOwn","prototype","hasOwnProperty","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","create","supportsProto","__proto__","Array","downLevel","HashMap","MakeDictionary","has","map","call","get","undefined","functionPrototype","getPrototypeOf","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","registrySymbol","for","metadataRegistry","GetOrCreateMetadataRegistry","metadataProvider","CreateMetadataProvider","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","provider","GetMetadataProvider","OrdinaryDeleteMetadata","i","length","decorated","descriptor","MetadataKey","O","P","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","set","keys","_i","ownKeys_1","add","push","_a","parentKeys_1","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","valueOf","toString_1","toString","IsCallable","argument","ToString","isArray","SameValueZero","y","V","func","GetIterator","obj","method","IteratorValue","iterResult","IteratorStep","next","done","IteratorClose","f","proto","prototypeProto","constructor","CreateMetadataRegistry","fallback","first","second","rest","CreateFallbackProvider","targetProviderMap","registry","registerProvider","getProvider","setProvider","isExtensible","Error","getProviderNoCache","isProviderFor","providerMap","hasProvider","existingProvider","enumerable","targetMetadata","GetOrCreateMetadataMap","Create","createdTargetMetadata","metadataMap","delete","k","nextValue","e","size","reflect","metadataOwner","metadataPropertySet","registeredProvider","cacheSentinel","arraySentinel","MapIterator","values","selector","_index","_keys","_values","_selector","index","throw","error","return","_cacheKey","_cacheIndex","_find","clear","getKey","getValue","getEntry","insert","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","Math","random","GenRandomBytes","Uint8Array","array","crypto","getRandomValues","msCrypto","data","offset","byte","toLowerCase","__","NAMED_TAG","NAME_TAG","UNMANAGED_TAG","OPTIONAL_TAG","INJECT_TAG","MULTI_INJECT_TAG","TAGGED","TAGGED_PROP","PARAM_TYPES","POST_CONSTRUCT","PRE_DESTROY","NON_CUSTOM_TAG_KEYS","BindingScopeEnum","Request","Singleton","Transient","BindingTypeEnum","ConstantValue","Constructor","DynamicValue","Factory","Instance","Invalid","Provider","TargetTypeEnum","ClassProperty","ConstructorArgument","Variable","idCounter","id","Binding","serviceIdentifier","scope","activated","type","constraint","request","implementationType","cache","onActivation","onDeactivation","dynamicValue","clone","DUPLICATED_METADATA","NULL_ARGUMENT","KEY_NOT_FOUND","AMBIGUOUS_MATCH","NOT_REGISTERED","MISSING_INJECTABLE_ANNOTATION","MISSING_INJECT_ANNOTATION","CIRCULAR_DEPENDENCY","INVALID_DECORATOR_OPERATION","ARGUMENTS_LENGTH_MISMATCH","arguments","POST_CONSTRUCT_ERROR","clazz","errorMessage","PRE_DESTROY_ERROR","ON_DEACTIVATION_ERROR","STACK_OVERFLOW","MetadataReader","getConstructorMetadata","constructorFunc","compilerGeneratedMetadata","METADATA_KEY.PARAM_TYPES","userGeneratedMetadata","METADATA_KEY.TAGGED","getPropertiesMetadata","METADATA_KEY.TAGGED_PROP","BindingCount","MultipleBindingsAvailable","NoBindingsAvailable","OnlyOneBindingAvailable","isStackOverflowExeption","RangeError","message","ERROR_MSGS.STACK_OVERFLOW","getServiceIdentifierAsString","name","listRegisteredBindingsForServiceIdentifier","container","getBindings","registeredBindingsList","registeredBindings","forEach","binding","getFunctionName","metaData","alreadyDependencyChain","parentRequest","circularDependencyToException","childRequests","childRequest","services","stringArr","_createStringArr","req","reverse","join","dependencyChainToString","ERROR_MSGS.CIRCULAR_DEPENDENCY","name_1","match","Context","addPlan","plan","setCurrentRequest","currentRequest","Metadata","METADATA_KEY.NAMED_TAG","String","Plan","parentContext","rootRequest","LazyServiceIdentifier","cb","_cb","unwrap","QueryableString","str","startsWith","searchString","indexOf","endsWith","reverseString","reverseSearchString","split","contains","equals","compareString","Target","identifier","namedOrTagged","queryableName","slice","metadataItem","hasTag","METADATA_KEY.MULTI_INJECT_TAG","matchesArray","matchesTag","isNamed","isTagged","some","METADATA_KEY.NON_CUSTOM_TAG_KEYS","every","isOptional","METADATA_KEY.OPTIONAL_TAG","getNamedTag","filter","m","getCustomTags","matchesNamedTag","_this","__spreadArray","to","from","pack","ar","l","concat","getTargets","metadataReader","constructorName","isBaseClass","serviceIdentifiers","ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION","constructorArgsMetadata","hasUserDeclaredUnknownInjections","hasOptionalParameters","constructorTargets","iterations","targets","getConstructorArgsAsTarget","getConstructorArgsAsTargets","propertyTargets","getClassPropsAsTargets","formatTargetMetadata","isManaged","unmanaged","injectIdentifier","inject","multiInject","ERROR_MSGS.MISSING_INJECT_ANNOTATION","targetName","_getServiceIdentifierForProperty","propertyName","className","msg","classPropsMetadata","symbolKeys","getOwnPropertySymbols","keys_1","baseConstructor","baseTargets","getBaseClassDependencyCount","t","METADATA_KEY.UNMANAGED_TAG","unmanagedCount","apply","dependencyCount","targetMetadataMap","METADATA_KEY.INJECT_TAG","METADATA_KEY.NAME_TAG","bindings","requestScope","addChildRequest","child","getBindingDictionary","cntnr","_bindingDictionary","_getActiveBindings","avoidConstraints","context","activeBindings","options","autoBindInjectable","bind","toSelf","serviceIdentifierString","ERROR_MSGS.NOT_REGISTERED","m_1","namedTag","otherTags","tag","listMetadataForTarget","ERROR_MSGS.AMBIGUOUS_MATCH","_validateActiveBindingCount","_createSubRequests","thePlan","subChildRequest","dependencies","getDependencies","skipBaseClassChecks","baseClassDependencyCount","ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH","dependency","bindingDictionary","hasKey","isMultiInject","targetType","injectMetadata","tagMetadata","_createTarget","isPromise","object","then","isPromiseOrContainsPromise","FactoryType","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","rejected","__generator","body","g","label","sent","trys","ops","verb","n","v","op","pop","_saveToRequestScope","_saveToSingletonScope","_saveAsyncResultToSingletonScope","asyncResult","ex_1","__assign","assign","s","p","_createInstance","constr","resolveRequest","resolved","reduce","resolvedRequests","injection","constructorInjections","propertyRequests","propertyInjections","isAsync","_resolveRequests","createInstanceWithInjectionsArg","args","possiblyWaitInjections","createInstanceWithInjections","createInstanceWithInjectionsAsync","instance","r","property","possiblePromiseinjections","injections","possiblePromiseinjections_1","all","_getInstanceAfterPostConstruct","postConstructResult","_b","METADATA_KEY.POST_CONSTRUCT","_postConstruct","_validateInstanceResolution","scopeErrorMessage","METADATA_KEY.PRE_DESTROY","_throwIfHandlingDeactivation","_resolveRequest","targetIsAnArray","targetParentIsNotAnArray","_f","_resolveBinding","_resolveFactoryFromBinding","factoryDetails","factoryType","getFactoryDetails","fn","errorCallback","tryAndThrowErrorIfStackOverflow","_getResolvedFromBinding","boundValue","serviceIdentifierAsString","ERROR_MSGS.INVALID_BINDING_TYPE","ensureFullyBound","resolvedResult","resolveInstance","_resolveInScope","resolveFromBinding","tryGetFromScope","saveToScope","_onActivation","_bindingActivation","containersIterator","_getContainersIterator","containersIteratorResult","context_1","activationsIterator","_getContainerActivationsForService","_activateContainerAsync","_activateContainer","previousResult","activation","resultPromise","activations","_activations","containersStack","nextContainer","traverseAncerstors","taggedConstraint","namedConstraint","typeConstraint","BindingWhenSyntax","_binding","when","BindingOnSyntax","whenTargetNamed","whenTargetIsDefault","whenTargetTagged","whenInjectedInto","whenParentNamed","whenParentTagged","whenAnyAncestorIs","ancestor","whenNoAncestorIs","whenAnyAncestorNamed","whenNoAncestorNamed","whenAnyAncestorTagged","whenNoAncestorTagged","whenAnyAncestorMatches","whenNoAncestorMatches","handler","BindingWhenOnSyntax","_bindingWhenSyntax","_bindingOnSyntax","BindingInSyntax","inRequestScope","inSingletonScope","inTransientScope","BindingInWhenOnSyntax","_bindingInSyntax","BindingToSyntax","toConstantValue","toDynamicValue","toConstructor","toFactory","toFunction","bindingWhenOnSyntax","toAutoFactory","toAutoNamedFactory","named","getNamed","toProvider","toService","service","ContainerSnapshot","of","middleware","deactivations","moduleActivationStore","snapshot","Lookup","getMap","ERROR_MSGS.NULL_ARGUMENT","entry","ERROR_MSGS.KEY_NOT_FOUND","remove","removeIntersection","lookup","traverse","lookupActivations","filteredValues","lookupValue","moduleActivation","_setValue","removeByCondition","condition","removals","updatedEntries","entries_1","copy","b","ModuleActivationStore","moduleId","handlers","_getEmptyHandlersStore","addDeactivation","_getModuleActivationHandlers","onDeactivations","addActivation","onActivations","handlersStore","moduleActivationHandlers","Container","containerOptions","defaultScope","_snapshots","_middleware","_deactivations","_metadataReader","_moduleActivationStore","merge","container1","container2","containers","targetContainers","targetContainer","targetBindingDictionary","destination","load","modules","getHelpers","_getContainerModuleHelpersFactory","modules_1","currentModule","containerModuleHelpers","bindFunction","unbindFunction","isboundFunction","rebindFunction","unbindAsyncFunction","onActivationFunction","onDeactivationFunction","loadAsync","modules_2","unload","module","_removeModuleBindings","_deactivateSingletons","_removeModuleHandlers","unloadAsync","modules_3","module_1","_deactivateSingletonsAsync","rebind","unbind","rebindAsync","unbindAsync","_removeServiceFromDictionary","unbindAll","unbindAllAsync","promises","isBound","bound","isCurrentBound","isBoundNamed","isBoundTagged","request_1","createMockRequest","restore","createChild","applyMiddleware","middlewares","initial","_planAndResolve","prev","curr","applyCustomMetadataReader","getArgs","_getNotAllArgs","_getButThrowIfAsync","getAsync","_get","getTagged","getTaggedAsync","getNamedAsync","getAll","_getAllArgs","getAllAsync","_getAll","getAllTagged","getAllTaggedAsync","getAllNamed","getAllNamedAsync","constructorFunction","_preDestroy","moduleActivationsHandlers","_deactivate","_deactivateContainer","_handleDeactivationError","_propagateContainerDeactivationThenBindingAndPreDestroyAsync","propagateDeactivationResult","_propagateContainerDeactivationThenBindingAndPreDestroy","ex","ERROR_MSGS.ON_DEACTIVATION_ERROR","deactivationsIterator","deactivation","_deactivateContainerAsync","setModuleId","bindingToSyntax","getRebindFunction","getOnActivationFunction","getOnDeactivationFunction","mId","planAndResolveArgs","contextInterceptor","middlewareResult","_deactivateIfSingleton","bindings_1","_bindingDeactivationAndPreDestroy","_bindingDeactivationAndPreDestroyAsync","ERROR_MSGS.CANNOT_UNBIND","tagParameter","annotationTarget","parameterName","parameterIndex","ERROR_MSGS.INVALID_DECORATOR_OPERATION","_throwIfMethodParameter","_tagParameterOrProperty","_ensureNoMetadataKeyDuplicates","metadatas","duplicate","seenValues","array_1","getFirstArrayDuplicate","md","ERROR_MSGS.DUPLICATED_METADATA","paramsOrPropertiesMetadata","paramOrPropertyMetadata","_loop_1","paramOrPropertyMetadata_1","createTaggedDecorator","targetKey","indexOrPropertyDescriptor","tagProperty","injectable","types","injectBase","TYPES","AudioContextManager","AudioEditor","AudioProcessor","BufferManager","FilterManager","RendererManager","SaveBufferManager","ConfigService","EventEmitter","BufferPlayer","BufferDecoderService","BufferFetcherService","AudioBuffersToFetch","Renderers","Filters","EntryPointFilter","VoiceRecorder","__decorate","desc","d","c","getOwnPropertyDescriptor","__param","paramIndex","__metadata","EventType","SuppressedError","Constants","AUDIO_EDITOR","VOICE_RECORDER","BUFFER_PLAYER","AUDIO_CONTEXT_MANAGER","AUDIO_PROCESSOR","BUFFER_MANAGER","FILTER_MANAGER","RENDERER_MANAGER","SAVE_BUFFER_MANAGER","EXPORT_WAV_COMMAND","EXPORT_MP3_COMMAND","AUDIO_WAV","AUDIO_MP3","RECORD_COMMAND","INIT_COMMAND","FILTERS_NAMES","REVERB","ECHO","BASS_BOOST","BITCRUSHER","HIGH_PASS","LIMITER","LOW_PASS","PASSTHROUGH","RETURN_AUDIO","SOUNDTOUCH","TELEPHONIZER","VOCODER","WORKLET_PATHS","RECORDER_WORKLET","WORKLET_NAMES","PREFERENCES_KEYS","COMPATIBILITY_MODE_ENABLED","COMPATIBILITY_MODE_CHECKED","ENABLE_AUDIO_WORKLET","ENABLE_SOUNDTOUCH_AUDIO_WORKLET","BUFFER_SIZE","SAMPLE_RATE","DISABLE_INITIAL_RENDERING","BITRATE_MP3","ENABLE_RECORDER_AUDIO_WORKLET","SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE","DEFAULT_REVERB_ENVIRONMENT","url","addDuration","link","VOCODER_MODULATOR","DEFAULT_BUFFER_SIZE","VALID_BUFFER_SIZE","VALID_MP3_BITRATES","DEFAULT_SAMPLE_RATE","VALID_SAMPLE_RATES","TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL","TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR","DEFAULT_SAVE_FORMAT","DEFAULT_MP3_BITRATE","listeners","on","event","callback","emit","off","eventEmitter","configService","previousSampleRate","setup","getSampleRate","SAMPLE_RATE_CHANGED","currentContext","createNewContext","createNewContextIfNeeded","principalBuffer","isCompatibilityModeEnabled","currentSampleRate","sampleRate","_currentContext","oldAudioContext","destroyOldContext","latencyHint","AudioContext","close","AbstractAudioElement","enabled","defaultEnabled","bufferFetcherService","bufferDecoderService","isEnabled","isDefaultEnabled","setDefaultEnabled","state","setEnabled","enable","disable","toggle","injectDependencies","utilFunctions","calcAudioDuration","audio","speed","duration","loadAudioBuffer","file","arrayBuffer","readAsArrayBufferPromisified","audioBuffer","decodeAudioData","decodeBuffer","reader","FileReader","onload","ev","ArrayBuffer","readAsArrayBuffer","numberOfChannels","resume","newBuffer","createBuffer","sourceChannelData","getChannelData","channel0Data","channel1Data","convertAudioBufferToFloat32Array","channel","convertAudioParamToFloat32Array","param","Float32Array","sumAudioBufferChannel","a","sumAudioBuffer","sum","isAudioWorkletCompatible","audioContext","isSettingValueValid","isNaN","Number","trim","calculateAudioDuration","filterManager","speedAudio","getAddingTime","resetAudioRenderingProgress","UPDATE_AUDIO_TREATMENT_PERCENT","UPDATE_REMAINING_TIME_ESTIMATED","forceDownload","blob","filename","window","document","createElement","URL","webkitURL","createObjectURL","appendChild","href","download","click","revokeObjectURL","rendererManager","contextManager","saveBufferManager","audioProcessor","bufferManager","player","super","bufferPlayer","onBeforePlaying","compatibilityMode","setupOutput","PLAYING_FINISHED","loop","start","addFilters","filters","addRenderers","renderers","defaultDeviceSampleRate","tempContext","loadBufferFromFile","prepareContext","decodeBufferFromFile","initialRenderingDone","sumInputBuffer","utils","loadBuffer","getOutputBuffer","renderedBuffer","renderAudio","isAudioWorkletAvailable","getFiltersState","getRenderersState","getFiltersSettings","reconnectNodesIfNeeded","entrypointFilter","connectNodes","getSpeed","toggleFilter","filterId","toggleRenderer","changeFilterSettings","settings","resetFilterSettings","resetAllFiltersState","resetAllRenderersState","exit","stop","reset","cancelAudioRendering","saveBuffer","downloadingInitialData","order","_renderedBuffer","audioRenderingLastCanceled","inputBuffer","resetBufferFetcher","isInitialRenderingDisabled","loadInitialBuffer","durationAudio","offlineContext","OfflineAudioContext","outputContext","executeAudioRenderers","currentOfflineContext","setupTotalSamples","setupPlayerSpeed","initializeWorklets","currentNodes","output","connect","startRendering","loadRenderedAudio","OFFLINE_AUDIO_RENDERING_FINISHED","setCompatibilityMode","AUDIO_RENDERING_FINISHED","CANCELLED_AND_LOADED_INITIAL_AUDIO","isCompatibilityModeChecked","setCompatibilityModeChecked","enableCompatibilityMode","COMPATIBILITY_MODE_AUTO_ENABLED","RENDERING_AUDIO_PROBLEM_DETECTED","disconnectOldNodes","CANCELLING_AUDIO_PROCESSING","checked","setConfig","audioBuffersToFetch","fetchBuffers","refetch","LOADING_BUFFERS","fetchAllBuffers","LOADED_BUFFERS","LOADING_BUFFERS_ERROR","resetFilterBuffers","entryPointFilter","_entryPointFilter","_currentNodes","initializeDefaultSettings","getSettings","find","setSetting","resetSettings","element","keepCurrentInputOutput","isCompatibilityMode","entrypointNode","entrypointNodes","getEntrypointNode","intermediateNodes","previousNode","sort","node","getNode","updateState","keepCurrentOutput","disconnect","intermediate","isWorklet","initializeWorklet","totalSamples","bufferFetcherReseted","renderer","rendererId","currentBuffer","getRecorderWorker","workerBasePath","Worker","Recorder","cfg","worker","config","bufferLen","numChannels","mimeType","workletBasePath","bitrate","callbacks","getBuffer","exportWAV","exportMP3","recording","source","AudioWorkletNode","port","postMessage","createRecorderNode","command","onmessage","createRecorderWorklet","createRecorderScriptProcessorNode","audioWorklet","addModule","numChannelParameter","parameters","setValueAtTime","onaudioprocess","record","kill","terminate","Recorder$1","savingBuffer","playingStoppedCallback","PLAYING_STOPPED","savingResult","saveBufferCompatibilityMode","saveBufferDirect","getWorkerBasePath","downloadAudioBlob","format","rec","getBufferSize","getWorkletBasePath","finishedCallback","downloadBlobCallback","Date","toISOString","currentTime","displayTime","intervals","playing","onBeforePlayingCallback","currentNode","_contextManager","init","direct","createBufferSource","updateInfos","clearIntervals","interval","clearInterval","PLAYING_STARTED","startTime","performance","now","setInterval","timeNow","nextTime","playDirect","pause","PLAYING_UPDATE","setTimePercent","percent","round","setTime","time","toggleLoop","currentTimeDisplay","trunc","maxTimeDisplay","remainingTimeDisplay","buffers","bufferErrors","fetchBuffer","bufferURI","force","realBufferURI","getSoundBasePath","getKeyFromLocation","FETCHING_BUFFERS","response","fetch","ok","FETCHING_BUFFERS_ERROR","_c","FINISHED_FETCHING_BUFFERS","_d","bufferURIs","uri","getAudioBuffer","getOrFetchAudioBuffer","getDownloadedBuffersList","location","substring","lastIndexOf","DECODING_AUDIO_FILE","DECODED_AUDIO_FILE","console","ERROR_DECODING_AUDIO_FILE","AbstractAudioRenderer","AbstractAudioFilter","defaultSettings","_totalSamples","getDefaultSettings","AudioParamPolyfill","defaultValue","_value","_minValue","_maxValue","MAX_SAFE_INTEGER","_defaultValue","automationRate","newValue","max","min","minValue","maxValue","warn","linearRampToValueAtTime","endTime","exponentialRampToValueAtTime","cancelAndHoldAtTime","cancelTime","cancelScheduledValues","setTargetAtTime","timeConstant","setValueCurveAtTime","WorkletScriptProcessorNodeAdapter","bufferSize","_parameters","_port","workletProcessor","_scriptProcessorNode","createScriptProcessor","setupPort","setupProcessor","setupWorkletScope","messageChannel","MessageChannel","port1","port2","inputArray","Functions","ouputArray","outputBuffer","records","recordsMap","fromEntries","process","descriptors","defaultParameterDescriptors","RegisterProcessorPolyfill","registerProcessor","processorName","processorClass","processorsMap","getProcessor","processor","SimpleAudioWorkletProcessor","inputs","outputs","parameterDescriptors","AudioWorkletProcessor","AbstractAudioFilterWorklet","currentWorkletNode","fallbackToScriptProcessor","keepCurrentNodeIfPossible","workletPath","catch","isAudioWorkletEnabled","initializeNode","workletName","receiveEvent","applyCurrentSettingsToWorklet","currentSettings","settingKey","settingFromWorklet","BitCrusherProcessor","stopped","phaser","last","pow","bits","currentNormFreq","normFreq","fill","blockSize","inp","out","floor","DelayBuffer","_array","readPointer","writePointer","read","LimiterProcessor","delayBuffer","envelopeSample","disabled","getEnvelope","attackTime","releaseTime","attackGain","exp","releaseGain","envelope","envIn","abs","getMaxEnvelope","channels","ampToDB","log10","dBToAmp","db","envelopeData","postGainAmp","postGain","preGainAmp","preGain","lookAheadTime","slope","gainDB","threshold","gain","FifoSampleBuffer","_vector","_position","_frameCount","vector","position","startIndex","frameCount","endIndex","receive","rewind","put","numFrames","putSamples","samples","sourceOffset","numSamples","ensureCapacity","destOffset","subarray","putBuffer","receiveSamples","extract","minLength","parseInt","newVector","ensureAdditionalCapacity","AbstractFifoSamplePipe","createBuffers","_inputBuffer","_outputBuffer","RateTransposer","_rate","rate","slopeCount","prevSampleL","prevSampleR","numFramesOutput","transpose","src","srcOffset","dest","used","srcIndex","FilterSupport","pipe","_pipe","fillInputBuffer","fillOutputBuffer","numInputFrames","noop","SimpleFilter","sourceSound","historyBufferSize","_sourcePosition","outputBufferPosition","newOutputBufferPosition","sourcePosition","onEnd","numFramesExtracted","currentFrames","handleSampleData","_SCAN_OFFSETS","AUTOSEEK_K","Stretch","_quickSeek","midBufferDirty","midBuffer","overlapLength","autoSeqSetting","autoSeekSetting","_tempo","setParameters","clearMidBuffer","sequenceMs","seekWindowMs","overlapMs","calculateSequenceParameters","calculateOverlapLength","tempo","newTempo","intskip","nominalSkip","seekWindowLength","skipFract","sampleReq","seekLength","inputChunkSize","outputChunkSize","overlapInMsec","newOvl","refMidBuffer","checkLimits","mi","ma","seq","seek","AUTOSEQ_AT_MIN","AUTOSEEK_AT_MIN","quickSeek","seekBestOverlapPosition","seekBestOverlapPositionStereoQuick","seekBestOverlapPositionStereo","bestOffset","bestCorrelation","correlation","preCalculateCorrelationReferenceStereo","MIN_VALUE","calculateCrossCorrelationStereo","correlationOffset","tempOffset","scanCount","j","temp","mixingPosition","compare","mixing","calcLength","mixingOffset","overlap","overlapPosition","overlapStereo","inputPosition","outputPosition","tempFrame","frameScale","fi","inputOffset","outputOffset","overlapSkip","testFloatEqual","SoundTouch","transposer","stretch","_intermediateBuffer","virtualPitch","virtualRate","virtualTempo","calculateEffectiveRateAndTempo","rateChange","tempoChange","pitch","pitchOctaves","pitchSemitones","previousTempo","previousRate","WebAudioBufferSource","dualChannel","left","right","minsSecs","secs","mins","width","z","onUpdate","currentTimePlayed","timePlayed","CustomEvent","detail","formattedTimePlayed","percentagePlayed","_node","dispatchEvent","PitchShifter","_soundtouch","_filter","sourcePositionCallback","framesExtracted","getWebAudioNode","sourcePostion","formattedDuration","perc","semitone","toNode","eventName","addEventListener","removeEventListener","soundtouchWrapperFilterWorkletNodeClass","running","_pitch","updateInterval","processorOptions","status","messageProcessor","SoundtouchWrapperFilterWorkletNode","Vocoder","ctx","carrierB","modulatorB","FILTER_QUALITY","FOURIER_SIZE","WAVETABLEBOOST","SAWTOOTHBOOST","oscillatorType","oscillatorDetuneValue","carrierBuffer","modulatorNode","vocoding","modulatorInput","carrierInput","modulatorGain","modulatorGainValue","noiseBuffer","noiseNode","noiseGain","noiseGainValue","carrierSampleNode","carrierSampleGain","carrierSampleGainValue","oscillatorNode","oscillatorGain","oscillatorGainValue","wavetable","wavetableSignalGain","modFilterBands","modFilterPostGains","heterodynes","powers","lpFilters","lpFilterPostGains","carrierBands","carrierFilterPostGains","carrierBandGains","vocoderBands","numVocoderBands","hpFilterGain","outputGain","modulatorBuffer","generateVocoderBands","setupVocoderGraph","vocode","getNodes","synthLevel","shutOffCarrier","selectSawtooth","selectWavetable","setPeriodicWave","updateModGain","updateSampleLevel","updateSynthLevel","updateNoiseLevel","updateDetuneValue","detune","startFreq","endFreq","numBands","centsPerBand","log","LN2","scale","currentFreq","frequency","loadNoiseBuffer","lengthInSamples","bufferData","initBandpassFilters","createGain","waveShaperCurve","n2","hpFilter","createBiquadFilter","Q","rectifierCurve","modulatorFilter","secondModulatorFilter","modulatorFilterPostGain","heterodyneOscillator","createOscillator","heterodyne","heterodynePostGain","rectifier","createWaveShaper","curve","lpFilter","lpFilterPostGain","waveshaper","carrierFilter","secondCarrierFilter","carrierFilterPostGain","bandGain","real","imag","createPeriodicWave","createCarriersAndPlay","PassthroughWorkletProcessor","samplesCount","sample","TimerSaveTime","seconds","incr","initialSeconds","countCallback","count","onCount","recorder","stream","alreadyInit","timer","enableAudioFeedback","deviceList","constraints","noiseSuppression","echoCancellation","autoGainControl","ideal","sampleRateConfigNotSupported","isRecordingAvailable","navigator","mediaDevices","getSupportedConstraints","RECORDER_INIT","getUserMedia","RECORDER_COUNT_UPDATE","successCallback","notFoundErrorCallback","unknownErrorCallback","ondevicechange","updateInputList","RECORDER_SUCCESS","RECORDER_ERROR","RECORDER_NOT_FOUND_ERROR","RECORDER_UNKNOWN_ERROR","audioFeedback","RECORDER_UPDATE_CONSTRAINTS","getConstraints","tracks","getTracks","updateConstraints","resetConstraints","newConstraint","precAudioFeedback","precRecording","applyConstraints","newConstraints","newConstraintName","stopStream","createMediaStreamSource","setNoiseSuppression","setAutoGain","setEchoCancellation","devices","enumerateDevices","device","kind","changeInput","deviceId","groupId","RECORDER_RECORDING","RECORDER_STOPPED","RECORDER_PAUSED","RECORDER_RESETED","audioEditorContainer","frequencyAudio","currentSpeedAudio","isOfflineMode","constructAudioWorkletProcessor","offline","cleanUpOldNodes","bufferSource","renderWithWorklet","renderWithScriptProcessorNode","currentPitchShifter","getSoundtouchScriptProcessorNode","currentPitchShifterWorklet","bufferSourceRendered","bypass","nInputFrames","approximateNInputFrames","isSoundtouchAudioWorkletEnabled","getCurrentPitchShifter","pitchShifter","settingId","valueFloat","parseFloat","totalFrames","bufferReturned","nowBuffering","frequencyBooster","frequencyReduce","dbBooster","dbReduce","bassBoostFilter","bassBoostFilterHighFreq","delay","delayNode","createDelay","delayTime","gainNode","highFrequency","highPassFilter","lowFrequency","lowPassFilter","reverbEnvironment","reverbCustomEnvironmentAddTime","customEnvironment","convolver","createConvolver","getReverbBuffer","additionalData","downloadedBuffers","hasCustomEnvironment","reverbSettings","reverbUrl","lpf1","lpf2","hpf1","hpf2","currentVocoder","applyCurrentSettingsToVocoder","lastSampleCount","samplePerSecond","currentTimeSamplesPerSecond","samplesProcessed","calculatePercentageProcessed","calculateRemainingTimeProcessing","timeDifference","percentageProcessed","timeDifferenceSamplePerSecond","remainingSamples","calculateSmoothedSamplePerSecond","remainingTimeSeconds","isFinite","GenericConfigService","mapConfig","getConfig","setting","getBitrateMP3","disableCompatibilityMode","SoundStudioFactory","createAudioEditor","buffersToFetch","ready","createVoiceRecorder","getAudioEditorInstance","getAudioPlayerInstance","getAudioRecorderInstance","getEventEmitterInstance","getConfigServiceInstance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,73]} \ No newline at end of file +{"version":3,"file":"SimpleSoundStudioLibrary.js","sources":["../../node_modules/reflect-metadata/Reflect.js","../../node_modules/inversify/es/constants/metadata_keys.js","../../node_modules/inversify/es/constants/literal_types.js","../../node_modules/inversify/es/utils/id.js","../../node_modules/inversify/es/bindings/binding.js","../../node_modules/inversify/es/constants/error_msgs.js","../../node_modules/inversify/es/planning/metadata_reader.js","../../node_modules/inversify/es/bindings/binding_count.js","../../node_modules/inversify/es/utils/exceptions.js","../../node_modules/inversify/es/utils/serialization.js","../../node_modules/inversify/es/planning/context.js","../../node_modules/inversify/es/planning/metadata.js","../../node_modules/inversify/es/planning/plan.js","../../node_modules/inversify/es/annotation/lazy_service_identifier.js","../../node_modules/inversify/es/planning/queryable_string.js","../../node_modules/inversify/es/planning/target.js","../../node_modules/inversify/es/planning/reflection_utils.js","../../node_modules/inversify/es/planning/request.js","../../node_modules/inversify/es/planning/planner.js","../../node_modules/inversify/es/utils/async.js","../../node_modules/inversify/es/scope/scope.js","../../node_modules/inversify/es/utils/factory_type.js","../../node_modules/inversify/es/utils/binding_utils.js","../../node_modules/inversify/es/resolution/instantiation.js","../../node_modules/inversify/es/resolution/resolver.js","../../node_modules/inversify/es/syntax/constraint_helpers.js","../../node_modules/inversify/es/syntax/binding_when_syntax.js","../../node_modules/inversify/es/syntax/binding_on_syntax.js","../../node_modules/inversify/es/syntax/binding_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_in_syntax.js","../../node_modules/inversify/es/syntax/binding_in_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_to_syntax.js","../../node_modules/inversify/es/container/container_snapshot.js","../../node_modules/inversify/es/container/lookup.js","../../node_modules/inversify/es/utils/clonable.js","../../node_modules/inversify/es/container/module_activation_store.js","../../node_modules/inversify/es/container/container.js","../../node_modules/inversify/es/annotation/decorator_utils.js","../../node_modules/inversify/es/utils/js.js","../../node_modules/inversify/es/annotation/injectable.js","../../node_modules/inversify/es/annotation/inject_base.js","../../node_modules/inversify/es/annotation/inject.js","../../node_modules/inversify/es/annotation/multi_inject.js","../../lib/inversify.types.ts","../../node_modules/tslib/tslib.es6.js","../../lib/model/EventTypeEnum.ts","../../lib/model/Constants.ts","../../lib/utils/EventEmitter.ts","../../lib/audioEditor/AudioContextManager.ts","../../lib/filters/interfaces/AbstractAudioElement.ts","../../lib/utils/Functions.ts","../../lib/audioEditor/AudioEditor.ts","../../lib/audioEditor/AudioProcessor.ts","../../lib/audioEditor/BufferManager.ts","../../lib/audioEditor/FilterManager.ts","../../lib/audioEditor/RendererManager.ts","../../lib/recorder/getRecorderWorker.ts","../../lib/recorder/Recorder.ts","../../lib/audioEditor/SaveBufferManager.ts","../../lib/bufferPlayer/BufferPlayer.ts","../../lib/services/BufferFetcherService.ts","../../lib/services/BufferDecoderService.ts","../../lib/filters/interfaces/AbstractAudioRenderer.ts","../../lib/filters/interfaces/AbstractAudioFilter.ts","../../lib/workletPolyfill/AudioParamPolyfill.ts","../../lib/workletPolyfill/WorkletScriptProcessorNodeAdapter.ts","../../lib/workletPolyfill/RegisterProcessorPolyfill.ts","../../lib/workletPolyfill/SimpleAudioWorkletProcessor.ts","../../lib/workletPolyfill/AudioWorkletProcessorPolyfill.ts","../../lib/filters/interfaces/AbstractAudioFilterWorklet.ts","../../lib/filters/worklets/BitCrusher.worklet.ts","../../lib/utils/DelayBuffer.ts","../../lib/filters/worklets/Limiter.worklet.ts","../../lib/filters/LimiterFilter.ts","../../node_modules/soundtouchjs/dist/soundtouch.js","../../lib/filters/worklets/SoundtouchWrapperFilterWorkletNode.ts","../../lib/utils/Vocoder.ts","../../lib/filters/worklets/Passthrough.worklet.ts","../../lib/utils/TimerSaveTime.ts","../../lib/voiceRecorder/VoiceRecorder.ts","../../lib/inversify.config.ts","../../lib/filters/SountouchWrapperFilter.ts","../../lib/filters/ReturnAudioRenderer.ts","../../lib/filters/BassBoosterFilter.ts","../../lib/filters/BitCrusherFilter.ts","../../lib/filters/EchoFilter.ts","../../lib/filters/HighPassFilter.ts","../../lib/filters/LowPassFilter.ts","../../lib/filters/ReverbFilter.ts","../../lib/filters/TelephonizerFilter.ts","../../lib/filters/VocoderFilter.ts","../../lib/filters/PassThroughFilter.ts","../../lib/services/GenericConfigService.ts","../../lib/utils/SoundStudioFactory.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","export var NAMED_TAG = 'named';\r\nexport var NAME_TAG = 'name';\r\nexport var UNMANAGED_TAG = 'unmanaged';\r\nexport var OPTIONAL_TAG = 'optional';\r\nexport var INJECT_TAG = 'inject';\r\nexport var MULTI_INJECT_TAG = 'multi_inject';\r\nexport var TAGGED = 'inversify:tagged';\r\nexport var TAGGED_PROP = 'inversify:tagged_props';\r\nexport var PARAM_TYPES = 'inversify:paramtypes';\r\nexport var DESIGN_PARAM_TYPES = 'design:paramtypes';\r\nexport var POST_CONSTRUCT = 'post_construct';\r\nexport var PRE_DESTROY = 'pre_destroy';\r\nfunction getNonCustomTagKeys() {\r\n return [\r\n INJECT_TAG,\r\n MULTI_INJECT_TAG,\r\n NAME_TAG,\r\n UNMANAGED_TAG,\r\n NAMED_TAG,\r\n OPTIONAL_TAG,\r\n ];\r\n}\r\nexport var NON_CUSTOM_TAG_KEYS = getNonCustomTagKeys();\r\n","var BindingScopeEnum = {\r\n Request: 'Request',\r\n Singleton: 'Singleton',\r\n Transient: 'Transient'\r\n};\r\nvar BindingTypeEnum = {\r\n ConstantValue: 'ConstantValue',\r\n Constructor: 'Constructor',\r\n DynamicValue: 'DynamicValue',\r\n Factory: 'Factory',\r\n Function: 'Function',\r\n Instance: 'Instance',\r\n Invalid: 'Invalid',\r\n Provider: 'Provider'\r\n};\r\nvar TargetTypeEnum = {\r\n ClassProperty: 'ClassProperty',\r\n ConstructorArgument: 'ConstructorArgument',\r\n Variable: 'Variable'\r\n};\r\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\r\n","var idCounter = 0;\r\nfunction id() {\r\n return idCounter++;\r\n}\r\nexport { id };\r\n","import { BindingScopeEnum, BindingTypeEnum } from '../constants/literal_types';\r\nimport { id } from '../utils/id';\r\nvar Binding = (function () {\r\n function Binding(serviceIdentifier, scope) {\r\n this.id = id();\r\n this.activated = false;\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.scope = scope;\r\n this.type = BindingTypeEnum.Invalid;\r\n this.constraint = function (request) { return true; };\r\n this.implementationType = null;\r\n this.cache = null;\r\n this.factory = null;\r\n this.provider = null;\r\n this.onActivation = null;\r\n this.onDeactivation = null;\r\n this.dynamicValue = null;\r\n }\r\n Binding.prototype.clone = function () {\r\n var clone = new Binding(this.serviceIdentifier, this.scope);\r\n clone.activated = (clone.scope === BindingScopeEnum.Singleton) ? this.activated : false;\r\n clone.implementationType = this.implementationType;\r\n clone.dynamicValue = this.dynamicValue;\r\n clone.scope = this.scope;\r\n clone.type = this.type;\r\n clone.factory = this.factory;\r\n clone.provider = this.provider;\r\n clone.constraint = this.constraint;\r\n clone.onActivation = this.onActivation;\r\n clone.onDeactivation = this.onDeactivation;\r\n clone.cache = this.cache;\r\n return clone;\r\n };\r\n return Binding;\r\n}());\r\nexport { Binding };\r\n","export var DUPLICATED_INJECTABLE_DECORATOR = 'Cannot apply @injectable decorator multiple times.';\r\nexport var DUPLICATED_METADATA = 'Metadata key was used more than once in a parameter:';\r\nexport var NULL_ARGUMENT = 'NULL argument';\r\nexport var KEY_NOT_FOUND = 'Key Not Found';\r\nexport var AMBIGUOUS_MATCH = 'Ambiguous match found for serviceIdentifier:';\r\nexport var CANNOT_UNBIND = 'Could not unbind serviceIdentifier:';\r\nexport var NOT_REGISTERED = 'No matching bindings found for serviceIdentifier:';\r\nexport var MISSING_INJECTABLE_ANNOTATION = 'Missing required @injectable annotation in:';\r\nexport var MISSING_INJECT_ANNOTATION = 'Missing required @inject or @multiInject annotation in:';\r\nexport var UNDEFINED_INJECT_ANNOTATION = function (name) {\r\n return \"@inject called with undefined this could mean that the class \" + name + \" has \" +\r\n 'a circular dependency problem. You can use a LazyServiceIdentifier to ' +\r\n 'overcome this limitation.';\r\n};\r\nexport var CIRCULAR_DEPENDENCY = 'Circular dependency found:';\r\nexport var NOT_IMPLEMENTED = 'Sorry, this feature is not fully implemented yet.';\r\nexport var INVALID_BINDING_TYPE = 'Invalid binding type:';\r\nexport var NO_MORE_SNAPSHOTS_AVAILABLE = 'No snapshot available to restore.';\r\nexport var INVALID_MIDDLEWARE_RETURN = 'Invalid return type in middleware. Middleware must return!';\r\nexport var INVALID_FUNCTION_BINDING = 'Value provided to function binding must be a function!';\r\nexport var LAZY_IN_SYNC = function (key) { return \"You are attempting to construct '\" + key + \"' in a synchronous way\\n but it has asynchronous dependencies.\"; };\r\nexport var INVALID_TO_SELF_VALUE = 'The toSelf function can only be applied when a constructor is ' +\r\n 'used as service identifier';\r\nexport var INVALID_DECORATOR_OPERATION = 'The @inject @multiInject @tagged and @named decorators ' +\r\n 'must be applied to the parameters of a class constructor or a class property.';\r\nexport var ARGUMENTS_LENGTH_MISMATCH = function () {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n return 'The number of constructor arguments in the derived class ' +\r\n (values[0] + \" must be >= than the number of constructor arguments of its base class.\");\r\n};\r\nexport var CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = 'Invalid Container constructor argument. Container options ' +\r\n 'must be an object.';\r\nexport var CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = 'Invalid Container option. Default scope must ' +\r\n 'be a string (\"singleton\" or \"transient\").';\r\nexport var CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = 'Invalid Container option. Auto bind injectable must ' +\r\n 'be a boolean';\r\nexport var CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = 'Invalid Container option. Skip base check must ' +\r\n 'be a boolean';\r\nexport var MULTIPLE_PRE_DESTROY_METHODS = 'Cannot apply @preDestroy decorator multiple times in the same class';\r\nexport var MULTIPLE_POST_CONSTRUCT_METHODS = 'Cannot apply @postConstruct decorator multiple times in the same class';\r\nexport var ASYNC_UNBIND_REQUIRED = 'Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)';\r\nexport var POST_CONSTRUCT_ERROR = function (clazz, errorMessage) { return \"@postConstruct error in class \" + clazz + \": \" + errorMessage; };\r\nexport var PRE_DESTROY_ERROR = function (clazz, errorMessage) { return \"@preDestroy error in class \" + clazz + \": \" + errorMessage; };\r\nexport var ON_DEACTIVATION_ERROR = function (clazz, errorMessage) { return \"onDeactivation() error in class \" + clazz + \": \" + errorMessage; };\r\nexport var CIRCULAR_DEPENDENCY_IN_FACTORY = function (factoryType, serviceIdentifier) {\r\n return \"It looks like there is a circular dependency in one of the '\" + factoryType + \"' bindings. Please investigate bindings with \" +\r\n (\"service identifier '\" + serviceIdentifier + \"'.\");\r\n};\r\nexport var STACK_OVERFLOW = 'Maximum call stack size exceeded';\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar MetadataReader = (function () {\r\n function MetadataReader() {\r\n }\r\n MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) {\r\n var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc);\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);\r\n return {\r\n compilerGeneratedMetadata: compilerGeneratedMetadata,\r\n userGeneratedMetadata: userGeneratedMetadata || {}\r\n };\r\n };\r\n MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) {\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || [];\r\n return userGeneratedMetadata;\r\n };\r\n return MetadataReader;\r\n}());\r\nexport { MetadataReader };\r\n","export var BindingCount = {\r\n MultipleBindingsAvailable: 2,\r\n NoBindingsAvailable: 0,\r\n OnlyOneBindingAvailable: 1\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nexport function isStackOverflowExeption(error) {\r\n return (error instanceof RangeError ||\r\n error.message === ERROR_MSGS.STACK_OVERFLOW);\r\n}\r\nexport var tryAndThrowErrorIfStackOverflow = function (fn, errorCallback) {\r\n try {\r\n return fn();\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n error = errorCallback();\r\n }\r\n throw error;\r\n }\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nfunction getServiceIdentifierAsString(serviceIdentifier) {\r\n if (typeof serviceIdentifier === 'function') {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier.name;\r\n }\r\n else if (typeof serviceIdentifier === 'symbol') {\r\n return serviceIdentifier.toString();\r\n }\r\n else {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier;\r\n }\r\n}\r\nfunction listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) {\r\n var registeredBindingsList = '';\r\n var registeredBindings = getBindings(container, serviceIdentifier);\r\n if (registeredBindings.length !== 0) {\r\n registeredBindingsList = '\\nRegistered bindings:';\r\n registeredBindings.forEach(function (binding) {\r\n var name = 'Object';\r\n if (binding.implementationType !== null) {\r\n name = getFunctionName(binding.implementationType);\r\n }\r\n registeredBindingsList = registeredBindingsList + \"\\n \" + name;\r\n if (binding.constraint.metaData) {\r\n registeredBindingsList = registeredBindingsList + \" - \" + binding.constraint.metaData;\r\n }\r\n });\r\n }\r\n return registeredBindingsList;\r\n}\r\nfunction alreadyDependencyChain(request, serviceIdentifier) {\r\n if (request.parentRequest === null) {\r\n return false;\r\n }\r\n else if (request.parentRequest.serviceIdentifier === serviceIdentifier) {\r\n return true;\r\n }\r\n else {\r\n return alreadyDependencyChain(request.parentRequest, serviceIdentifier);\r\n }\r\n}\r\nfunction dependencyChainToString(request) {\r\n function _createStringArr(req, result) {\r\n if (result === void 0) { result = []; }\r\n var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier);\r\n result.push(serviceIdentifier);\r\n if (req.parentRequest !== null) {\r\n return _createStringArr(req.parentRequest, result);\r\n }\r\n return result;\r\n }\r\n var stringArr = _createStringArr(request);\r\n return stringArr.reverse().join(' --> ');\r\n}\r\nfunction circularDependencyToException(request) {\r\n request.childRequests.forEach(function (childRequest) {\r\n if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) {\r\n var services = dependencyChainToString(childRequest);\r\n throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + \" \" + services);\r\n }\r\n else {\r\n circularDependencyToException(childRequest);\r\n }\r\n });\r\n}\r\nfunction listMetadataForTarget(serviceIdentifierString, target) {\r\n if (target.isTagged() || target.isNamed()) {\r\n var m_1 = '';\r\n var namedTag = target.getNamedTag();\r\n var otherTags = target.getCustomTags();\r\n if (namedTag !== null) {\r\n m_1 += namedTag.toString() + '\\n';\r\n }\r\n if (otherTags !== null) {\r\n otherTags.forEach(function (tag) {\r\n m_1 += tag.toString() + '\\n';\r\n });\r\n }\r\n return \" \" + serviceIdentifierString + \"\\n \" + serviceIdentifierString + \" - \" + m_1;\r\n }\r\n else {\r\n return \" \" + serviceIdentifierString;\r\n }\r\n}\r\nfunction getFunctionName(func) {\r\n if (func.name) {\r\n return func.name;\r\n }\r\n else {\r\n var name_1 = func.toString();\r\n var match = name_1.match(/^function\\s*([^\\s(]+)/);\r\n return match ? match[1] : \"Anonymous function: \" + name_1;\r\n }\r\n}\r\nfunction getSymbolDescription(symbol) {\r\n return symbol.toString().slice(7, -1);\r\n}\r\nexport { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription };\r\n","import { id } from '../utils/id';\r\nvar Context = (function () {\r\n function Context(container) {\r\n this.id = id();\r\n this.container = container;\r\n }\r\n Context.prototype.addPlan = function (plan) {\r\n this.plan = plan;\r\n };\r\n Context.prototype.setCurrentRequest = function (currentRequest) {\r\n this.currentRequest = currentRequest;\r\n };\r\n return Context;\r\n}());\r\nexport { Context };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar Metadata = (function () {\r\n function Metadata(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n Metadata.prototype.toString = function () {\r\n if (this.key === METADATA_KEY.NAMED_TAG) {\r\n return \"named: \" + String(this.value).toString() + \" \";\r\n }\r\n else {\r\n return \"tagged: { key:\" + this.key.toString() + \", value: \" + String(this.value) + \" }\";\r\n }\r\n };\r\n return Metadata;\r\n}());\r\nexport { Metadata };\r\n","var Plan = (function () {\r\n function Plan(parentContext, rootRequest) {\r\n this.parentContext = parentContext;\r\n this.rootRequest = rootRequest;\r\n }\r\n return Plan;\r\n}());\r\nexport { Plan };\r\n","var LazyServiceIdentifier = (function () {\r\n function LazyServiceIdentifier(cb) {\r\n this._cb = cb;\r\n }\r\n LazyServiceIdentifier.prototype.unwrap = function () {\r\n return this._cb();\r\n };\r\n return LazyServiceIdentifier;\r\n}());\r\nexport { LazyServiceIdentifier };\r\n","var QueryableString = (function () {\r\n function QueryableString(str) {\r\n this.str = str;\r\n }\r\n QueryableString.prototype.startsWith = function (searchString) {\r\n return this.str.indexOf(searchString) === 0;\r\n };\r\n QueryableString.prototype.endsWith = function (searchString) {\r\n var reverseString = '';\r\n var reverseSearchString = searchString.split('').reverse().join('');\r\n reverseString = this.str.split('').reverse().join('');\r\n return this.startsWith.call({ str: reverseString }, reverseSearchString);\r\n };\r\n QueryableString.prototype.contains = function (searchString) {\r\n return (this.str.indexOf(searchString) !== -1);\r\n };\r\n QueryableString.prototype.equals = function (compareString) {\r\n return this.str === compareString;\r\n };\r\n QueryableString.prototype.value = function () {\r\n return this.str;\r\n };\r\n return QueryableString;\r\n}());\r\nexport { QueryableString };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { id } from '../utils/id';\r\nimport { getSymbolDescription } from '../utils/serialization';\r\nimport { Metadata } from './metadata';\r\nimport { QueryableString } from './queryable_string';\r\nvar Target = (function () {\r\n function Target(type, identifier, serviceIdentifier, namedOrTagged) {\r\n this.id = id();\r\n this.type = type;\r\n this.serviceIdentifier = serviceIdentifier;\r\n var queryableName = typeof identifier === 'symbol' ? getSymbolDescription(identifier) : identifier;\r\n this.name = new QueryableString(queryableName || '');\r\n this.identifier = identifier;\r\n this.metadata = new Array();\r\n var metadataItem = null;\r\n if (typeof namedOrTagged === 'string') {\r\n metadataItem = new Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged);\r\n }\r\n else if (namedOrTagged instanceof Metadata) {\r\n metadataItem = namedOrTagged;\r\n }\r\n if (metadataItem !== null) {\r\n this.metadata.push(metadataItem);\r\n }\r\n }\r\n Target.prototype.hasTag = function (key) {\r\n for (var _i = 0, _a = this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Target.prototype.isArray = function () {\r\n return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG);\r\n };\r\n Target.prototype.matchesArray = function (name) {\r\n return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name);\r\n };\r\n Target.prototype.isNamed = function () {\r\n return this.hasTag(METADATA_KEY.NAMED_TAG);\r\n };\r\n Target.prototype.isTagged = function () {\r\n return this.metadata.some(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n };\r\n Target.prototype.isOptional = function () {\r\n return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true);\r\n };\r\n Target.prototype.getNamedTag = function () {\r\n if (this.isNamed()) {\r\n return this.metadata.filter(function (m) { return m.key === METADATA_KEY.NAMED_TAG; })[0];\r\n }\r\n return null;\r\n };\r\n Target.prototype.getCustomTags = function () {\r\n if (this.isTagged()) {\r\n return this.metadata.filter(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n Target.prototype.matchesNamedTag = function (name) {\r\n return this.matchesTag(METADATA_KEY.NAMED_TAG)(name);\r\n };\r\n Target.prototype.matchesTag = function (key) {\r\n var _this = this;\r\n return function (value) {\r\n for (var _i = 0, _a = _this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key && m.value === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n };\r\n return Target;\r\n}());\r\nexport { Target };\r\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { LazyServiceIdentifier } from '../annotation/lazy_service_identifier';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFunctionName } from '../utils/serialization';\r\nimport { Target } from './target';\r\nfunction getDependencies(metadataReader, func) {\r\n var constructorName = getFunctionName(func);\r\n return getTargets(metadataReader, constructorName, func, false);\r\n}\r\nfunction getTargets(metadataReader, constructorName, func, isBaseClass) {\r\n var metadata = metadataReader.getConstructorMetadata(func);\r\n var serviceIdentifiers = metadata.compilerGeneratedMetadata;\r\n if (serviceIdentifiers === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var constructorArgsMetadata = metadata.userGeneratedMetadata;\r\n var keys = Object.keys(constructorArgsMetadata);\r\n var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);\r\n var hasOptionalParameters = keys.length > func.length;\r\n var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;\r\n var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);\r\n var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);\r\n var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);\r\n return targets;\r\n}\r\nfunction getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {\r\n var targetMetadata = constructorArgsMetadata[index.toString()] || [];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var isManaged = metadata.unmanaged !== true;\r\n var serviceIdentifier = serviceIdentifiers[index];\r\n var injectIdentifier = metadata.inject || metadata.multiInject;\r\n serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);\r\n if (serviceIdentifier instanceof LazyServiceIdentifier) {\r\n serviceIdentifier = serviceIdentifier.unwrap();\r\n }\r\n if (isManaged) {\r\n var isObject = serviceIdentifier === Object;\r\n var isFunction = serviceIdentifier === Function;\r\n var isUndefined = serviceIdentifier === undefined;\r\n var isUnknownType = isObject || isFunction || isUndefined;\r\n if (!isBaseClass && isUnknownType) {\r\n var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + \" argument \" + index + \" in class \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var target = new Target(TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n return target;\r\n }\r\n return null;\r\n}\r\nfunction getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {\r\n var targets = [];\r\n for (var i = 0; i < iterations; i++) {\r\n var index = i;\r\n var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);\r\n if (target !== null) {\r\n targets.push(target);\r\n }\r\n }\r\n return targets;\r\n}\r\nfunction _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {\r\n var serviceIdentifier = (inject || multiInject);\r\n if (serviceIdentifier === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" for property \" + String(propertyName) + \" in class \" + className + \".\";\r\n throw new Error(msg);\r\n }\r\n return serviceIdentifier;\r\n}\r\nfunction getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {\r\n var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);\r\n var targets = [];\r\n var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);\r\n var stringKeys = Object.keys(classPropsMetadata);\r\n var keys = stringKeys.concat(symbolKeys);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var key = keys_1[_i];\r\n var targetMetadata = classPropsMetadata[key];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var identifier = metadata.targetName || key;\r\n var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);\r\n var target = new Target(TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n targets.push(target);\r\n }\r\n var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);\r\n targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);\r\n }\r\n return targets;\r\n}\r\nfunction getBaseClassDependencyCount(metadataReader, func) {\r\n var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseConstructorName = getFunctionName(baseConstructor);\r\n var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);\r\n var metadata = targets.map(function (t) { return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; }); });\r\n var unmanagedCount = [].concat.apply([], metadata).length;\r\n var dependencyCount = targets.length - unmanagedCount;\r\n if (dependencyCount > 0) {\r\n return dependencyCount;\r\n }\r\n else {\r\n return getBaseClassDependencyCount(metadataReader, baseConstructor);\r\n }\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nfunction formatTargetMetadata(targetMetadata) {\r\n var targetMetadataMap = {};\r\n targetMetadata.forEach(function (m) {\r\n targetMetadataMap[m.key.toString()] = m.value;\r\n });\r\n return {\r\n inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],\r\n multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],\r\n targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],\r\n unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]\r\n };\r\n}\r\nexport { getDependencies, getBaseClassDependencyCount, getFunctionName };\r\n","import { id } from '../utils/id';\r\nvar Request = (function () {\r\n function Request(serviceIdentifier, parentContext, parentRequest, bindings, target) {\r\n this.id = id();\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.parentContext = parentContext;\r\n this.parentRequest = parentRequest;\r\n this.target = target;\r\n this.childRequests = [];\r\n this.bindings = (Array.isArray(bindings) ? bindings : [bindings]);\r\n this.requestScope = parentRequest === null\r\n ? new Map()\r\n : null;\r\n }\r\n Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) {\r\n var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);\r\n this.childRequests.push(child);\r\n return child;\r\n };\r\n return Request;\r\n}());\r\nexport { Request };\r\n","import { BindingCount } from '../bindings/binding_count';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isStackOverflowExeption } from '../utils/exceptions';\r\nimport { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier } from '../utils/serialization';\r\nimport { Context } from './context';\r\nimport { Metadata } from './metadata';\r\nimport { Plan } from './plan';\r\nimport { getBaseClassDependencyCount, getDependencies, getFunctionName } from './reflection_utils';\r\nimport { Request } from './request';\r\nimport { Target } from './target';\r\nfunction getBindingDictionary(cntnr) {\r\n return cntnr._bindingDictionary;\r\n}\r\nfunction _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {\r\n var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;\r\n var injectMetadata = new Metadata(metadataKey, serviceIdentifier);\r\n var target = new Target(targetType, name, serviceIdentifier, injectMetadata);\r\n if (key !== undefined) {\r\n var tagMetadata = new Metadata(key, value);\r\n target.metadata.push(tagMetadata);\r\n }\r\n return target;\r\n}\r\nfunction _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {\r\n var bindings = getBindings(context.container, target.serviceIdentifier);\r\n var activeBindings = [];\r\n if (bindings.length === BindingCount.NoBindingsAvailable &&\r\n context.container.options.autoBindInjectable &&\r\n typeof target.serviceIdentifier === 'function' &&\r\n metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {\r\n context.container.bind(target.serviceIdentifier).toSelf();\r\n bindings = getBindings(context.container, target.serviceIdentifier);\r\n }\r\n if (!avoidConstraints) {\r\n activeBindings = bindings.filter(function (binding) {\r\n var request = new Request(binding.serviceIdentifier, context, parentRequest, binding, target);\r\n return binding.constraint(request);\r\n });\r\n }\r\n else {\r\n activeBindings = bindings;\r\n }\r\n _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);\r\n return activeBindings;\r\n}\r\nfunction _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {\r\n switch (bindings.length) {\r\n case BindingCount.NoBindingsAvailable:\r\n if (target.isOptional()) {\r\n return bindings;\r\n }\r\n else {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.NOT_REGISTERED;\r\n msg += listMetadataForTarget(serviceIdentifierString, target);\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n case BindingCount.OnlyOneBindingAvailable:\r\n return bindings;\r\n case BindingCount.MultipleBindingsAvailable:\r\n default:\r\n if (!target.isArray()) {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.AMBIGUOUS_MATCH + \" \" + serviceIdentifierString;\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n else {\r\n return bindings;\r\n }\r\n }\r\n}\r\nfunction _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {\r\n var activeBindings;\r\n var childRequest;\r\n if (parentRequest === null) {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);\r\n childRequest = new Request(serviceIdentifier, context, null, activeBindings, target);\r\n var thePlan = new Plan(context, childRequest);\r\n context.addPlan(thePlan);\r\n }\r\n else {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);\r\n childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);\r\n }\r\n activeBindings.forEach(function (binding) {\r\n var subChildRequest = null;\r\n if (target.isArray()) {\r\n subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);\r\n }\r\n else {\r\n if (binding.cache) {\r\n return;\r\n }\r\n subChildRequest = childRequest;\r\n }\r\n if (binding.type === BindingTypeEnum.Instance && binding.implementationType !== null) {\r\n var dependencies = getDependencies(metadataReader, binding.implementationType);\r\n if (!context.container.options.skipBaseClassChecks) {\r\n var baseClassDependencyCount = getBaseClassDependencyCount(metadataReader, binding.implementationType);\r\n if (dependencies.length < baseClassDependencyCount) {\r\n var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(getFunctionName(binding.implementationType));\r\n throw new Error(error);\r\n }\r\n }\r\n dependencies.forEach(function (dependency) {\r\n _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);\r\n });\r\n }\r\n });\r\n}\r\nfunction getBindings(container, serviceIdentifier) {\r\n var bindings = [];\r\n var bindingDictionary = getBindingDictionary(container);\r\n if (bindingDictionary.hasKey(serviceIdentifier)) {\r\n bindings = bindingDictionary.get(serviceIdentifier);\r\n }\r\n else if (container.parent !== null) {\r\n bindings = getBindings(container.parent, serviceIdentifier);\r\n }\r\n return bindings;\r\n}\r\nfunction plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {\r\n if (avoidConstraints === void 0) { avoidConstraints = false; }\r\n var context = new Context(container);\r\n var target = _createTarget(isMultiInject, targetType, serviceIdentifier, '', key, value);\r\n try {\r\n _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);\r\n return context;\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n circularDependencyToException(context.plan.rootRequest);\r\n }\r\n throw error;\r\n }\r\n}\r\nfunction createMockRequest(container, serviceIdentifier, key, value) {\r\n var target = new Target(TargetTypeEnum.Variable, '', serviceIdentifier, new Metadata(key, value));\r\n var context = new Context(container);\r\n var request = new Request(serviceIdentifier, context, null, [], target);\r\n return request;\r\n}\r\nexport { plan, createMockRequest, getBindingDictionary };\r\n","function isPromise(object) {\r\n var isObjectOrFunction = (typeof object === 'object' && object !== null) || typeof object === 'function';\r\n return isObjectOrFunction && typeof object.then === \"function\";\r\n}\r\nfunction isPromiseOrContainsPromise(object) {\r\n if (isPromise(object)) {\r\n return true;\r\n }\r\n return Array.isArray(object) && object.some(isPromise);\r\n}\r\nexport { isPromise, isPromiseOrContainsPromise };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { BindingScopeEnum } from '../constants/literal_types';\r\nimport { isPromise } from '../utils/async';\r\nexport var tryGetFromScope = function (requestScope, binding) {\r\n if ((binding.scope === BindingScopeEnum.Singleton) && binding.activated) {\r\n return binding.cache;\r\n }\r\n if (binding.scope === BindingScopeEnum.Request &&\r\n requestScope.has(binding.id)) {\r\n return requestScope.get(binding.id);\r\n }\r\n return null;\r\n};\r\nexport var saveToScope = function (requestScope, binding, result) {\r\n if (binding.scope === BindingScopeEnum.Singleton) {\r\n _saveToSingletonScope(binding, result);\r\n }\r\n if (binding.scope === BindingScopeEnum.Request) {\r\n _saveToRequestScope(requestScope, binding, result);\r\n }\r\n};\r\nvar _saveToRequestScope = function (requestScope, binding, result) {\r\n if (!requestScope.has(binding.id)) {\r\n requestScope.set(binding.id, result);\r\n }\r\n};\r\nvar _saveToSingletonScope = function (binding, result) {\r\n binding.cache = result;\r\n binding.activated = true;\r\n if (isPromise(result)) {\r\n void _saveAsyncResultToSingletonScope(binding, result);\r\n }\r\n};\r\nvar _saveAsyncResultToSingletonScope = function (binding, asyncResult) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n result = _a.sent();\r\n binding.cache = result;\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n binding.cache = null;\r\n binding.activated = false;\r\n throw ex_1;\r\n case 3: return [2];\r\n }\r\n });\r\n}); };\r\n","export var FactoryType;\r\n(function (FactoryType) {\r\n FactoryType[\"DynamicValue\"] = \"toDynamicValue\";\r\n FactoryType[\"Factory\"] = \"toFactory\";\r\n FactoryType[\"Provider\"] = \"toProvider\";\r\n})(FactoryType || (FactoryType = {}));\r\n","import { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { FactoryType } from './factory_type';\r\nexport var multiBindToService = function (container) {\r\n return function (service) {\r\n return function () {\r\n var types = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n types[_i] = arguments[_i];\r\n }\r\n return types.forEach(function (t) { return container.bind(t).toService(service); });\r\n };\r\n };\r\n};\r\nexport var ensureFullyBound = function (binding) {\r\n var boundValue = null;\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n boundValue = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n case BindingTypeEnum.Instance:\r\n boundValue = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.DynamicValue:\r\n boundValue = binding.dynamicValue;\r\n break;\r\n case BindingTypeEnum.Provider:\r\n boundValue = binding.provider;\r\n break;\r\n case BindingTypeEnum.Factory:\r\n boundValue = binding.factory;\r\n break;\r\n }\r\n if (boundValue === null) {\r\n var serviceIdentifierAsString = getServiceIdentifierAsString(binding.serviceIdentifier);\r\n throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + \" \" + serviceIdentifierAsString);\r\n }\r\n};\r\nexport var getFactoryDetails = function (binding) {\r\n switch (binding.type) {\r\n case BindingTypeEnum.Factory:\r\n return { factory: binding.factory, factoryType: FactoryType.Factory };\r\n case BindingTypeEnum.Provider:\r\n return { factory: binding.provider, factoryType: FactoryType.Provider };\r\n case BindingTypeEnum.DynamicValue:\r\n return { factory: binding.dynamicValue, factoryType: FactoryType.DynamicValue };\r\n default:\r\n throw new Error(\"Unexpected factory type \" + binding.type);\r\n }\r\n};\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR } from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nfunction _resolveRequests(childRequests, resolveRequest) {\r\n return childRequests.reduce(function (resolvedRequests, childRequest) {\r\n var injection = resolveRequest(childRequest);\r\n var targetType = childRequest.target.type;\r\n if (targetType === TargetTypeEnum.ConstructorArgument) {\r\n resolvedRequests.constructorInjections.push(injection);\r\n }\r\n else {\r\n resolvedRequests.propertyRequests.push(childRequest);\r\n resolvedRequests.propertyInjections.push(injection);\r\n }\r\n if (!resolvedRequests.isAsync) {\r\n resolvedRequests.isAsync = isPromiseOrContainsPromise(injection);\r\n }\r\n return resolvedRequests;\r\n }, { constructorInjections: [], propertyInjections: [], propertyRequests: [], isAsync: false });\r\n}\r\nfunction _createInstance(constr, childRequests, resolveRequest) {\r\n var result;\r\n if (childRequests.length > 0) {\r\n var resolved = _resolveRequests(childRequests, resolveRequest);\r\n var createInstanceWithInjectionsArg = __assign(__assign({}, resolved), { constr: constr });\r\n if (resolved.isAsync) {\r\n result = createInstanceWithInjectionsAsync(createInstanceWithInjectionsArg);\r\n }\r\n else {\r\n result = createInstanceWithInjections(createInstanceWithInjectionsArg);\r\n }\r\n }\r\n else {\r\n result = new constr();\r\n }\r\n return result;\r\n}\r\nfunction createInstanceWithInjections(args) {\r\n var _a;\r\n var instance = new ((_a = args.constr).bind.apply(_a, __spreadArray([void 0], args.constructorInjections, false)))();\r\n args.propertyRequests.forEach(function (r, index) {\r\n var property = r.target.identifier;\r\n var injection = args.propertyInjections[index];\r\n if (!r.target.isOptional() || injection !== undefined) {\r\n instance[property] = injection;\r\n }\r\n });\r\n return instance;\r\n}\r\nfunction createInstanceWithInjectionsAsync(args) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var constructorInjections, propertyInjections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, possiblyWaitInjections(args.constructorInjections)];\r\n case 1:\r\n constructorInjections = _a.sent();\r\n return [4, possiblyWaitInjections(args.propertyInjections)];\r\n case 2:\r\n propertyInjections = _a.sent();\r\n return [2, createInstanceWithInjections(__assign(__assign({}, args), { constructorInjections: constructorInjections, propertyInjections: propertyInjections }))];\r\n }\r\n });\r\n });\r\n}\r\nfunction possiblyWaitInjections(possiblePromiseinjections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var injections, _i, possiblePromiseinjections_1, injection;\r\n return __generator(this, function (_a) {\r\n injections = [];\r\n for (_i = 0, possiblePromiseinjections_1 = possiblePromiseinjections; _i < possiblePromiseinjections_1.length; _i++) {\r\n injection = possiblePromiseinjections_1[_i];\r\n if (Array.isArray(injection)) {\r\n injections.push(Promise.all(injection));\r\n }\r\n else {\r\n injections.push(injection);\r\n }\r\n }\r\n return [2, Promise.all(injections)];\r\n });\r\n });\r\n}\r\nfunction _getInstanceAfterPostConstruct(constr, result) {\r\n var postConstructResult = _postConstruct(constr, result);\r\n if (isPromise(postConstructResult)) {\r\n return postConstructResult.then(function () { return result; });\r\n }\r\n else {\r\n return result;\r\n }\r\n}\r\nfunction _postConstruct(constr, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr);\r\n try {\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error(POST_CONSTRUCT_ERROR(constr.name, e.message));\r\n }\r\n }\r\n }\r\n}\r\nfunction _validateInstanceResolution(binding, constr) {\r\n if (binding.scope !== BindingScopeEnum.Singleton) {\r\n _throwIfHandlingDeactivation(binding, constr);\r\n }\r\n}\r\nfunction _throwIfHandlingDeactivation(binding, constr) {\r\n var scopeErrorMessage = \"Class cannot be instantiated in \" + (binding.scope === BindingScopeEnum.Request ?\r\n 'request' :\r\n 'transient') + \" scope.\";\r\n if (typeof binding.onDeactivation === 'function') {\r\n throw new Error(ON_DEACTIVATION_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constr)) {\r\n throw new Error(PRE_DESTROY_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n}\r\nfunction resolveInstance(binding, constr, childRequests, resolveRequest) {\r\n _validateInstanceResolution(binding, constr);\r\n var result = _createInstance(constr, childRequests, resolveRequest);\r\n if (isPromise(result)) {\r\n return result.then(function (resolvedResult) { return _getInstanceAfterPostConstruct(constr, resolvedResult); });\r\n }\r\n else {\r\n return _getInstanceAfterPostConstruct(constr, result);\r\n }\r\n}\r\nexport { resolveInstance };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { getBindingDictionary } from '../planning/planner';\r\nimport { saveToScope, tryGetFromScope } from '../scope/scope';\r\nimport { isPromise } from '../utils/async';\r\nimport { getFactoryDetails, ensureFullyBound } from '../utils/binding_utils';\r\nimport { tryAndThrowErrorIfStackOverflow } from '../utils/exceptions';\r\nimport { resolveInstance } from './instantiation';\r\nvar _resolveRequest = function (requestScope) {\r\n return function (request) {\r\n request.parentContext.setCurrentRequest(request);\r\n var bindings = request.bindings;\r\n var childRequests = request.childRequests;\r\n var targetIsAnArray = request.target && request.target.isArray();\r\n var targetParentIsNotAnArray = !request.parentRequest ||\r\n !request.parentRequest.target ||\r\n !request.target ||\r\n !request.parentRequest.target.matchesArray(request.target.serviceIdentifier);\r\n if (targetIsAnArray && targetParentIsNotAnArray) {\r\n return childRequests.map(function (childRequest) {\r\n var _f = _resolveRequest(requestScope);\r\n return _f(childRequest);\r\n });\r\n }\r\n else {\r\n if (request.target.isOptional() && bindings.length === 0) {\r\n return undefined;\r\n }\r\n var binding = bindings[0];\r\n return _resolveBinding(requestScope, request, binding);\r\n }\r\n };\r\n};\r\nvar _resolveFactoryFromBinding = function (binding, context) {\r\n var factoryDetails = getFactoryDetails(binding);\r\n return tryAndThrowErrorIfStackOverflow(function () { return factoryDetails.factory.bind(binding)(context); }, function () { return new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryDetails.factoryType, context.currentRequest.serviceIdentifier.toString())); });\r\n};\r\nvar _getResolvedFromBinding = function (requestScope, request, binding) {\r\n var result;\r\n var childRequests = request.childRequests;\r\n ensureFullyBound(binding);\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n result = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n result = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.Instance:\r\n result = resolveInstance(binding, binding.implementationType, childRequests, _resolveRequest(requestScope));\r\n break;\r\n default:\r\n result = _resolveFactoryFromBinding(binding, request.parentContext);\r\n }\r\n return result;\r\n};\r\nvar _resolveInScope = function (requestScope, binding, resolveFromBinding) {\r\n var result = tryGetFromScope(requestScope, binding);\r\n if (result !== null) {\r\n return result;\r\n }\r\n result = resolveFromBinding();\r\n saveToScope(requestScope, binding, result);\r\n return result;\r\n};\r\nvar _resolveBinding = function (requestScope, request, binding) {\r\n return _resolveInScope(requestScope, binding, function () {\r\n var result = _getResolvedFromBinding(requestScope, request, binding);\r\n if (isPromise(result)) {\r\n result = result.then(function (resolved) { return _onActivation(request, binding, resolved); });\r\n }\r\n else {\r\n result = _onActivation(request, binding, result);\r\n }\r\n return result;\r\n });\r\n};\r\nfunction _onActivation(request, binding, resolved) {\r\n var result = _bindingActivation(request.parentContext, binding, resolved);\r\n var containersIterator = _getContainersIterator(request.parentContext.container);\r\n var container;\r\n var containersIteratorResult = containersIterator.next();\r\n do {\r\n container = containersIteratorResult.value;\r\n var context_1 = request.parentContext;\r\n var serviceIdentifier = request.serviceIdentifier;\r\n var activationsIterator = _getContainerActivationsForService(container, serviceIdentifier);\r\n if (isPromise(result)) {\r\n result = _activateContainerAsync(activationsIterator, context_1, result);\r\n }\r\n else {\r\n result = _activateContainer(activationsIterator, context_1, result);\r\n }\r\n containersIteratorResult = containersIterator.next();\r\n } while (containersIteratorResult.done !== true && !getBindingDictionary(container).hasKey(request.serviceIdentifier));\r\n return result;\r\n}\r\nvar _bindingActivation = function (context, binding, previousResult) {\r\n var result;\r\n if (typeof binding.onActivation === 'function') {\r\n result = binding.onActivation(context, previousResult);\r\n }\r\n else {\r\n result = previousResult;\r\n }\r\n return result;\r\n};\r\nvar _activateContainer = function (activationsIterator, context, result) {\r\n var activation = activationsIterator.next();\r\n while (!activation.done) {\r\n result = activation.value(context, result);\r\n if (isPromise(result)) {\r\n return _activateContainerAsync(activationsIterator, context, result);\r\n }\r\n activation = activationsIterator.next();\r\n }\r\n return result;\r\n};\r\nvar _activateContainerAsync = function (activationsIterator, context, resultPromise) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, activation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, resultPromise];\r\n case 1:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n _a.label = 2;\r\n case 2:\r\n if (!!activation.done) return [3, 4];\r\n return [4, activation.value(context, result)];\r\n case 3:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n return [3, 2];\r\n case 4: return [2, result];\r\n }\r\n });\r\n}); };\r\nvar _getContainerActivationsForService = function (container, serviceIdentifier) {\r\n var activations = container._activations;\r\n return activations.hasKey(serviceIdentifier) ? activations.get(serviceIdentifier).values() : [].values();\r\n};\r\nvar _getContainersIterator = function (container) {\r\n var containersStack = [container];\r\n var parent = container.parent;\r\n while (parent !== null) {\r\n containersStack.push(parent);\r\n parent = parent.parent;\r\n }\r\n var getNextContainer = function () {\r\n var nextContainer = containersStack.pop();\r\n if (nextContainer !== undefined) {\r\n return { done: false, value: nextContainer };\r\n }\r\n else {\r\n return { done: true, value: undefined };\r\n }\r\n };\r\n var containersIterator = {\r\n next: getNextContainer,\r\n };\r\n return containersIterator;\r\n};\r\nfunction resolve(context) {\r\n var _f = _resolveRequest(context.plan.rootRequest.requestScope);\r\n return _f(context.plan.rootRequest);\r\n}\r\nexport { resolve };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { Metadata } from '../planning/metadata';\r\nvar traverseAncerstors = function (request, constraint) {\r\n var parent = request.parentRequest;\r\n if (parent !== null) {\r\n return constraint(parent) ? true : traverseAncerstors(parent, constraint);\r\n }\r\n else {\r\n return false;\r\n }\r\n};\r\nvar taggedConstraint = function (key) { return function (value) {\r\n var constraint = function (request) {\r\n return request !== null && request.target !== null && request.target.matchesTag(key)(value);\r\n };\r\n constraint.metaData = new Metadata(key, value);\r\n return constraint;\r\n}; };\r\nvar namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG);\r\nvar typeConstraint = function (type) { return function (request) {\r\n var binding = null;\r\n if (request !== null) {\r\n binding = request.bindings[0];\r\n if (typeof type === 'string') {\r\n var serviceIdentifier = binding.serviceIdentifier;\r\n return serviceIdentifier === type;\r\n }\r\n else {\r\n var constructor = request.bindings[0].implementationType;\r\n return type === constructor;\r\n }\r\n }\r\n return false;\r\n}; };\r\nexport { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { namedConstraint, taggedConstraint, traverseAncerstors, typeConstraint } from './constraint_helpers';\r\nvar BindingWhenSyntax = (function () {\r\n function BindingWhenSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingWhenSyntax.prototype.when = function (constraint) {\r\n this._binding.constraint = constraint;\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetNamed = function (name) {\r\n this._binding.constraint = namedConstraint(name);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetIsDefault = function () {\r\n this._binding.constraint = function (request) {\r\n if (request === null) {\r\n return false;\r\n }\r\n var targetIsDefault = (request.target !== null) &&\r\n (!request.target.isNamed()) &&\r\n (!request.target.isTagged());\r\n return targetIsDefault;\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n this._binding.constraint = taggedConstraint(tag)(value);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenInjectedInto = function (parent) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && typeConstraint(parent)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && namedConstraint(name)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && taggedConstraint(tag)(value)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n return BindingWhenSyntax;\r\n}());\r\nexport { BindingWhenSyntax };\r\n","import { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingOnSyntax = (function () {\r\n function BindingOnSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingOnSyntax.prototype.onActivation = function (handler) {\r\n this._binding.onActivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n BindingOnSyntax.prototype.onDeactivation = function (handler) {\r\n this._binding.onDeactivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n return BindingOnSyntax;\r\n}());\r\nexport { BindingOnSyntax };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingWhenOnSyntax = (function () {\r\n function BindingWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n }\r\n BindingWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingWhenOnSyntax;\r\n}());\r\nexport { BindingWhenOnSyntax };\r\n","import { BindingScopeEnum } from '../constants/literal_types';\r\nimport { BindingWhenOnSyntax } from './binding_when_on_syntax';\r\nvar BindingInSyntax = (function () {\r\n function BindingInSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingInSyntax.prototype.inRequestScope = function () {\r\n this._binding.scope = BindingScopeEnum.Request;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inSingletonScope = function () {\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inTransientScope = function () {\r\n this._binding.scope = BindingScopeEnum.Transient;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n return BindingInSyntax;\r\n}());\r\nexport { BindingInSyntax };\r\n","import { BindingInSyntax } from './binding_in_syntax';\r\nimport { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingInWhenOnSyntax = (function () {\r\n function BindingInWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n this._bindingInSyntax = new BindingInSyntax(binding);\r\n }\r\n BindingInWhenOnSyntax.prototype.inRequestScope = function () {\r\n return this._bindingInSyntax.inRequestScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inSingletonScope = function () {\r\n return this._bindingInSyntax.inSingletonScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inTransientScope = function () {\r\n return this._bindingInSyntax.inTransientScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingInWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingInWhenOnSyntax;\r\n}());\r\nexport { BindingInWhenOnSyntax };\r\n","import * as ERROR_MSGS from \"../constants/error_msgs\";\r\nimport { BindingScopeEnum, BindingTypeEnum } from \"../constants/literal_types\";\r\nimport { BindingInWhenOnSyntax } from \"./binding_in_when_on_syntax\";\r\nimport { BindingWhenOnSyntax } from \"./binding_when_on_syntax\";\r\nvar BindingToSyntax = (function () {\r\n function BindingToSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingToSyntax.prototype.to = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Instance;\r\n this._binding.implementationType = constructor;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toSelf = function () {\r\n if (typeof this._binding.serviceIdentifier !== \"function\") {\r\n throw new Error(\"\" + ERROR_MSGS.INVALID_TO_SELF_VALUE);\r\n }\r\n var self = this._binding.serviceIdentifier;\r\n return this.to(self);\r\n };\r\n BindingToSyntax.prototype.toConstantValue = function (value) {\r\n this._binding.type = BindingTypeEnum.ConstantValue;\r\n this._binding.cache = value;\r\n this._binding.dynamicValue = null;\r\n this._binding.implementationType = null;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toDynamicValue = function (func) {\r\n this._binding.type = BindingTypeEnum.DynamicValue;\r\n this._binding.cache = null;\r\n this._binding.dynamicValue = func;\r\n this._binding.implementationType = null;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toConstructor = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Constructor;\r\n this._binding.implementationType = constructor;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFactory = function (factory) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = factory;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFunction = function (func) {\r\n if (typeof func !== \"function\") {\r\n throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);\r\n }\r\n var bindingWhenOnSyntax = this.toConstantValue(func);\r\n this._binding.type = BindingTypeEnum.Function;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return bindingWhenOnSyntax;\r\n };\r\n BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n var autofactory = function () { return context.container.get(serviceIdentifier); };\r\n return autofactory;\r\n };\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toAutoNamedFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n return function (named) { return context.container.getNamed(serviceIdentifier, named); };\r\n };\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toProvider = function (provider) {\r\n this._binding.type = BindingTypeEnum.Provider;\r\n this._binding.provider = provider;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toService = function (service) {\r\n this.toDynamicValue(function (context) { return context.container.get(service); });\r\n };\r\n return BindingToSyntax;\r\n}());\r\nexport { BindingToSyntax };\r\n","var ContainerSnapshot = (function () {\r\n function ContainerSnapshot() {\r\n }\r\n ContainerSnapshot.of = function (bindings, middleware, activations, deactivations, moduleActivationStore) {\r\n var snapshot = new ContainerSnapshot();\r\n snapshot.bindings = bindings;\r\n snapshot.middleware = middleware;\r\n snapshot.deactivations = deactivations;\r\n snapshot.activations = activations;\r\n snapshot.moduleActivationStore = moduleActivationStore;\r\n return snapshot;\r\n };\r\n return ContainerSnapshot;\r\n}());\r\nexport { ContainerSnapshot };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { isClonable } from '../utils/clonable';\r\nvar Lookup = (function () {\r\n function Lookup() {\r\n this._map = new Map();\r\n }\r\n Lookup.prototype.getMap = function () {\r\n return this._map;\r\n };\r\n Lookup.prototype.add = function (serviceIdentifier, value) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (value === null || value === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n entry.push(value);\r\n }\r\n else {\r\n this._map.set(serviceIdentifier, [value]);\r\n }\r\n };\r\n Lookup.prototype.get = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n return entry;\r\n }\r\n else {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.remove = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (!this._map.delete(serviceIdentifier)) {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.removeIntersection = function (lookup) {\r\n var _this = this;\r\n this.traverse(function (serviceIdentifier, value) {\r\n var lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;\r\n if (lookupActivations !== undefined) {\r\n var filteredValues = value.filter(function (lookupValue) {\r\n return !lookupActivations.some(function (moduleActivation) { return lookupValue === moduleActivation; });\r\n });\r\n _this._setValue(serviceIdentifier, filteredValues);\r\n }\r\n });\r\n };\r\n Lookup.prototype.removeByCondition = function (condition) {\r\n var _this = this;\r\n var removals = [];\r\n this._map.forEach(function (entries, key) {\r\n var updatedEntries = [];\r\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n var entry = entries_1[_i];\r\n var remove = condition(entry);\r\n if (remove) {\r\n removals.push(entry);\r\n }\r\n else {\r\n updatedEntries.push(entry);\r\n }\r\n }\r\n _this._setValue(key, updatedEntries);\r\n });\r\n return removals;\r\n };\r\n Lookup.prototype.hasKey = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n return this._map.has(serviceIdentifier);\r\n };\r\n Lookup.prototype.clone = function () {\r\n var copy = new Lookup();\r\n this._map.forEach(function (value, key) {\r\n value.forEach(function (b) { return copy.add(key, isClonable(b) ? b.clone() : b); });\r\n });\r\n return copy;\r\n };\r\n Lookup.prototype.traverse = function (func) {\r\n this._map.forEach(function (value, key) {\r\n func(key, value);\r\n });\r\n };\r\n Lookup.prototype._setValue = function (serviceIdentifier, value) {\r\n if (value.length > 0) {\r\n this._map.set(serviceIdentifier, value);\r\n }\r\n else {\r\n this._map.delete(serviceIdentifier);\r\n }\r\n };\r\n return Lookup;\r\n}());\r\nexport { Lookup };\r\n","function isClonable(obj) {\r\n return (typeof obj === 'object')\r\n && (obj !== null)\r\n && ('clone' in obj)\r\n && typeof obj.clone === 'function';\r\n}\r\nexport { isClonable };\r\n","import { Lookup } from './lookup';\r\nvar ModuleActivationStore = (function () {\r\n function ModuleActivationStore() {\r\n this._map = new Map();\r\n }\r\n ModuleActivationStore.prototype.remove = function (moduleId) {\r\n if (this._map.has(moduleId)) {\r\n var handlers = this._map.get(moduleId);\r\n this._map.delete(moduleId);\r\n return handlers;\r\n }\r\n return this._getEmptyHandlersStore();\r\n };\r\n ModuleActivationStore.prototype.addDeactivation = function (moduleId, serviceIdentifier, onDeactivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onDeactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n ModuleActivationStore.prototype.addActivation = function (moduleId, serviceIdentifier, onActivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onActivations.add(serviceIdentifier, onActivation);\r\n };\r\n ModuleActivationStore.prototype.clone = function () {\r\n var clone = new ModuleActivationStore();\r\n this._map.forEach(function (handlersStore, moduleId) {\r\n clone._map.set(moduleId, {\r\n onActivations: handlersStore.onActivations.clone(),\r\n onDeactivations: handlersStore.onDeactivations.clone(),\r\n });\r\n });\r\n return clone;\r\n };\r\n ModuleActivationStore.prototype._getModuleActivationHandlers = function (moduleId) {\r\n var moduleActivationHandlers = this._map.get(moduleId);\r\n if (moduleActivationHandlers === undefined) {\r\n moduleActivationHandlers = this._getEmptyHandlersStore();\r\n this._map.set(moduleId, moduleActivationHandlers);\r\n }\r\n return moduleActivationHandlers;\r\n };\r\n ModuleActivationStore.prototype._getEmptyHandlersStore = function () {\r\n var handlersStore = {\r\n onActivations: new Lookup(),\r\n onDeactivations: new Lookup()\r\n };\r\n return handlersStore;\r\n };\r\n return ModuleActivationStore;\r\n}());\r\nexport { ModuleActivationStore };\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { Binding } from '../bindings/binding';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { MetadataReader } from '../planning/metadata_reader';\r\nimport { createMockRequest, getBindingDictionary, plan } from '../planning/planner';\r\nimport { resolve } from '../resolution/resolver';\r\nimport { BindingToSyntax } from '../syntax/binding_to_syntax';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nimport { id } from '../utils/id';\r\nimport { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport { ContainerSnapshot } from './container_snapshot';\r\nimport { Lookup } from './lookup';\r\nimport { ModuleActivationStore } from './module_activation_store';\r\nvar Container = (function () {\r\n function Container(containerOptions) {\r\n var options = containerOptions || {};\r\n if (typeof options !== 'object') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);\r\n }\r\n if (options.defaultScope === undefined) {\r\n options.defaultScope = BindingScopeEnum.Transient;\r\n }\r\n else if (options.defaultScope !== BindingScopeEnum.Singleton &&\r\n options.defaultScope !== BindingScopeEnum.Transient &&\r\n options.defaultScope !== BindingScopeEnum.Request) {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);\r\n }\r\n if (options.autoBindInjectable === undefined) {\r\n options.autoBindInjectable = false;\r\n }\r\n else if (typeof options.autoBindInjectable !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);\r\n }\r\n if (options.skipBaseClassChecks === undefined) {\r\n options.skipBaseClassChecks = false;\r\n }\r\n else if (typeof options.skipBaseClassChecks !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);\r\n }\r\n this.options = {\r\n autoBindInjectable: options.autoBindInjectable,\r\n defaultScope: options.defaultScope,\r\n skipBaseClassChecks: options.skipBaseClassChecks\r\n };\r\n this.id = id();\r\n this._bindingDictionary = new Lookup();\r\n this._snapshots = [];\r\n this._middleware = null;\r\n this._activations = new Lookup();\r\n this._deactivations = new Lookup();\r\n this.parent = null;\r\n this._metadataReader = new MetadataReader();\r\n this._moduleActivationStore = new ModuleActivationStore();\r\n }\r\n Container.merge = function (container1, container2) {\r\n var containers = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n containers[_i - 2] = arguments[_i];\r\n }\r\n var container = new Container();\r\n var targetContainers = __spreadArray([container1, container2], containers, true).map(function (targetContainer) { return getBindingDictionary(targetContainer); });\r\n var bindingDictionary = getBindingDictionary(container);\r\n function copyDictionary(origin, destination) {\r\n origin.traverse(function (_key, value) {\r\n value.forEach(function (binding) {\r\n destination.add(binding.serviceIdentifier, binding.clone());\r\n });\r\n });\r\n }\r\n targetContainers.forEach(function (targetBindingDictionary) {\r\n copyDictionary(targetBindingDictionary, bindingDictionary);\r\n });\r\n return container;\r\n };\r\n Container.prototype.load = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n var getHelpers = this._getContainerModuleHelpersFactory();\r\n for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {\r\n var currentModule = modules_1[_a];\r\n var containerModuleHelpers = getHelpers(currentModule.id);\r\n currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);\r\n }\r\n };\r\n Container.prototype.loadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n getHelpers = this._getContainerModuleHelpersFactory();\r\n _a = 0, modules_2 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_2.length)) return [3, 4];\r\n currentModule = modules_2[_a];\r\n containerModuleHelpers = getHelpers(currentModule.id);\r\n return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unload = function () {\r\n var _this = this;\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n modules.forEach(function (module) {\r\n var deactivations = _this._removeModuleBindings(module.id);\r\n _this._deactivateSingletons(deactivations);\r\n _this._removeModuleHandlers(module.id);\r\n });\r\n };\r\n Container.prototype.unloadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, modules_3, module_1, deactivations;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = 0, modules_3 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_3.length)) return [3, 4];\r\n module_1 = modules_3[_a];\r\n deactivations = this._removeModuleBindings(module_1.id);\r\n return [4, this._deactivateSingletonsAsync(deactivations)];\r\n case 2:\r\n _b.sent();\r\n this._removeModuleHandlers(module_1.id);\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.bind = function (serviceIdentifier) {\r\n var scope = this.options.defaultScope || BindingScopeEnum.Transient;\r\n var binding = new Binding(serviceIdentifier, scope);\r\n this._bindingDictionary.add(serviceIdentifier, binding);\r\n return new BindingToSyntax(binding);\r\n };\r\n Container.prototype.rebind = function (serviceIdentifier) {\r\n this.unbind(serviceIdentifier);\r\n return this.bind(serviceIdentifier);\r\n };\r\n Container.prototype.rebindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, this.unbindAsync(serviceIdentifier)];\r\n case 1:\r\n _a.sent();\r\n return [2, this.bind(serviceIdentifier)];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbind = function (serviceIdentifier) {\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n this._deactivateSingletons(bindings);\r\n }\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n };\r\n Container.prototype.unbindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var bindings;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];\r\n bindings = this._bindingDictionary.get(serviceIdentifier);\r\n return [4, this._deactivateSingletonsAsync(bindings)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbindAll = function () {\r\n var _this = this;\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n _this._deactivateSingletons(value);\r\n });\r\n this._bindingDictionary = new Lookup();\r\n };\r\n Container.prototype.unbindAllAsync = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var promises;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n promises = [];\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n promises.push(_this._deactivateSingletonsAsync(value));\r\n });\r\n return [4, Promise.all(promises)];\r\n case 1:\r\n _a.sent();\r\n this._bindingDictionary = new Lookup();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.onActivation = function (serviceIdentifier, onActivation) {\r\n this._activations.add(serviceIdentifier, onActivation);\r\n };\r\n Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {\r\n this._deactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n Container.prototype.isBound = function (serviceIdentifier) {\r\n var bound = this._bindingDictionary.hasKey(serviceIdentifier);\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBound(serviceIdentifier);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.isCurrentBound = function (serviceIdentifier) {\r\n return this._bindingDictionary.hasKey(serviceIdentifier);\r\n };\r\n Container.prototype.isBoundNamed = function (serviceIdentifier, named) {\r\n return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {\r\n var bound = false;\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n var request_1 = createMockRequest(this, serviceIdentifier, key, value);\r\n bound = bindings.some(function (b) { return b.constraint(request_1); });\r\n }\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBoundTagged(serviceIdentifier, key, value);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.snapshot = function () {\r\n this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));\r\n };\r\n Container.prototype.restore = function () {\r\n var snapshot = this._snapshots.pop();\r\n if (snapshot === undefined) {\r\n throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);\r\n }\r\n this._bindingDictionary = snapshot.bindings;\r\n this._activations = snapshot.activations;\r\n this._deactivations = snapshot.deactivations;\r\n this._middleware = snapshot.middleware;\r\n this._moduleActivationStore = snapshot.moduleActivationStore;\r\n };\r\n Container.prototype.createChild = function (containerOptions) {\r\n var child = new Container(containerOptions || this.options);\r\n child.parent = this;\r\n return child;\r\n };\r\n Container.prototype.applyMiddleware = function () {\r\n var middlewares = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n middlewares[_i] = arguments[_i];\r\n }\r\n var initial = (this._middleware) ? this._middleware : this._planAndResolve();\r\n this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);\r\n };\r\n Container.prototype.applyCustomMetadataReader = function (metadataReader) {\r\n this._metadataReader = metadataReader;\r\n };\r\n Container.prototype.get = function (serviceIdentifier) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getNamed = function (serviceIdentifier, named) {\r\n return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getNamedAsync = function (serviceIdentifier, named) {\r\n return this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAll = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllAsync = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllNamed = function (serviceIdentifier, named) {\r\n return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {\r\n return this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.resolve = function (constructorFunction) {\r\n var isBound = this.isBound(constructorFunction);\r\n if (!isBound) {\r\n this.bind(constructorFunction).toSelf();\r\n }\r\n var resolved = this.get(constructorFunction);\r\n if (!isBound) {\r\n this.unbind(constructorFunction);\r\n }\r\n return resolved;\r\n };\r\n Container.prototype._preDestroy = function (constructor, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n };\r\n Container.prototype._removeModuleHandlers = function (moduleId) {\r\n var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);\r\n this._activations.removeIntersection(moduleActivationsHandlers.onActivations);\r\n this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);\r\n };\r\n Container.prototype._removeModuleBindings = function (moduleId) {\r\n return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });\r\n };\r\n Container.prototype._deactivate = function (binding, instance) {\r\n var _this = this;\r\n var constructor = Object.getPrototypeOf(instance).constructor;\r\n try {\r\n if (this._deactivations.hasKey(binding.serviceIdentifier)) {\r\n var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());\r\n if (isPromise(result)) {\r\n return this._handleDeactivationError(result.then(function () { return _this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor); }), constructor);\r\n }\r\n }\r\n var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);\r\n if (isPromise(propagateDeactivationResult)) {\r\n return this._handleDeactivationError(propagateDeactivationResult, constructor);\r\n }\r\n }\r\n catch (ex) {\r\n if (ex instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));\r\n }\r\n }\r\n };\r\n Container.prototype._handleDeactivationError = function (asyncResult, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n _a.sent();\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n if (ex_1 instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));\r\n }\r\n return [3, 3];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {\r\n var _this = this;\r\n var deactivation = deactivationsIterator.next();\r\n while (deactivation.value) {\r\n var result = deactivation.value(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () {\r\n return _this._deactivateContainerAsync(instance, deactivationsIterator);\r\n });\r\n }\r\n deactivation = deactivationsIterator.next();\r\n }\r\n };\r\n Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var deactivation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n deactivation = deactivationsIterator.next();\r\n _a.label = 1;\r\n case 1:\r\n if (!deactivation.value) return [3, 3];\r\n return [4, deactivation.value(instance)];\r\n case 2:\r\n _a.sent();\r\n deactivation = deactivationsIterator.next();\r\n return [3, 1];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._getContainerModuleHelpersFactory = function () {\r\n var _this = this;\r\n var setModuleId = function (bindingToSyntax, moduleId) {\r\n bindingToSyntax._binding.moduleId = moduleId;\r\n };\r\n var getBindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.bind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getUnbindFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbind(serviceIdentifier);\r\n };\r\n };\r\n var getUnbindAsyncFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbindAsync(serviceIdentifier);\r\n };\r\n };\r\n var getIsboundFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.isBound(serviceIdentifier);\r\n };\r\n };\r\n var getRebindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.rebind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getOnActivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onActivation) {\r\n _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);\r\n _this.onActivation(serviceIdentifier, onActivation);\r\n };\r\n };\r\n var getOnDeactivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onDeactivation) {\r\n _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);\r\n _this.onDeactivation(serviceIdentifier, onDeactivation);\r\n };\r\n };\r\n return function (mId) { return ({\r\n bindFunction: getBindFunction(mId),\r\n isboundFunction: getIsboundFunction(),\r\n onActivationFunction: getOnActivationFunction(mId),\r\n onDeactivationFunction: getOnDeactivationFunction(mId),\r\n rebindFunction: getRebindFunction(mId),\r\n unbindFunction: getUnbindFunction(),\r\n unbindAsyncFunction: getUnbindAsyncFunction()\r\n }); };\r\n };\r\n Container.prototype._getAll = function (getArgs) {\r\n return Promise.all(this._get(getArgs));\r\n };\r\n Container.prototype._get = function (getArgs) {\r\n var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });\r\n if (this._middleware) {\r\n var middlewareResult = this._middleware(planAndResolveArgs);\r\n if (middlewareResult === undefined || middlewareResult === null) {\r\n throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);\r\n }\r\n return middlewareResult;\r\n }\r\n return this._planAndResolve()(planAndResolveArgs);\r\n };\r\n Container.prototype._getButThrowIfAsync = function (getArgs) {\r\n var result = this._get(getArgs);\r\n if (isPromiseOrContainsPromise(result)) {\r\n throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));\r\n }\r\n return result;\r\n };\r\n Container.prototype._getAllArgs = function (serviceIdentifier) {\r\n var getAllArgs = {\r\n avoidConstraints: true,\r\n isMultiInject: true,\r\n serviceIdentifier: serviceIdentifier,\r\n };\r\n return getAllArgs;\r\n };\r\n Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {\r\n var getNotAllArgs = {\r\n avoidConstraints: false,\r\n isMultiInject: isMultiInject,\r\n serviceIdentifier: serviceIdentifier,\r\n key: key,\r\n value: value,\r\n };\r\n return getNotAllArgs;\r\n };\r\n Container.prototype._planAndResolve = function () {\r\n var _this = this;\r\n return function (args) {\r\n var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);\r\n context = args.contextInterceptor(context);\r\n var result = resolve(context);\r\n return result;\r\n };\r\n };\r\n Container.prototype._deactivateIfSingleton = function (binding) {\r\n var _this = this;\r\n if (!binding.activated) {\r\n return;\r\n }\r\n if (isPromise(binding.cache)) {\r\n return binding.cache.then(function (resolved) { return _this._deactivate(binding, resolved); });\r\n }\r\n return this._deactivate(binding, binding.cache);\r\n };\r\n Container.prototype._deactivateSingletons = function (bindings) {\r\n for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n var binding = bindings_1[_i];\r\n var result = this._deactivateIfSingleton(binding);\r\n if (isPromise(result)) {\r\n throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);\r\n }\r\n }\r\n };\r\n Container.prototype._deactivateSingletonsAsync = function (bindings) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, Promise.all(bindings.map(function (b) { return _this._deactivateIfSingleton(b); }))];\r\n case 1:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {\r\n if (this.parent) {\r\n return this._deactivate.bind(this.parent)(binding, instance);\r\n }\r\n else {\r\n return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);\r\n }\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.parent) return [3, 2];\r\n return [4, this._deactivate.bind(this.parent)(binding, instance)];\r\n case 1:\r\n _a.sent();\r\n return [3, 4];\r\n case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];\r\n case 3:\r\n _a.sent();\r\n _a.label = 4;\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {\r\n try {\r\n this._bindingDictionary.remove(serviceIdentifier);\r\n }\r\n catch (e) {\r\n throw new Error(ERROR_MSGS.CANNOT_UNBIND + \" \" + getServiceIdentifierAsString(serviceIdentifier));\r\n }\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {\r\n var _this = this;\r\n if (typeof binding.onDeactivation === 'function') {\r\n var result = binding.onDeactivation(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () { return _this._preDestroy(constructor, instance); });\r\n }\r\n }\r\n return this._preDestroy(constructor, instance);\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(typeof binding.onDeactivation === 'function')) return [3, 2];\r\n return [4, binding.onDeactivation(instance)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [4, this._preDestroy(constructor, instance)];\r\n case 3:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n return Container;\r\n}());\r\nexport { Container };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFirstArrayDuplicate } from '../utils/js';\r\nfunction targetIsConstructorFunction(target) {\r\n return target.prototype !== undefined;\r\n}\r\nfunction _throwIfMethodParameter(parameterName) {\r\n if (parameterName !== undefined) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n}\r\nfunction tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {\r\n _throwIfMethodParameter(parameterName);\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);\r\n}\r\nfunction tagProperty(annotationTarget, propertyName, metadata) {\r\n if (targetIsConstructorFunction(annotationTarget)) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED_PROP, annotationTarget.constructor, propertyName, metadata);\r\n}\r\nfunction _ensureNoMetadataKeyDuplicates(metadata) {\r\n var metadatas = [];\r\n if (Array.isArray(metadata)) {\r\n metadatas = metadata;\r\n var duplicate = getFirstArrayDuplicate(metadatas.map(function (md) { return md.key; }));\r\n if (duplicate !== undefined) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + duplicate.toString());\r\n }\r\n }\r\n else {\r\n metadatas = [metadata];\r\n }\r\n return metadatas;\r\n}\r\nfunction _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {\r\n var metadatas = _ensureNoMetadataKeyDuplicates(metadata);\r\n var paramsOrPropertiesMetadata = {};\r\n if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) {\r\n paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget);\r\n }\r\n var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];\r\n if (paramOrPropertyMetadata === undefined) {\r\n paramOrPropertyMetadata = [];\r\n }\r\n else {\r\n var _loop_1 = function (m) {\r\n if (metadatas.some(function (md) { return md.key === m.key; })) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + m.key.toString());\r\n }\r\n };\r\n for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) {\r\n var m = paramOrPropertyMetadata_1[_i];\r\n _loop_1(m);\r\n }\r\n }\r\n paramOrPropertyMetadata.push.apply(paramOrPropertyMetadata, metadatas);\r\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\r\n Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\r\n}\r\nfunction createTaggedDecorator(metadata) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (typeof indexOrPropertyDescriptor === 'number') {\r\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\r\n }\r\n else {\r\n tagProperty(target, targetKey, metadata);\r\n }\r\n };\r\n}\r\nfunction _decorate(decorators, target) {\r\n Reflect.decorate(decorators, target);\r\n}\r\nfunction _param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); };\r\n}\r\nfunction decorate(decorator, target, parameterIndexOrProperty) {\r\n if (typeof parameterIndexOrProperty === 'number') {\r\n _decorate([_param(parameterIndexOrProperty, decorator)], target);\r\n }\r\n else if (typeof parameterIndexOrProperty === 'string') {\r\n Reflect.decorate([decorator], target, parameterIndexOrProperty);\r\n }\r\n else {\r\n _decorate([decorator], target);\r\n }\r\n}\r\nexport { decorate, tagParameter, tagProperty, createTaggedDecorator };\r\n","export function getFirstArrayDuplicate(array) {\r\n var seenValues = new Set();\r\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\r\n var entry = array_1[_i];\r\n if (seenValues.has(entry)) {\r\n return entry;\r\n }\r\n else {\r\n seenValues.add(entry);\r\n }\r\n }\r\n return undefined;\r\n}\r\n","import * as ERRORS_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nfunction injectable() {\r\n return function (target) {\r\n if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) {\r\n throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR);\r\n }\r\n var types = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || [];\r\n Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types, target);\r\n return target;\r\n };\r\n}\r\nexport { injectable };\r\n","import { UNDEFINED_INJECT_ANNOTATION } from '../constants/error_msgs';\r\nimport { Metadata } from '../planning/metadata';\r\nimport { createTaggedDecorator } from './decorator_utils';\r\nexport function injectBase(metadataKey) {\r\n return function (serviceIdentifier) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (serviceIdentifier === undefined) {\r\n var className = typeof target === 'function' ? target.name : target.constructor.name;\r\n throw new Error(UNDEFINED_INJECT_ANNOTATION(className));\r\n }\r\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(target, targetKey, indexOrPropertyDescriptor);\r\n };\r\n };\r\n}\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar inject = injectBase(METADATA_KEY.INJECT_TAG);\r\nexport { inject };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar multiInject = injectBase(METADATA_KEY.MULTI_INJECT_TAG);\r\nexport { multiInject };\r\n","const TYPES = {\n AudioContextManager: Symbol.for(\"AudioContextManager\"),\n AudioEditor: Symbol.for(\"AudioEditor\"),\n AudioProcessor: Symbol.for(\"AudioProcessor\"),\n BufferManager: Symbol.for(\"BufferManager\"),\n FilterManager: Symbol.for(\"FilterManager\"),\n RendererManager: Symbol.for(\"RendererManager\"),\n SaveBufferManager: Symbol.for(\"SaveBufferManager\"),\n ConfigService: Symbol.for(\"ConfigService\"),\n EventEmitter: Symbol.for(\"EventEmitter\"),\n BufferPlayer: Symbol.for(\"BufferPlayer\"),\n BufferDecoderService: Symbol.for(\"BufferDecoderService\"),\n BufferFetcherService: Symbol.for(\"BufferFetcherService\"),\n AudioBuffersToFetch: Symbol.for(\"AudioBuffersToFetch\"),\n Renderers: Symbol.for(\"Renderers\"),\n Filters: Symbol.for(\"Filters\"),\n EntryPointFilter: Symbol.for(\"EntryPointFilter\"),\n VoiceRecorder: Symbol.for(\"VoiceRecorder\")\n};\n\nexport { TYPES };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum EventType {\n LOADING_BUFFERS = \"loadingBuffers\",\n LOADING_BUFFERS_ERROR = \"loadingBuffersError\",\n FETCHING_BUFFERS = \"fetchingBuffers\",\n FETCHING_BUFFERS_ERROR = \"fetchingBuffersError\",\n FINISHED_FETCHING_BUFFERS = \"finishedFetchingBuffers\",\n LOADED_BUFFERS = \"loadedBuffers\",\n COMPATIBILITY_MODE_AUTO_ENABLED = \"compatibilityModeAutoEnabled\",\n RENDERING_AUDIO_PROBLEM_DETECTED = \"renderingAudioProblemDetected\",\n AUDIO_RENDERING_FINISHED = \"audioRenderingFinished\",\n OFFLINE_AUDIO_RENDERING_FINISHED = \"offlineAudioRenderingFinished\",\n PLAYING_STOPPED = \"playingStopped\",\n PLAYING_STARTED = \"playingStarted\",\n PLAYING_FINISHED = \"playingFinished\",\n PLAYING_UPDATE = \"playingUpdate\",\n RECORDER_INIT = \"recorderInit\",\n RECORDER_SUCCESS = \"recorderSuccess\",\n RECORDER_ERROR = \"recorderError\",\n RECORDER_UPDATE_CONSTRAINTS = \"recorderUpdateConstraints\",\n RECORDER_RECORDING = \"recorderRecording\",\n RECORDER_STOPPED = \"recorderStopped\",\n RECORDER_PAUSED = \"recorderPaused\",\n RECORDER_RESETED = \"recorderReseted\",\n RECORDER_COUNT_UPDATE = \"recorderCountUpdate\",\n SAMPLE_RATE_CHANGED = \"sampleRateChanged\",\n DECODING_AUDIO_FILE = \"decodingAudioFile\",\n DECODED_AUDIO_FILE = \"decodedAudioFile\",\n ERROR_DECODING_AUDIO_FILE = \"errorDecodingAudioFile\",\n RECORDER_NOT_FOUND_ERROR = \"recorderNotFoundError\",\n RECORDER_UNKNOWN_ERROR = \"recorderUnknownError\",\n UPDATE_AUDIO_TREATMENT_PERCENT = \"updateAudioTreatmentPercent\",\n UPDATE_REMAINING_TIME_ESTIMATED = \"updateRemainingTimeEstimated\",\n CANCELLED_AND_LOADED_INITIAL_AUDIO = \"cancelledAndLoadedInitialAudio\",\n CANCELLING_AUDIO_PROCESSING = \"cancellingAudioProcessing\"\n};\n","const Constants = {\n AUDIO_EDITOR: \"audioEditor\",\n VOICE_RECORDER: \"voiceRecorder\",\n BUFFER_PLAYER: \"bufferPlayer\",\n AUDIO_CONTEXT_MANAGER: \"audioContextManager\",\n AUDIO_PROCESSOR: \"audioProcessor\",\n BUFFER_MANAGER: \"bufferManager\",\n FILTER_MANAGER: \"filterManager\",\n RENDERER_MANAGER: \"rendererManager\",\n SAVE_BUFFER_MANAGER: \"saveBufferManager\",\n EXPORT_WAV_COMMAND: \"exportWAV\",\n EXPORT_MP3_COMMAND: \"exportMP3\",\n AUDIO_WAV: \"audio/wav\",\n AUDIO_MP3: \"audio/mp3\",\n RECORD_COMMAND: \"record\",\n INIT_COMMAND: \"init\",\n FILTERS_NAMES: {\n REVERB: \"reverb\",\n ECHO: \"echo\",\n BASS_BOOST: \"bassboost\",\n BITCRUSHER: \"bitcrusher\",\n HIGH_PASS: \"highpass\",\n LIMITER: \"limiter\",\n LOW_PASS: \"lowpass\",\n PASSTHROUGH: \"passthroughfilter\",\n RETURN_AUDIO: \"returnAudio\",\n SOUNDTOUCH: \"soundtouch\",\n TELEPHONIZER: \"telephonizer\",\n VOCODER: \"vocoder\"\n },\n WORKLET_PATHS: {\n BITCRUSHER: \"BitCrusher.worklet.js\",\n LIMITER: \"Limiter.worklet.js\",\n SOUNDTOUCH: \"Soundtouch.worklet.js\",\n RECORDER_WORKLET: \"RecorderWorklet.js\",\n PASSTHROUGH: \"Passthrough.worklet.js\"\n },\n WORKLET_NAMES: {\n BITCRUSHER: \"bitcrusher-processor\",\n LIMITER: \"limiter-processor\",\n SOUNDTOUCH: \"soundtouch-worklet\",\n RECORDER_WORKLET: \"recorder-worklet\",\n PASSTHROUGH: \"passthrough\"\n },\n PREFERENCES_KEYS: {\n COMPATIBILITY_MODE_ENABLED: \"compatibility-mode-enabled\",\n COMPATIBILITY_MODE_CHECKED: \"compatibility-mode-checked\",\n ENABLE_AUDIO_WORKLET: \"enable-audio-worklet\",\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: \"enable-soundtouch-audio-worklet\",\n BUFFER_SIZE: \"buffer-size\",\n SAMPLE_RATE: \"sample-rate\",\n DISABLE_INITIAL_RENDERING: \"disable-initial-rendering\",\n BITRATE_MP3: \"bitrate-mp3\"\n },\n // Enable or disable the use of Audio Worklet version of Soundtouch\n // If disabled, the ScriptProcessorNode version is used\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: true,\n ENABLE_AUDIO_WORKLET: true,\n ENABLE_RECORDER_AUDIO_WORKLET: true,\n SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE: 16384,\n DEFAULT_REVERB_ENVIRONMENT: {\n name: \"Medium Damping Cave E002 M2S\",\n url: \"impulse_response.wav\",\n size: 1350278,\n addDuration: 4,\n link: \"http://www.cksde.com/p_6_250.htm\"\n },\n VOCODER_MODULATOR: \"modulator.mp3\",\n DEFAULT_BUFFER_SIZE: 0,\n VALID_BUFFER_SIZE: [0, 256, 512, 1024, 2048, 4096, 8192, 16384],\n VALID_MP3_BITRATES: [32, 64, 96, 128, 160, 256, 320],\n DEFAULT_SAMPLE_RATE: 0, // 0 = AUTO\n VALID_SAMPLE_RATES: [0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000],\n // Interval used by the treatment percent counter. The event will be dispatched each ms defined here\n TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL: 100,\n // Smoothing factor for the time couting estimation (between 0 and 1)\n TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR: 0.9,\n // Disable initial rendering (when opening audio file or buffer)\n DISABLE_INITIAL_RENDERING: true,\n // Default save format\n DEFAULT_SAVE_FORMAT: \"wav\",\n // Default bitrate for the MP3 encoder\n DEFAULT_MP3_BITRATE: 320\n};\n\nexport default Constants;\n","import { injectable } from \"inversify\";\nimport AudioEditorEvents from \"../model/AudioEditorEvent\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default class EventEmitter implements EventEmitterInterface {\n listeners: AudioEditorEvents = {};\n \n constructor() {\n this.listeners = {};\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event].push(callback);\n }\n\n emit(event: string, data?: string | number | AudioBuffer) {\n if (this.listeners[event]) {\n this.listeners[event].forEach(callback => {\n callback(data);\n });\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event].filter(cb => cb !== callback);\n }\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport Constants from \"@/model/Constants\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioContextManager implements AudioContextManagerInterface {\n\n /** The current event emitter */\n private eventEmitter: EventEmitterInterface | undefined;\n\n /** The config service */\n private configService: ConfigService | null;\n\n /** The current audio context */\n private _currentContext: AudioContext | null | undefined;\n\n /** The old audio context */\n private oldAudioContext: AudioContext | null | undefined;\n\n /** The previous sample rate setting */\n private previousSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n constructor(\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService | null) {\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n\n this.setup();\n }\n\n private setup() {\n if (this.configService) {\n this.previousSampleRate = this.configService.getSampleRate();\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.previousSampleRate);\n }\n }\n\n if (!this.currentContext) {\n this.createNewContext(this.previousSampleRate);\n }\n }\n\n createNewContextIfNeeded(principalBuffer?: AudioBuffer | null) {\n const isCompatibilityModeEnabled = this.configService && this.configService.isCompatibilityModeEnabled();\n\n if (isCompatibilityModeEnabled && principalBuffer) {\n // If compatibility mode is enabled, we use the sample rate of the input audio buffer\n if (this.currentSampleRate != principalBuffer.sampleRate) {\n this.createNewContext(principalBuffer.sampleRate);\n this.previousSampleRate = principalBuffer.sampleRate;\n\n return true;\n }\n } else {\n // Otherwise we change the context if the sample rate has changed\n let currentSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n if (this.configService) {\n currentSampleRate = this.configService.getSampleRate();\n }\n\n // If sample rate setting has changed, create a new audio context\n if (currentSampleRate != this.previousSampleRate) {\n this.createNewContext(currentSampleRate);\n this.previousSampleRate = currentSampleRate;\n\n return true;\n }\n }\n\n return false;\n }\n\n /** \n * Stop previous audio context and create a new one\n * @param sampleRate New sample rate\n */\n createNewContext(sampleRate: number) {\n if (this._currentContext) {\n this.oldAudioContext = this._currentContext;\n this.destroyOldContext();\n }\n\n const options: AudioContextOptions = {\n latencyHint: \"interactive\"\n };\n\n if (sampleRate != 0) {\n options.sampleRate = sampleRate;\n }\n\n this._currentContext = new AudioContext(options);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.currentSampleRate);\n }\n }\n\n /**\n * Destroy previous AudioContext\n */\n private destroyOldContext() {\n if (this.oldAudioContext) {\n this.oldAudioContext.close();\n this.oldAudioContext = null;\n }\n }\n\n get currentSampleRate(): number {\n if (this.currentContext) {\n return this.currentContext.sampleRate;\n }\n\n return 0;\n }\n\n get currentContext() {\n return this._currentContext;\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport type { ConfigService } from \"../../services/interfaces/ConfigService\";\nimport { TYPES } from \"@/inversify.types\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\nimport type BufferDecoderServiceInterface from \"@/services/interfaces/BufferDecoderServiceInterface\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default abstract class AbstractAudioElement {\n\n /** Is this element enabled? */\n private enabled = false;\n\n /** Is this element enabled by default? */\n private defaultEnabled = false;\n\n @inject(TYPES.BufferFetcherService)\n protected bufferFetcherService: BufferFetcherServiceInterface | null = null;\n\n @inject(TYPES.BufferDecoderService)\n protected bufferDecoderService: BufferDecoderServiceInterface | null = null;\n\n @inject(TYPES.ConfigService)\n protected configService: ConfigService | null = null;\n\n @inject(TYPES.EventEmitter)\n protected eventEmitter: EventEmitterInterface | null = null;\n\n /** Returns the order in which the filter/renderer needs to be applied */\n abstract get order(): number;\n\n /** Returns the id of this filter/renderer */\n abstract get id(): string;\n\n /** Is this filter/renderer enabled? */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /** Is this filter/renderer enabled by default? */\n isDefaultEnabled(): boolean {\n return this.defaultEnabled;\n }\n\n /** Set to true if this filter/renderer needs to be enabled by default */\n setDefaultEnabled(state: boolean) {\n this.defaultEnabled = state;\n }\n\n setEnabled(state: boolean) {\n this.enabled = state;\n }\n\n /** Enable this filter/renderer */\n enable() {\n this.setEnabled(true);\n }\n\n /** Disable this filter/renderer */\n disable() {\n this.setEnabled(false);\n }\n\n /** Toggle to enabled/disabled this filter */\n toggle() {\n this.setEnabled(!this.isEnabled());\n }\n\n injectDependencies(bufferFetcherService: BufferFetcherServiceInterface | null, bufferDecoderService: BufferDecoderServiceInterface | null, configService: ConfigService | null, eventEmitter: EventEmitterInterface | null) {\n this.bufferFetcherService = bufferFetcherService;\n this.bufferDecoderService = bufferDecoderService;\n this.configService = configService;\n this.eventEmitter = eventEmitter;\n }\n}\n","import { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport FilterManagerInterface from \"@/audioEditor/interfaces/FilterManagerInterface\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\nconst utilFunctions = {\n calcAudioDuration: (audio: AudioBuffer, speed: number) => {\n if (audio) {\n let duration = audio.duration + 1;\n\n if (speed) {\n duration = duration / speed;\n }\n\n return duration;\n }\n\n return 0;\n },\n loadAudioBuffer: async (context: AudioContext, file: File) => {\n const arrayBuffer = await utilFunctions.readAsArrayBufferPromisified(file);\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n return utilFunctions.decodeBuffer(context, audioBuffer);\n },\n readAsArrayBufferPromisified: (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = ev => {\n const result = ev?.target?.result;\n\n if (result instanceof ArrayBuffer) {\n resolve(result);\n } else {\n reject();\n }\n };\n\n if (file) {\n reader.readAsArrayBuffer(file); // Read the file\n }\n });\n },\n decodeBuffer: (context: AudioContext, buffer: AudioBuffer) => {\n if (buffer.numberOfChannels == 1) { // convert to stereo buffer\n context.resume();\n\n const duration = buffer.duration;\n const sampleRate = context.sampleRate;\n\n const newBuffer = context.createBuffer(2, sampleRate * duration + sampleRate * 2, sampleRate);\n\n // Original buffer data\n const sourceChannelData = buffer.getChannelData(0);\n\n // Destination buffers\n const channel0Data = newBuffer.getChannelData(0);\n const channel1Data = newBuffer.getChannelData(1);\n\n for (let i = 0; i < sourceChannelData.length; i++) {\n channel0Data[i] = sourceChannelData[i];\n channel1Data[i] = sourceChannelData[i];\n }\n\n return newBuffer;\n }\n\n return buffer;\n },\n convertAudioBufferToFloat32Array: (buffer: AudioBuffer) => {\n const array: Float32Array[] = [];\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n array.push(buffer.getChannelData(channel));\n }\n\n return array;\n },\n convertAudioParamToFloat32Array: (param: AudioParam, length: number) => {\n const array = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n array.set([param.value], i);\n }\n\n return array;\n },\n sumAudioBufferChannel(buffer: AudioBuffer, channel: number) {\n return buffer.getChannelData(channel).reduce((a, b) => a + b, 0);\n },\n sumAudioBuffer(buffer: AudioBuffer) {\n let sum = 0;\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n sum += this.sumAudioBufferChannel(buffer, channel);\n }\n\n return sum;\n },\n /**\n * This method checks if the browser is compatible with audio worklets\n * @param audioContext \n */\n isAudioWorkletCompatible(audioContext: BaseAudioContext) {\n if (typeof (audioContext) !== \"undefined\" && typeof (audioContext.audioWorklet) !== \"undefined\") {\n return true;\n }\n\n return false;\n },\n /**\n * Check that the setting value is correct\n * @param value FilterSettingValue\n */\n isSettingValueValid(value: FilterSettingValue) {\n return typeof (value) !== \"undefined\" && !isNaN(Number(value)) && !(typeof (value) === \"string\" && value.trim() === \"\");\n },\n /**\n * Calculate approximative audio duration according to enabled filters and their settings\n * @param speedAudio Current audio speed\n * @returns The audio duration\n */\n calculateAudioDuration(buffer: AudioBuffer, filterManager: FilterManagerInterface, speedAudio: number): number {\n if (buffer && filterManager) {\n const duration = this.calcAudioDuration(buffer, speedAudio);\n return duration + filterManager.getAddingTime();\n }\n\n return 0;\n },\n /**\n * Reset audio rendering progress\n */\n resetAudioRenderingProgress(eventEmitter: EventEmitterInterface | null) {\n if (eventEmitter) {\n eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, 0);\n eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n }\n },\n forceDownload(blob: Blob, filename: string) {\n const link = window.document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n window.document.body.appendChild(link);\n link.href = url;\n link.download = filename || \"output.wav\";\n link.click();\n URL.revokeObjectURL(url);\n }\n};\n\nexport default utilFunctions;\n","import AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"../filters/interfaces/AbstractAudioFilter\";\nimport AbstractAudioRenderer from \"../filters/interfaces/AbstractAudioRenderer\";\nimport utils from \"../utils/Functions\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport Constants from \"../model/Constants\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettings } from \"../model/filtersSettings/FilterSettings\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { FilterState } from \"../model/FilterState\";\nimport SaveBufferOptions from \"../model/SaveBufferOptions\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport AudioEditorInterface from \"./interfaces/AudioEditorInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\n\n@injectable()\nexport default class AudioEditor extends AbstractAudioElement implements AudioEditorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The renderer manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The save buffer manager */\n private saveBufferManager: SaveBufferManagerInterface | undefined;\n\n /** The save buffer manager */\n private audioProcessor: AudioProcessorInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The audio buffer to be processed */\n private principalBuffer: AudioBuffer | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.SaveBufferManager) saveBufferManager: SaveBufferManagerInterface,\n @inject(TYPES.AudioProcessor) audioProcessor: AudioProcessorInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface,\n @inject(TYPES.BufferPlayer) player: BufferPlayerInterface\n ) {\n super();\n\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.contextManager = contextManager;\n this.saveBufferManager = saveBufferManager;\n this.audioProcessor = audioProcessor;\n this.bufferManager = bufferManager;\n this.bufferPlayer = player;\n\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called just before starting playing audio, when compatibility mode is enabled\n this.bufferPlayer.onBeforePlaying(async () => {\n if (this.bufferPlayer && this.bufferPlayer.compatibilityMode\n && this.contextManager && this.contextManager.currentContext && this.audioProcessor) {\n await this.audioProcessor.setupOutput(this.principalBuffer, this.contextManager.currentContext);\n }\n });\n\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.bufferPlayer && this.bufferPlayer.loop) {\n this.bufferPlayer.start();\n }\n });\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n if (this.filterManager) {\n this.filterManager.addFilters(...filters);\n }\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n if (this.rendererManager) {\n this.rendererManager.addRenderers(...renderers);\n }\n }\n\n get currentSampleRate(): number {\n if (this.contextManager) {\n return this.contextManager.currentSampleRate;\n }\n\n return 0;\n }\n\n get defaultDeviceSampleRate(): number {\n const tempContext = new AudioContext();\n let sampleRate = 0;\n\n if (tempContext) {\n sampleRate = tempContext.sampleRate;\n tempContext.close();\n }\n\n return sampleRate;\n }\n\n async loadBufferFromFile(file: File) {\n this.principalBuffer = null;\n\n if (this.audioProcessor) {\n await this.audioProcessor.prepareContext(this.principalBuffer);\n }\n\n if (this.contextManager && this.contextManager.currentContext && this.bufferDecoderService && this.audioProcessor) {\n this.principalBuffer = await this.bufferDecoderService.decodeBufferFromFile(file);\n this.audioProcessor.initialRenderingDone = false;\n\n if (this.principalBuffer) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n } else {\n throw new Error(\"Error decoding audio file\");\n }\n\n utilFunctions.resetAudioRenderingProgress(this.eventEmitter);\n } else {\n throw new Error(\"Audio Context is not ready!\");\n }\n }\n\n loadBuffer(audioBuffer: AudioBuffer) {\n this.principalBuffer = audioBuffer;\n\n if (this.audioProcessor) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n this.audioProcessor.initialRenderingDone = false;\n }\n }\n\n getOutputBuffer() {\n if (this.audioProcessor) {\n return this.audioProcessor.renderedBuffer;\n }\n\n return null;\n }\n\n async renderAudio(): Promise {\n if (this.audioProcessor) {\n return await this.audioProcessor.renderAudio(this.principalBuffer);\n }\n\n return false;\n }\n\n isAudioWorkletAvailable(): boolean {\n if (this.contextManager && this.contextManager.currentContext) {\n return utilFunctions.isAudioWorkletCompatible(this.contextManager.currentContext);\n }\n\n return false;\n }\n\n /** Filters settings */\n\n getFiltersState(): FilterState {\n if (this.filterManager && this.rendererManager) {\n return {\n ...this.filterManager.getFiltersState(),\n ...this.rendererManager.getRenderersState()\n };\n }\n\n return {};\n }\n\n getFiltersSettings(): Map {\n if (this.filterManager) {\n return this.filterManager.getFiltersSettings();\n }\n\n return new Map();\n }\n\n async reconnectNodesIfNeeded() {\n if (this.contextManager && this.bufferPlayer && this.bufferPlayer.compatibilityMode &&\n this.contextManager.currentContext && this.principalBuffer &&\n this.filterManager && this.filterManager.entrypointFilter) {\n await this.filterManager.connectNodes(this.contextManager.currentContext, this.principalBuffer, true, this.bufferPlayer.compatibilityMode);\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n this.bufferPlayer.speedAudio = speedAudio;\n this.bufferPlayer.duration = utilFunctions.calculateAudioDuration(this.principalBuffer, this.filterManager, speedAudio) * speedAudio;\n }\n }\n\n toggleFilter(filterId: string) {\n if (this.rendererManager) {\n this.rendererManager.toggleRenderer(filterId);\n }\n\n if (this.filterManager) {\n this.filterManager.toggleFilter(filterId);\n this.reconnectNodesIfNeeded();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n if (this.filterManager) {\n await this.filterManager.changeFilterSettings(filterId, settings);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n async resetFilterSettings(filterId: string) {\n if (this.filterManager) {\n await this.filterManager.resetFilterSettings(filterId);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n resetAllFiltersState() {\n if (this.rendererManager) {\n this.rendererManager.resetAllRenderersState();\n }\n\n if (this.filterManager) {\n this.filterManager.resetAllFiltersState();\n this.reconnectNodesIfNeeded();\n }\n }\n\n /** Events and exit */\n\n exit() {\n if (this.bufferPlayer) {\n this.bufferPlayer.stop();\n this.bufferPlayer.reset();\n }\n\n this.cancelAudioRendering();\n this.principalBuffer = null;\n }\n\n cancelAudioRendering() {\n if (this.audioProcessor) {\n this.audioProcessor.cancelAudioRendering();\n }\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.off(event, callback);\n }\n }\n\n async saveBuffer(options?: SaveBufferOptions): Promise {\n if (this.saveBufferManager && this.audioProcessor) {\n return await this.saveBufferManager?.saveBuffer(this.audioProcessor.renderedBuffer, options);\n }\n\n return false;\n }\n\n set downloadingInitialData(state: boolean) {\n if (this.bufferManager) {\n this.bufferManager.downloadingInitialData = state;\n }\n }\n\n get downloadingInitialData(): boolean {\n if (this.bufferManager) {\n return this.bufferManager.downloadingInitialData;\n }\n\n return false;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_EDITOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport utils from \"../utils/Functions\";\nimport Constants from \"@/model/Constants\";\nimport AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioProcessor extends AbstractAudioElement implements AudioProcessorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The filter manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The current offline context */\n private currentOfflineContext: OfflineAudioContext | null | undefined;\n\n /** The resulting audio buffer */\n private _renderedBuffer: AudioBuffer | null = null;\n\n /** true if the user wanted to cancel audio rendering */\n private audioRenderingLastCanceled = false;\n\n /** true if initial rendering for the current buffer was done */\n initialRenderingDone = false;\n /** The sum of all the samples of the input buffer,\n * used to detect the need to enable the compatibility mode */\n sumInputBuffer: number = 0;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.bufferManager = bufferManager;\n }\n\n async prepareContext(inputBuffer: AudioBuffer | null) {\n if (this.contextManager) {\n const changed = this.contextManager.createNewContextIfNeeded(inputBuffer);\n\n if (changed && this.bufferManager) {\n await this.bufferManager.resetBufferFetcher();\n }\n\n if (this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n }\n }\n\n async renderAudio(inputBuffer: AudioBuffer | null): Promise {\n await this.prepareContext(inputBuffer);\n\n if (!this.contextManager || !this.contextManager.currentContext) {\n throw new Error(\"AudioContext is not yet available\");\n }\n\n if (!this.filterManager) {\n throw new Error(\"Filter manager is not available\");\n }\n\n if (!this.rendererManager) {\n throw new Error(\"Renderer manager is not available\");\n }\n\n if (!this.filterManager.entrypointFilter) {\n throw new Error(\"Entrypoint filter is not available\");\n }\n\n if (!inputBuffer) {\n throw new Error(\"No principal buffer available\");\n }\n\n // If initial rendering is disabled and compatibility mode is disabled, we stop here\n if (!this.initialRenderingDone && this.configService && this.configService.isInitialRenderingDisabled() && !this.configService.isCompatibilityModeEnabled()) {\n this.loadInitialBuffer(inputBuffer);\n this.initialRenderingDone = true;\n return true;\n }\n\n // If switching from compatiblity mode to normal mode, we stop the audio player\n if (this.configService && this.bufferPlayer && !this.configService.isCompatibilityModeEnabled() && this.bufferPlayer.compatibilityMode) {\n this.bufferPlayer.stop();\n }\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n const durationAudio = utils.calculateAudioDuration(inputBuffer, this.filterManager, speedAudio);\n const offlineContext = new OfflineAudioContext(2, this.contextManager.currentContext.sampleRate * durationAudio, this.contextManager.currentContext.sampleRate);\n const outputContext = this.configService && this.configService.isCompatibilityModeEnabled() ? this.contextManager.currentContext : offlineContext;\n\n this._renderedBuffer = await this.rendererManager.executeAudioRenderers(inputBuffer, outputContext);\n this.currentOfflineContext = null;\n this.audioRenderingLastCanceled = false;\n\n\n utils.resetAudioRenderingProgress(this.eventEmitter);\n this.filterManager.setupTotalSamples(durationAudio, this.contextManager.currentContext);\n\n return await this.setupOutput(inputBuffer, outputContext, durationAudio, offlineContext);\n }\n\n private setupPlayerSpeed(bufferPlayer: BufferPlayerInterface) {\n if (this.filterManager && this.filterManager.entrypointFilter) {\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n bufferPlayer.speedAudio = speedAudio;\n }\n }\n\n async setupOutput(inputBuffer: AudioBuffer | null, outputContext: BaseAudioContext, durationAudio?: number, offlineContext?: OfflineAudioContext): Promise {\n if (this._renderedBuffer && this.configService && this.eventEmitter && this.bufferPlayer && this.filterManager) {\n // Initialize worklets then connect the filter nodes\n await this.filterManager.initializeWorklets(outputContext);\n await this.filterManager.connectNodes(outputContext, this._renderedBuffer, false, this.configService.isCompatibilityModeEnabled());\n\n this.setupPlayerSpeed(this.bufferPlayer);\n\n // Standard mode\n if (!this.configService.isCompatibilityModeEnabled() && offlineContext && this.filterManager.currentNodes) {\n this.currentOfflineContext = offlineContext;\n this.filterManager.currentNodes.output.connect(outputContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n if (this.contextManager && !this.loadRenderedAudio(inputBuffer, renderedBuffer)) {\n return await this.setupOutput(inputBuffer, this.contextManager.currentContext!, durationAudio);\n }\n\n if (this.audioRenderingLastCanceled) {\n return false;\n }\n\n this.eventEmitter.emit(EventType.OFFLINE_AUDIO_RENDERING_FINISHED);\n } else { // Compatibility mode\n this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes!.output, durationAudio);\n this.initialRenderingDone = true;\n }\n\n this.eventEmitter.emit(EventType.AUDIO_RENDERING_FINISHED);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Load rendered audio buffer into audio player\n * @param renderedBuffer Rendered audio buffer - AudioBuffer\n * @returns false if the rendred audio buffer is invalid, true otherwise\n */\n private loadRenderedAudio(inputBuffer: AudioBuffer | null, renderedBuffer: AudioBuffer): boolean {\n if (this.eventEmitter && this.bufferPlayer) {\n if (!this.audioRenderingLastCanceled) {\n const sumRenderedAudio = utils.sumAudioBuffer(renderedBuffer);\n\n if (sumRenderedAudio == 0 && this.sumInputBuffer !== 0) {\n if (this.configService && !this.configService.isCompatibilityModeChecked()) {\n this.setCompatibilityModeChecked(true);\n this.configService.enableCompatibilityMode();\n this.eventEmitter.emit(EventType.COMPATIBILITY_MODE_AUTO_ENABLED);\n\n return false;\n }\n\n this.eventEmitter.emit(EventType.RENDERING_AUDIO_PROBLEM_DETECTED);\n }\n\n this._renderedBuffer = renderedBuffer;\n this.bufferPlayer.loadBuffer(this._renderedBuffer);\n } else if (!this.initialRenderingDone) {\n this.loadInitialBuffer(inputBuffer);\n this.eventEmitter.emit(EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO);\n }\n\n this.initialRenderingDone = true;\n }\n\n return true;\n }\n\n /**\n * Load the initial audio buffer to the buffer player\n */\n private loadInitialBuffer(inputBuffer: AudioBuffer | null) {\n if (this.bufferPlayer) {\n this._renderedBuffer = inputBuffer;\n this.bufferPlayer.loadBuffer(inputBuffer!);\n }\n }\n\n public cancelAudioRendering() {\n if (this.currentOfflineContext && !this.audioRenderingLastCanceled && this.filterManager) {\n this.audioRenderingLastCanceled = true;\n this.filterManager.disconnectOldNodes(false);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.CANCELLING_AUDIO_PROCESSING);\n }\n }\n }\n\n /**\n * Set compatibility/direct audio rendering mode already checked for auto enabling (if an error occurs rendering in offline context)\n * @param checked boolean\n */\n private setCompatibilityModeChecked(checked: boolean) {\n if (this.configService) {\n this.configService.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED, \"\" + checked);\n }\n }\n\n get renderedBuffer() {\n return this._renderedBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_PROCESSOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport Constants from \"@/model/Constants\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport { inject, injectable } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\n\n@injectable()\nexport default class BufferManager extends AbstractAudioElement implements BufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** True if we are downloading initial buffer data */\n downloadingInitialData = false;\n\n /** List of audio buffers to fetch */\n private audioBuffersToFetch: string[] = [];\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.BufferFetcherService) bufferFetcherService: BufferFetcherServiceInterface,\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.AudioBuffersToFetch) audioBuffersToFetch: string[]) {\n super();\n\n this.bufferFetcherService = bufferFetcherService;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.filterManager = filterManager;\n this.filterManager = filterManager;\n this.audioBuffersToFetch = audioBuffersToFetch;\n\n this.setup();\n }\n\n private setup() {\n if (this.audioBuffersToFetch.length > 0) {\n this.fetchBuffers(false);\n }\n }\n\n /**\n * Fetch default buffers from network\n * @param refetch true if we need to refetch the buffers\n */\n private async fetchBuffers(refetch: boolean) {\n if (this.downloadingInitialData || !this.bufferFetcherService) {\n return;\n }\n\n this.downloadingInitialData = true;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS);\n }\n\n try {\n await this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch);\n this.downloadingInitialData = false;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADED_BUFFERS);\n }\n } catch (e) {\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS_ERROR);\n }\n }\n }\n\n async resetBufferFetcher() {\n if (this.bufferFetcherService) {\n this.bufferFetcherService.reset();\n\n await this.fetchBuffers(true);\n\n if (this.filterManager) {\n await this.filterManager.resetFilterBuffers();\n }\n }\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_MANAGER;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"@/filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"@/filters/interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"@/model/AudioNodes\";\nimport AbstractAudioFilterWorklet from \"@/filters/interfaces/AbstractAudioFilterWorklet\";\nimport { FilterState } from \"@/model/FilterState\";\nimport { FilterSettings } from \"@/model/filtersSettings/FilterSettings\";\nimport Constants from \"@/model/Constants\";\nimport FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { inject, injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class FilterManager extends AbstractAudioElement implements FilterManagerInterface {\n\n /** A list of filters */\n private filters: AbstractAudioFilter[] = [];\n\n /** The entrypoint filter */\n private _entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null = null;\n\n /** The current connected nodes */\n private _currentNodes: AudioFilterNodes | null = null;\n\n constructor(\n @multiInject(TYPES.Filters) filters: AbstractAudioFilter[],\n @inject(TYPES.EntryPointFilter) entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null\n ) {\n super();\n\n this.filters = filters;\n this._entryPointFilter = entryPointFilter;\n\n this.setup();\n }\n\n private setup() {\n for (const filter of this.filters) {\n filter.initializeDefaultSettings();\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n for (const filter of filters) {\n filter.initializeDefaultSettings();\n filter.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.filters.push(...filters);\n }\n\n getFiltersState(): FilterState {\n const state: FilterState = {};\n\n this.filters.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n getFiltersSettings(): Map {\n const settings = new Map();\n\n for (const filter of this.filters) {\n settings.set(filter.id, filter.getSettings());\n }\n\n return settings;\n }\n\n toggleFilter(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n filter.toggle();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n for (const key of Object.keys(settings)) {\n await filter.setSetting(key, settings[key]);\n }\n }\n }\n\n async resetFilterSettings(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n await filter.resetSettings();\n }\n }\n\n resetAllFiltersState() {\n this.filters.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async connectNodes(context: BaseAudioContext, buffer: AudioBuffer, keepCurrentInputOutput: boolean, isCompatibilityMode: boolean) {\n if (!this._entryPointFilter) {\n return;\n }\n\n let entrypointNode: AudioNode | null = null;\n\n if (keepCurrentInputOutput && this._currentNodes) {\n entrypointNode = this._currentNodes.input;\n } else {\n const entrypointNodes = await this._entryPointFilter.getEntrypointNode(context, buffer, !isCompatibilityMode);\n entrypointNode = entrypointNodes.input;\n }\n\n const intermediateNodes: AudioFilterNodes[] = [];\n let previousNode: AudioNode | undefined = entrypointNode;\n\n this.disconnectOldNodes(keepCurrentInputOutput);\n\n // Sort by filter order, then remove the disabled filter (but always keep the last/output filter)\n const filters = this.filters\n .sort((a, b) => a.order - b.order)\n .filter((filter, index) => filter !== this._entryPointFilter && (filter.isEnabled() || index >= this.filters.length - 1));\n\n for (const filter of filters) {\n const node = filter.getNode(context);\n\n if (previousNode) {\n previousNode.connect(node.input);\n }\n\n previousNode = node.output;\n intermediateNodes.push(node);\n }\n\n if (this._entryPointFilter) {\n this._entryPointFilter.updateState();\n }\n\n this._currentNodes = {\n input: entrypointNode!,\n output: previousNode!,\n intermediateNodes: intermediateNodes\n .filter(n => n.input != previousNode && n.output != previousNode &&\n n.input != entrypointNode && n.output != entrypointNode)\n };\n }\n\n disconnectOldNodes(keepCurrentOutput: boolean) {\n if (this._currentNodes) {\n this._currentNodes.input.disconnect();\n\n if (!keepCurrentOutput) {\n this._currentNodes.output.disconnect();\n }\n\n if (this._currentNodes.intermediateNodes) {\n for (const intermediate of this._currentNodes.intermediateNodes) {\n intermediate.input.disconnect();\n intermediate.output.disconnect();\n }\n }\n }\n }\n\n async initializeWorklets(context: BaseAudioContext) {\n for (const filter of this.filters) {\n if (filter.isWorklet()) {\n await (filter as AbstractAudioFilterWorklet).initializeWorklet(context);\n }\n }\n }\n\n getAddingTime() {\n let duration = 0;\n\n for (const filter of this.filters) {\n if (filter.isEnabled()) {\n duration += filter.getAddingTime();\n }\n }\n\n return duration;\n }\n\n setupTotalSamples(durationAudio: number, currentContext: AudioContext | null) {\n if (currentContext) {\n const totalSamples = durationAudio * currentContext.sampleRate;\n\n for (const filter of this.filters) {\n filter.totalSamples = totalSamples;\n }\n }\n }\n\n async resetFilterBuffers() {\n for (const filter of this.filters) {\n await filter.bufferFetcherReseted();\n }\n }\n\n get entrypointFilter() {\n return this._entryPointFilter;\n }\n\n get currentNodes() {\n return this._currentNodes;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.FILTER_MANAGER;\n }\n}\n","import { injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioRenderer from \"@/filters/interfaces/AbstractAudioRenderer\";\nimport { FilterState } from \"@/model/FilterState\";\nimport Constants from \"@/model/Constants\";\nimport RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\n\n@injectable()\nexport default class RendererManager extends AbstractAudioElement implements RendererManagerInterface {\n\n /** A list of renderers */\n private renderers: AbstractAudioRenderer[] = [];\n\n constructor(\n @multiInject(TYPES.Renderers) renderers: AbstractAudioRenderer[] = []) {\n super();\n\n this.renderers = renderers;\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n for (const renderer of renderers) {\n renderer.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.renderers.push(...renderers);\n }\n\n getRenderersState(): FilterState {\n const state: FilterState = {};\n\n this.renderers.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n toggleRenderer(rendererId: string) {\n const renderer = this.renderers.find(f => f.id === rendererId);\n\n if (renderer) {\n renderer.toggle();\n }\n }\n\n resetAllRenderersState() {\n this.renderers.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async executeAudioRenderers(buffer: AudioBuffer, outputContext: AudioContext | OfflineAudioContext) {\n let currentBuffer = buffer;\n\n for (const renderer of this.renderers.sort((a, b) => a.order - b.order)) {\n if (renderer.isEnabled()) {\n currentBuffer = await renderer.renderAudio(outputContext, currentBuffer);\n }\n }\n\n return currentBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.RENDERER_MANAGER;\n }\n}\n","export default function getRecorderWorker(workerBasePath?: string): Worker {\n return new Worker((workerBasePath ? workerBasePath : \"\") + \"RecorderWorker.js\");\n};\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { RecorderCallback, RecorderCallbacks } from \"../model/RecorderCallback\";\nimport type RecorderConfig from \"../model/RecorderConfig\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport RecorderWorkletMessage from \"../model/RecorderWorkletMessage\";\nimport utilFunctions from \"../utils/Functions\";\nimport getRecorderWorker from \"./getRecorderWorker\";\nimport RecorderInterface from \"./interfaces/RecorderInterface\";\n\n@injectable()\nexport class Recorder implements RecorderInterface {\n\n // Inline Worker\n private worker: Worker | null = null;\n private node: ScriptProcessorNode | AudioWorkletNode | null = null;\n private context: BaseAudioContext | null = null;\n\n private config: RecorderConfig = {\n bufferLen: 4096,\n sampleRate: 44100,\n numChannels: 2,\n mimeType: \"audio/wav\",\n workletBasePath: \"worklets/\",\n workerBasePath: \"workers/\",\n bitrate: Constants.DEFAULT_MP3_BITRATE,\n callback: () => { }\n };\n\n private callbacks: RecorderCallbacks = {\n getBuffer: [],\n exportWAV: [],\n exportMP3: []\n };\n\n recording = false;\n\n constructor(cfg: RecorderConfig) {\n Object.assign(this.config, cfg);\n }\n\n async setup(source: AudioNode) {\n if (this.node) { // Disconnect previous node\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n\n this.node.disconnect();\n }\n\n if (source) {\n this.context = source.context;\n\n await this.createRecorderNode();\n\n if (this.node && this.context) {\n source.connect(this.node);\n this.node.connect(this.context.destination); //this should not be necessary\n }\n }\n\n if (this.context && !this.worker) {\n this.worker = getRecorderWorker(this.config.workerBasePath);\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"init\",\n config: {\n sampleRate: this.context.sampleRate,\n numChannels: this.config.numChannels,\n bitrate: this.config.bitrate\n }\n });\n\n this.worker.onmessage = (e: RecorderWorkerMessage) => {\n let callbacks = null;\n\n switch (e.data.command) {\n case \"getBuffer\":\n callbacks = this.callbacks.getBuffer;\n break;\n case Constants.EXPORT_WAV_COMMAND:\n callbacks = this.callbacks.exportWAV;\n break;\n case Constants.EXPORT_MP3_COMMAND:\n callbacks = this.callbacks.exportMP3;\n break;\n }\n\n if (callbacks) {\n const cb = callbacks.pop();\n if (typeof cb == \"function\") {\n (cb as RecorderCallback)(e.data.data);\n }\n }\n };\n }\n }\n }\n\n\n private async createRecorderNode() {\n if (this.context) {\n if (utilFunctions.isAudioWorkletCompatible(this.context) && Constants.ENABLE_RECORDER_AUDIO_WORKLET) {\n try {\n await this.createRecorderWorklet();\n } catch(e) {\n this.createRecorderScriptProcessorNode();\n }\n } else {\n this.createRecorderScriptProcessorNode();\n }\n }\n }\n\n private async createRecorderWorklet() {\n if (this.context) {\n await this.context.audioWorklet.addModule(this.config.workletBasePath + Constants.WORKLET_PATHS.RECORDER_WORKLET);\n\n this.node = new AudioWorkletNode(this.context, Constants.WORKLET_NAMES.RECORDER_WORKLET);\n\n if (this.node && this.node.port) {\n const numChannelParameter = this.node.parameters.get(\"numChannels\");\n\n if(numChannelParameter) {\n numChannelParameter.value = this.config.numChannels;\n numChannelParameter.setValueAtTime(this.config.numChannels, 0);\n }\n\n this.node.port.onmessage = (e: MessageEvent) => {\n if (this.worker && e.data.command == \"record\" && e.data.buffer.length > 0) {\n this.worker.postMessage({\n command: \"record\",\n buffer: e.data.buffer\n });\n }\n };\n }\n }\n }\n\n private createRecorderScriptProcessorNode() {\n if (this.context) {\n this.node = (this.context.createScriptProcessor).call(this.context,\n this.config.bufferLen, this.config.numChannels, this.config.numChannels);\n\n this.node.onaudioprocess = (e) => {\n if (!this.recording) return;\n\n const buffer = [];\n for (let channel = 0; channel < this.config.numChannels; channel++) {\n buffer.push(e.inputBuffer.getChannelData(channel));\n }\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"record\",\n buffer: buffer\n });\n }\n };\n }\n }\n\n record() {\n this.recording = true;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"record\");\n }\n }\n\n stop() {\n this.recording = false;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n }\n\n clear() {\n if (this.worker) {\n this.worker.postMessage({ command: \"clear\" });\n }\n }\n\n kill() {\n this.clear();\n this.stop();\n\n if (this.worker) {\n this.worker.terminate();\n }\n }\n\n getBuffer(cb: RecorderCallback) {\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.getBuffer.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({ command: \"getBuffer\" });\n }\n }\n\n exportWAV(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportWAV.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_WAV_COMMAND,\n type: mimeType\n });\n }\n }\n\n exportMP3(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportMP3.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_MP3_COMMAND,\n type: mimeType\n });\n }\n } \n};\n\nexport default Recorder;\n","import { inject, injectable } from \"inversify\";\nimport { TYPES } from \"../inversify.types\";\nimport { Recorder } from \"../recorder/Recorder\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport SaveBufferOptions from \"@/model/SaveBufferOptions\";\nimport Constants from \"@/model/Constants\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport getRecorderWorker from \"../recorder/getRecorderWorker\";\nimport SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport utilFunctions from \"@/utils/Functions\";\n\n@injectable()\nexport default class SaveBufferManager extends AbstractAudioElement implements SaveBufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** If we are currently processing and downloading the buffer */\n private savingBuffer = false;\n /** Callback used when saving audio */\n private playingStoppedCallback: (() => void) | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface\n ) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n\n // Callback called just before starting audio player\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.savingBuffer && this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n }\n }\n\n async saveBuffer(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n if (this.savingBuffer) {\n throw new Error(\"The buffer is currently saving\");\n }\n\n if (!this.bufferPlayer) {\n throw new Error(\"No buffer player was found\");\n }\n\n this.savingBuffer = true;\n\n let savingResult = false;\n\n if (!this.bufferPlayer.compatibilityMode) {\n savingResult = await this.saveBufferDirect(renderedBuffer, options);\n } else {\n savingResult = await this.saveBufferCompatibilityMode(options);\n }\n\n this.savingBuffer = false;\n\n return savingResult;\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is disabled\n * @param renderedBuffer The rendered buffer to save\n * @param options The save options\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferDirect(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!renderedBuffer || (this.contextManager && !this.contextManager.currentContext)) {\n return reject(\"No rendered buffer or AudioContext not initialized\");\n }\n\n const worker = getRecorderWorker(this.configService?.getWorkerBasePath());\n\n if (worker) {\n const buffer: Float32Array[] = [];\n\n for (let i = 0; i < renderedBuffer.numberOfChannels; i++) {\n buffer.push(renderedBuffer.getChannelData(i));\n }\n\n worker.onmessage = (e: RecorderWorkerMessage) => {\n if (e.data.command == Constants.EXPORT_WAV_COMMAND || e.data.command == Constants.EXPORT_MP3_COMMAND) {\n this.downloadAudioBlob(e.data.data, options);\n }\n\n worker.terminate();\n this.savingBuffer = false;\n resolve(true);\n };\n\n worker.postMessage({\n command: Constants.INIT_COMMAND,\n config: {\n sampleRate: renderedBuffer.sampleRate,\n numChannels: 2,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n }\n });\n\n worker.postMessage({\n command: Constants.RECORD_COMMAND,\n buffer\n });\n\n worker.postMessage({\n command: options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\" ? Constants.EXPORT_MP3_COMMAND : Constants.EXPORT_WAV_COMMAND,\n type: Constants.AUDIO_WAV\n });\n }\n });\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is enabled\n * @param options The save options - see SaveBufferOptions\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferCompatibilityMode(options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!this.bufferPlayer) {\n return reject(\"No buffer player found\");\n }\n\n this.bufferPlayer.start().then(() => {\n if (!this.configService) {\n return reject(\"No config service found\");\n }\n\n if (!this.filterManager) {\n return reject(\"No filter manager found\");\n }\n\n const rec = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: options?.format == \"mp3\" ? Constants.AUDIO_MP3 : Constants.AUDIO_WAV,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n });\n\n rec.setup(this.filterManager.currentNodes!.output).then(() => {\n rec.record();\n\n this.playingStoppedCallback = () => {\n rec.kill();\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n\n if (this.playingStoppedCallback) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n }\n\n resolve(true);\n };\n\n const finishedCallback = () => {\n if (this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n\n rec.stop();\n\n const downloadBlobCallback = (blob: Blob) => {\n this.downloadAudioBlob(blob, options);\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n }\n\n rec.kill();\n\n resolve(true);\n };\n\n if (options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\") {\n rec.exportMP3(downloadBlobCallback);\n } else {\n rec.exportWAV(downloadBlobCallback);\n }\n };\n\n if (this.eventEmitter) {\n this.eventEmitter.on(EventType.PLAYING_FINISHED, finishedCallback);\n this.eventEmitter.on(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n });\n });\n }\n\n /**\n * Download an audio Blob\n * @param blob The blob\n * @param options The save options - see SaveBufferOptions\n */\n private downloadAudioBlob(blob: Blob, options?: SaveBufferOptions) {\n utilFunctions.forceDownload(blob, \"audio-\" + new Date().toISOString() + \".\" + (options?.format || Constants.DEFAULT_SAVE_FORMAT));\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.SAVE_BUFFER_MANAGER;\n }\n}\n","/*\n * Copyright (C) 2019-2024 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The audio buffer player\n// Used to play the audio buffer, with time controls, pause/play, stop and loop\nimport { EventType } from \"../model/EventTypeEnum\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport BufferPlayerInterface from \"./interfaces/BufferPlayerInterface\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n// Also used in compatibility mode (which doesn't use audio buffer) with less functions (no time control)\n@injectable()\nexport default class BufferPlayer extends AbstractAudioElement implements BufferPlayerInterface {\n\n private _contextManager: AudioContextManagerInterface | undefined | null;\n\n private buffer: AudioBuffer | null = null;\n private source: AudioBufferSourceNode | null = null;\n currentTime = 0;\n displayTime = 0;\n duration = 0;\n private intervals: number[] = [];\n playing = false;\n loop = false;\n speedAudio = 1;\n private onBeforePlayingCallback: () => void = async () => { };\n\n compatibilityMode = false;\n currentNode: AudioNode | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined | null) {\n super();\n\n this._contextManager = contextManager;\n }\n\n init(direct?: boolean) {\n this.playing = false;\n\n if (this._contextManager && this._contextManager.currentContext) {\n this._contextManager.currentContext.resume();\n\n if (!this.compatibilityMode && this.buffer) {\n if (this.source != null && !direct) this.source.disconnect();\n this.source = this._contextManager.currentContext.createBufferSource();\n this.source.buffer = this.buffer;\n this.duration = this.buffer.duration * this.speedAudio;\n this.source.connect(this._contextManager.currentContext.destination);\n }\n }\n\n this.updateInfos();\n }\n\n loadBuffer(buffer: AudioBuffer) {\n this.compatibilityMode = false;\n this.reset();\n this.buffer = buffer;\n this.init();\n }\n\n setCompatibilityMode(currentNode: AudioNode, duration?: number) {\n this.compatibilityMode = true;\n this.reset();\n this.init();\n\n if (duration != null) {\n this.duration = duration * this.speedAudio;\n }\n\n this.currentNode = currentNode;\n this.updateInfos();\n }\n\n reset(direct?: boolean) {\n this.clearIntervals();\n\n this.currentTime = 0;\n this.displayTime = 0;\n\n if (!direct) {\n this.stop();\n }\n }\n\n stop() {\n this.clearIntervals();\n\n if (this.source != undefined && this.source != null && this.playing) {\n this.source.stop(0);\n this.playing = false;\n }\n\n if (this.currentNode) {\n this.currentNode.disconnect();\n\n if (this.compatibilityMode) {\n this.currentTime = 0;\n this.displayTime = 0;\n }\n }\n\n this.eventEmitter?.emit(EventType.PLAYING_STOPPED);\n this.updateInfos();\n }\n\n /**\n * Clear old intervals\n */\n private clearIntervals() {\n for (const interval of this.intervals) {\n clearInterval(interval);\n }\n\n this.intervals = [];\n }\n\n async start(direct?: boolean) {\n if (this.source || this.compatibilityMode) {\n if (!direct) {\n this.stop();\n }\n\n this.init(direct);\n\n await this.onBeforePlayingCallback();\n\n this.eventEmitter?.emit(EventType.PLAYING_STARTED);\n\n if (!this.compatibilityMode) {\n if (this.source) {\n this.source.start(0, direct ? 0 : this.currentTime / this.speedAudio);\n this.playing = true;\n } else {\n return;\n }\n } else {\n if (this.currentNode && this._contextManager && this._contextManager.currentContext) {\n this.currentNode.connect(this._contextManager.currentContext.destination);\n } else {\n return;\n }\n }\n\n let startTime = performance.now();\n\n this.intervals.push(window.setInterval(() => {\n const timeNow = performance.now();\n const nextTime = timeNow - startTime;\n startTime = timeNow;\n\n this.currentTime += (nextTime / 1000) * this.speedAudio;\n this.displayTime = this.currentTime;\n\n if (this.currentTime > this.duration) {\n if (this.loop) {\n if (!this.compatibilityMode) {\n this.reset(direct);\n this.start();\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n }\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n this.reset(direct);\n }\n } else {\n this.updateInfos();\n }\n }, 100));\n }\n }\n\n async playDirect() {\n if (!this.compatibilityMode) {\n this.start(true);\n } else {\n // Play direct is not possible when compatibility mode is enabled\n this.start(false);\n }\n }\n\n pause() {\n this.stop();\n }\n\n /** Send an event to update the informations of this player */\n private updateInfos() {\n this.eventEmitter?.emit(EventType.PLAYING_UPDATE);\n }\n\n setTimePercent(percent: number) {\n if (!this.compatibilityMode) {\n this.currentTime = Math.round(this.duration * (percent / 100));\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n setTime(time: number) {\n if (!this.compatibilityMode) {\n this.currentTime = time;\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n onBeforePlaying(callback: () => void) {\n this.onBeforePlayingCallback = callback;\n }\n\n toggleLoop() {\n this.loop = !this.loop;\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n get currentTimeDisplay() {\n return (\"0\" + Math.trunc(this.displayTime / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.displayTime % 60)).slice(-2);\n }\n\n get maxTimeDisplay() {\n return (\"0\" + Math.trunc(this.duration / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.duration % 60)).slice(-2);\n }\n\n get percent() {\n return (100 - Math.round((this.duration - this.displayTime) / this.duration * 100));\n }\n\n get remainingTimeDisplay() {\n return (\"0\" + Math.trunc((this.duration - this.displayTime) / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc((this.duration - this.displayTime) % 60)).slice(-2);\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_PLAYER;\n }\n}\n","import { EventType } from \"../model/EventTypeEnum\";\nimport type { ConfigService } from \"./interfaces/ConfigService\";\nimport utilFunctions from \"../utils/Functions\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport BufferFetcherServiceInterface from \"./interfaces/BufferFetcherServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferFetcherService implements BufferFetcherServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private buffers: Map = new Map();\n private bufferErrors: string[] = [];\n private eventEmitter: EventEmitterInterface | null;\n private configService: ConfigService | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.ConfigService) configService: ConfigService,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n }\n\n async fetchBuffer(bufferURI: string, force?: boolean) {\n const realBufferURI = (this.configService ? this.configService.getSoundBasePath() : \"\") + bufferURI;\n\n if(this.buffers.get(this.getKeyFromLocation(realBufferURI)) != null && !force) {\n return;\n }\n\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS, realBufferURI);\n\n try {\n const response = await fetch(realBufferURI);\n\n if(!response.ok) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n } else {\n const arrayBuffer = await response.arrayBuffer();\n\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await this.contextManager.currentContext.decodeAudioData(arrayBuffer);\n this.buffers.set(this.getKeyFromLocation(realBufferURI), utilFunctions.decodeBuffer(this.contextManager.currentContext, buffer));\n }\n }\n \n this.eventEmitter?.emit(EventType.FINISHED_FETCHING_BUFFERS, realBufferURI);\n } catch(e) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n }\n }\n\n async fetchAllBuffers(bufferURIs: string[]) {\n for(const uri of bufferURIs) {\n await this.fetchBuffer(uri);\n }\n }\n\n getAudioBuffer(filename: string): AudioBuffer | undefined {\n return this.buffers.get(this.getKeyFromLocation(filename));\n }\n\n async getOrFetchAudioBuffer(filename: string): Promise {\n if(this.getAudioBuffer(filename) == null) {\n await this.fetchBuffer(filename);\n }\n\n return this.getAudioBuffer(filename);\n }\n\n getDownloadedBuffersList(): string[] {\n return Array.from(this.buffers.keys());\n }\n\n private getKeyFromLocation(location: string) {\n return location.substring(location.lastIndexOf(\"/\") + 1);\n }\n\n reset() {\n this.buffers.clear();\n }\n}\n","import type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport utilFunctions from \"../utils/Functions\";\nimport BufferDecoderServiceInterface from \"./interfaces/BufferDecoderServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferDecoderService implements BufferDecoderServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private eventEmitter: EventEmitterInterface | null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n }\n\n async decodeBufferFromFile(file: File): Promise {\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODING_AUDIO_FILE);\n }\n\n try {\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await utilFunctions.loadAudioBuffer(this.contextManager.currentContext, file);\n \n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n }\n \n return buffer;\n }\n } catch (e) {\n console.error(e);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n this.eventEmitter.emit(EventType.ERROR_DECODING_AUDIO_FILE);\n }\n }\n\n return null;\n }\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\n\nexport default abstract class AbstractAudioRenderer extends AbstractAudioElement {\n\n /** Render an AudioBuffer based on another input AudioBuffer */\n abstract renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise;\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\nimport { AudioFilterNodes } from \"../../model/AudioNodes\";\nimport { FilterSettingValue, FilterSettings } from \"../../model/filtersSettings/FilterSettings\";\n\nexport default abstract class AbstractAudioFilter extends AbstractAudioElement {\n\n /** The default settings */\n private defaultSettings: FilterSettings | null = null;\n\n /** Total sample of the input audio buffer */\n protected _totalSamples = 0;\n\n /** Return a input and output AudioNode of the filter */\n abstract getNode(context: BaseAudioContext): AudioFilterNodes;\n\n /** Return an object with current settings of this filter */\n abstract getSettings(): FilterSettings;\n\n /** Set a filter setting */\n abstract setSetting(settingId: string, value: FilterSettingValue): Promise;\n\n /** Get the amount of time this filter add to the audio */\n getAddingTime(): number {\n return 0;\n }\n\n /** Store the default settings */\n public initializeDefaultSettings() {\n this.defaultSettings = this.getSettings();\n }\n\n /** Returns the default settings of this filter */\n public getDefaultSettings() {\n return this.defaultSettings;\n }\n\n /** Reset the default settings of this filter */\n public async resetSettings() {\n if (this.defaultSettings) {\n for (const key in this.defaultSettings) {\n if (this.defaultSettings && typeof (this.defaultSettings[key]) !== \"undefined\") {\n await this.setSetting(key, this.defaultSettings[key]);\n }\n }\n }\n }\n\n /** Return if the current filter use an audio worklet */\n public isWorklet() {\n return false;\n }\n\n /**\n * Called when the buffer fetcher was reseted\n * @returns boolean\n */\n public async bufferFetcherReseted(): Promise {\n return false;\n }\n\n set totalSamples(value: number) {\n this._totalSamples = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * This class is a polyfill for the standard web AudioParam class used by worklets\n */\nexport default class AudioParamPolyfill implements AudioParam {\n private _value: number = 0;\n private _minValue: number = 0;\n private _maxValue: number = Number.MAX_SAFE_INTEGER;\n private _defaultValue: number = 0;\n private context: BaseAudioContext | null = null;\n automationRate: AutomationRate = \"a-rate\";\n\n constructor(context: BaseAudioContext, defaultValue?: number) {\n this._defaultValue = defaultValue !== undefined ? defaultValue : 0;\n this._value = this._defaultValue;\n this.context = context;\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(newValue: number) {\n this._value = Math.max(this._minValue, Math.min(this._maxValue, newValue));\n }\n\n get minValue(): number {\n return this._minValue;\n }\n\n get maxValue(): number {\n return this._maxValue;\n }\n\n get defaultValue(): number {\n return this._defaultValue;\n }\n\n setValueAtTime(value: number, startTime: number): AudioParam {\n console.warn(\"setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n linearRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n exponentialRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n cancelAndHoldAtTime(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n cancelScheduledValues(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setValueCurveAtTime(values: unknown, startTime: unknown, duration: unknown): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\nimport AudioParamPolyfill from \"./AudioParamPolyfill\";\nimport Functions from \"../utils/Functions\";\n\n/**\n * This class convert an audio worklet processor node to a script processor node\n * automagically. Highly experimental, and might not work with some WorkletProcessor\n */\nexport default class WorkletScriptProcessorNodeAdapter {\n\n private workletProcessor: SimpleAudioWorkletProcessor;\n private _parameters = new Map();\n private _port: MessagePort | null = null;\n private _scriptProcessorNode: ScriptProcessorNode | null;\n private currentContext: BaseAudioContext | null = null;\n\n constructor(context: BaseAudioContext, node: SimpleAudioWorkletProcessor, bufferSize?: number) {\n this.workletProcessor = node;\n this.currentContext = context;\n\n // Create a ScriptProcessorNode with the same number of input and output channels\n this._scriptProcessorNode = context.createScriptProcessor(\n bufferSize,\n 2,\n 2\n );\n\n this.setupPort();\n this.setupProcessor();\n this.setupWorkletScope(context);\n }\n\n private setupPort(): void {\n const messageChannel = new MessageChannel();\n\n messageChannel.port1.onmessage = (ev) => {\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.postMessage(ev.data);\n }\n };\n\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.onmessage = (ev) => {\n messageChannel.port1.postMessage(ev.data);\n };\n }\n\n this._port = messageChannel.port2;\n }\n\n private setupProcessor() {\n if(!this._scriptProcessorNode) {\n return;\n }\n\n this._scriptProcessorNode.onaudioprocess = (ev: AudioProcessingEvent) => {\n if(this.workletProcessor) {\n const inputArray = [Functions.convertAudioBufferToFloat32Array(ev.inputBuffer)];\n const ouputArray = [Functions.convertAudioBufferToFloat32Array(ev.outputBuffer)];\n\n const records: [string, Float32Array][] = [];\n\n for (const [key, value] of this._parameters.entries()) {\n records.push([key, Functions.convertAudioParamToFloat32Array(value, 1)]);\n }\n\n const recordsMap: Record = Object.fromEntries(records);\n \n this.workletProcessor.process(inputArray, ouputArray, recordsMap);\n }\n };\n\n const descriptors = this.workletProcessor.defaultParameterDescriptors;\n\n if(descriptors) {\n descriptors.forEach(descriptor => {\n if(this.currentContext) {\n this._parameters.set(descriptor.name, new AudioParamPolyfill(this.currentContext, descriptor.defaultValue));\n }\n });\n }\n }\n\n private setupWorkletScope(context: BaseAudioContext) {\n if(typeof(window) !== \"undefined\") {\n window.sampleRate = context.sampleRate;\n }\n }\n\n get port() {\n return this._port;\n }\n\n get parameters(): AudioParamMap {\n return this._parameters;\n }\n\n get node() {\n return this._scriptProcessorNode;\n }\n\n get context() {\n return this._scriptProcessorNode?.context;\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\n/**\n * Polyfill for registerProcessor method used in AudioWorklets\n */\nexport default class RegisterProcessorPolyfill {\n\n private static processorsMap = new Map();\n\n static registerProcessor(processorName: string, processorClass: typeof SimpleAudioWorkletProcessor) {\n RegisterProcessorPolyfill.processorsMap.set(processorName, processorClass);\n }\n\n static getProcessor(processorName: string): SimpleAudioWorkletProcessor | null {\n const processor = RegisterProcessorPolyfill.processorsMap.get(processorName);\n\n if(processor) {\n return new processor();\n }\n\n return null;\n }\n};\n","/**\n * This class is the standard AudioWorkletProcessor interface\n */\nexport interface AudioWorkletProcessorInterface {\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean;\n get parameters(): AudioParamMap;\n get parameterDescriptors(): AudioParamMap;\n messageProcessor?: (event: MessageEvent) => void;\n}\n\ntype ParameterDescriptors = {\n name: string;\n defaultValue: number;\n}[];\n\n/**\n * This class is a polyfill for the AudioWorkletProcessor interface\n */\nexport default class SimpleAudioWorkletProcessor implements AudioWorkletProcessorInterface {\n private messageChannel: MessageChannel | null = null;\n messageProcessor?: ((event: MessageEvent) => void) | undefined;\n\n constructor() {\n this.messageChannel = new MessageChannel();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n return true;\n }\n\n get port(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port1;\n }\n\n get port2(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port2;\n }\n\n get parameters(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get parameterDescriptors(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get defaultParameterDescriptors(): ParameterDescriptors {\n return [];\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RegisterProcessorPolyfill from \"./RegisterProcessorPolyfill\";\nimport SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\nif(typeof(window) !== \"undefined\" && !(\"AudioWorkletProcessor\" in window)) {\n (window as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (window as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n\nif(typeof(global) !== \"undefined\" && !(\"AudioWorkletProcessor\" in global)) {\n (global as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (global as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n","import WorkletScriptProcessorNodeAdapter from \"../../workletPolyfill/WorkletScriptProcessorNodeAdapter\";\nimport AbstractAudioFilter from \"./AbstractAudioFilter\";\nimport Constants from \"../../model/Constants\";\nimport \"../../workletPolyfill/AudioWorkletProcessorPolyfill\";\nimport RegisterProcessorPolyfill from \"../../workletPolyfill/RegisterProcessorPolyfill\";\nimport utilFunctions from \"../../utils/Functions\";\n\nexport default abstract class AbstractAudioFilterWorklet extends AbstractAudioFilter {\n\n protected currentWorkletNode: AudioWorkletNode | WorkletScriptProcessorNodeAdapter | null = null;\n\n protected fallbackToScriptProcessor = false;\n\n protected keepCurrentNodeIfPossible = false;\n\n /**\n * Return the worklet name (as registered with method registerProcessor)\n */\n abstract get workletName(): string;\n\n /**\n * Return the path to worklet file\n */\n abstract get workletPath(): string;\n\n /**\n * Receive event from the worklet\n */\n abstract receiveEvent(message: MessageEvent): void;\n\n /**\n * Initialize the audio worklet by loading the module\n * @param audioContext The audio context\n */\n async initializeWorklet(audioContext: BaseAudioContext): Promise {\n this.stop();\n\n if (!utilFunctions.isAudioWorkletCompatible(audioContext)) {\n console.error(\"Audio Worklets not supported on this browser. Fallback to ScriptProcessor\");\n this.fallbackToScriptProcessor = true;\n return;\n }\n\n const workletPath = (this.configService ? this.configService.getWorkletBasePath() : \"\") + this.workletPath;\n\n await audioContext.audioWorklet.addModule(workletPath)\n .catch(e => {\n console.error(`Error when loading Worklet (${workletPath}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`, e);\n this.fallbackToScriptProcessor = true;\n });\n }\n\n /**\n * This method checks if audio worklet are enabled\n * @param audioContext \n */\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n /**\n * Initialize the AudioWorkletNode or fallback to ScriptProcessorNode\n * @param context The audio context\n * @param workletName The worklet name\n */\n private initializeNode(context: BaseAudioContext, workletName: string) {\n if (this.isAudioWorkletEnabled() && !this.fallbackToScriptProcessor) {\n // Standard Audio Worklet\n this.currentWorkletNode = new AudioWorkletNode(context, workletName);\n } else {\n // Fallback to ScriptProcessorNode (polyfill)\n const processor = RegisterProcessorPolyfill.getProcessor(workletName);\n\n if (processor) {\n this.currentWorkletNode = new WorkletScriptProcessorNodeAdapter(context, processor, this.configService!.getBufferSize());\n } else {\n throw new Error(`No processor registered with name ${workletName} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);\n }\n }\n\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.onmessage = message => this.receiveEvent(message);\n }\n }\n\n /**\n * Apply current settings to the audio worklet node.\n * Uses the getSettings method to extract the settings.\n */\n protected applyCurrentSettingsToWorklet() {\n if (this.currentWorkletNode && this.currentWorkletNode.parameters) {\n const currentSettings = this.getSettings();\n\n for (const settingKey of Object.keys(currentSettings)) {\n const settingFromWorklet = this.currentWorkletNode.parameters.get(settingKey);\n\n if (settingFromWorklet) {\n settingFromWorklet.value = currentSettings[settingKey] as number;\n settingFromWorklet.setValueAtTime(currentSettings[settingKey] as number, 0);\n }\n }\n }\n }\n\n /** Default implementation for GetNode - AbstractAudioFilterWorklet */\n getNode(context: BaseAudioContext) {\n if (!this.keepCurrentNodeIfPossible || !this.currentWorkletNode\n || this.currentWorkletNode.context != context) {\n this.stop();\n this.initializeNode(context, this.workletName);\n }\n\n this.applyCurrentSettingsToWorklet();\n this.setEnabled(this.isEnabled());\n\n if (this.currentWorkletNode) {\n if (this.currentWorkletNode instanceof WorkletScriptProcessorNodeAdapter) {\n return {\n input: this.currentWorkletNode.node!,\n output: this.currentWorkletNode.node!,\n };\n } else {\n return {\n input: this.currentWorkletNode,\n output: this.currentWorkletNode,\n };\n }\n }\n\n throw new Error(\"Worklet node has not yet been created\");\n }\n\n /**\n * Stop the current worklet node. The worklet need to respond to \"stop\" events.\n */\n stop() {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(\"stop\");\n this.currentWorkletNode.port.onmessage = null;\n }\n\n this.currentWorkletNode = null;\n }\n\n /**\n * Pass the current disabled/enabled state to the worklet.\n * The worklet need to respond to \"enable\"/\"disable\" events.\n * @param state The current disabled/enabled state\n */\n setEnabled(state: boolean): void {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(state ? \"enable\" : \"disable\");\n }\n\n super.setEnabled(state);\n }\n\n public isWorklet(): boolean {\n return true;\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass BitCrusherProcessor extends AudioWorkletProcessor {\n private stopped = false;\n private phaser: number[] | null = null;\n private last: number[] | null = null;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"bits\", defaultValue: 16 },\n { name: \"normFreq\", defaultValue: 0.9 },\n ];\n }\n\n get defaultParameterDescriptors() {\n return BitCrusherProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n const step = 2 * Math.pow(1 / 2, parameters.bits[0]);\n const currentNormFreq = (1 - parameters.normFreq[0]) / (sampleRate / 48000);\n\n if (this.last == null) {\n this.last = new Array(input.length).fill(0);\n }\n\n if (this.phaser == null) {\n this.phaser = new Array(input.length).fill(0);\n }\n\n if (input && input[0]) {\n const blockSize = input[0].length;\n\n for (let channel = 0; channel < input.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp && out) {\n for (let i = 0; i < blockSize; i++) {\n this.phaser[channel] += currentNormFreq;\n\n if (this.phaser[channel] >= 1.0) {\n this.phaser[channel] -= 1.0;\n this.last[channel] = step * Math.floor((inp[i] * (1 / step)) + 0.5);\n }\n\n out[i] = this.last[channel];\n }\n }\n }\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n this.phaser = null;\n this.last = null;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.BITCRUSHER, BitCrusherProcessor);\n","export default class DelayBuffer {\n private _array: Float32Array = new Float32Array();\n private n: number = 0;\n private length: number = 0;\n private readPointer: number = 0;\n private writePointer: number = 0;\n\n constructor(n: number) {\n this.n = Math.floor(n);\n this.init();\n }\n\n init() {\n this._array = new Float32Array(2 * this.n);\n this.length = this._array.length;\n this.readPointer = 0;\n this.writePointer = this.n - 1;\n this._array.fill(0);\n }\n\n read() {\n const value = this._array[this.readPointer % this.length];\n this.readPointer = (this.readPointer + 1) % this.length;\n return value;\n }\n\n push(v: number) {\n this._array[this.writePointer % this.length] = v;\n this.writePointer = (this.writePointer + 1) % this.length;\n }\n\n reset() {\n this.init();\n }\n\n clear() {\n this._array = new Float32Array();\n this.length = 0;\n this.readPointer = 0;\n this.writePointer = 0;\n }\n\n sum() {\n return this._array.reduce((a, b) => a + b, 0);\n }\n}\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// Source: https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/ (https://web.archive.org/web/20220519100003/https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/)\n// Original code: https://webaudiotech.com/sites/limiter_comparison/limiter.js\n// Additions by Eliastik (eliastiksofts.com): Stereo and multi-channel support, code simplified in one object class (Limiter), converted into AudioWorklet\nimport Constants from \"../../model/Constants\";\nimport DelayBuffer from \"../../utils/DelayBuffer\";\n\nclass LimiterProcessor extends AudioWorkletProcessor {\n private delayBuffer: DelayBuffer[] = [];\n private envelopeSample = 0;\n private stopped = false;\n private disabled = false;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"reset\") {\n this.reset();\n } else if (event.data == \"stop\") {\n this.stop();\n } else if (event.data == \"disable\") {\n this.disabled = true;\n } else if (event.data == \"enable\") {\n this.disabled = false;\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"preGain\", defaultValue: 0 },\n { name: \"postGain\", defaultValue: 0 },\n { name: \"attackTime\", defaultValue: 0 },\n { name: \"releaseTime\", defaultValue: 3 },\n { name: \"threshold\", defaultValue: -0.05 },\n { name: \"lookAheadTime\", defaultValue: 0 }\n ];\n }\n\n get defaultParameterDescriptors() {\n return LimiterProcessor.parameterDescriptors;\n }\n\n getEnvelope(data: Float32Array, attackTime: number, releaseTime: number, sampleRate: number) {\n const attackGain = Math.exp(-1 / (sampleRate * attackTime));\n const releaseGain = Math.exp(-1 / (sampleRate * releaseTime));\n\n const envelope = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n const envIn = Math.abs(data[i]);\n\n if (this.envelopeSample < envIn) {\n this.envelopeSample = envIn + attackGain * (this.envelopeSample - envIn);\n } else {\n this.envelopeSample = envIn + releaseGain * (this.envelopeSample - envIn);\n }\n\n envelope[i] = this.envelopeSample;\n }\n\n return envelope;\n }\n\n getMaxEnvelope(envelope: Float32Array[], channels: number, index: number) {\n let max = envelope[0][index];\n\n for (let channel = 0; channel < channels; channel++) {\n if (envelope[channel][index] > max) {\n max = envelope[channel][index];\n }\n }\n\n return max;\n }\n\n ampToDB(value: number) {\n return 20 * Math.log10(value);\n }\n\n dBToAmp(db: number) {\n return Math.pow(10, db / 20);\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const inputBuffer = inputs[0];\n const outputBuffer = outputs[0];\n const envelopeData = [];\n\n // transform db to amplitude value\n const postGainAmp = this.dBToAmp(parameters.postGain[0]);\n const preGainAmp = this.dBToAmp(parameters.preGain[0]);\n\n // apply pre gain to signal\n // compute the envelope for each channel\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n // create a delay buffer\n if (this.delayBuffer[channel] == null) {\n this.delayBuffer[channel] = new DelayBuffer(parameters.lookAheadTime[0] * sampleRate);\n }\n\n // apply pre gain to signal\n if (inp && out) {\n for (let k = 0; k < inp.length; ++k) {\n if (!this.disabled) {\n out[k] = preGainAmp * inp[k];\n } else {\n out[k] = inp[k];\n }\n }\n }\n\n // compute the envelope\n if (!this.disabled && out) {\n envelopeData[channel] = this.getEnvelope(out, parameters.attackTime[0], parameters.releaseTime[0], sampleRate);\n }\n }\n\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n if (parameters.lookAheadTime[0] > 0 && out) {\n // write signal into buffer and read delayed signal\n for (let i = 0; i < out.length; i++) {\n this.delayBuffer[channel].push(out[i]);\n out[i] = this.delayBuffer[channel].read();\n }\n }\n\n // If disabled we don't apply the limitation to the audio\n if (this.disabled) {\n continue;\n }\n\n // limiter mode: slope is 1\n const slope = 1;\n\n if (inp && out) {\n for (let i = 0; i < inp.length; i++) {\n let gainDB = slope * (parameters.threshold[0] - this.ampToDB(this.getMaxEnvelope(envelopeData, outputBuffer.length, i))); // max gain\n\n // is gain below zero?\n gainDB = Math.min(0, gainDB);\n const gain = this.dBToAmp(gainDB);\n out[i] *= (gain * postGainAmp);\n }\n }\n }\n\n return true;\n }\n\n reset() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].reset();\n }\n }\n\n this.envelopeSample = 0;\n }\n\n stop() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].clear();\n }\n }\n\n this.delayBuffer = [];\n this.envelopeSample = 0;\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.LIMITER, LimiterProcessor);\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport LimiterSettings from \"../model/filtersSettings/LimiterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/Limiter.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LimiterFilter extends AbstractAudioFilterWorklet {\n private preGain = 0; // dB\n private postGain = 0; // dB\n private attackTime = 0; // s\n private releaseTime = 3; // s\n private threshold = -0.05; // dB\n private lookAheadTime = 0.1; // s\n\n constructor() {\n super();\n this.keepCurrentNodeIfPossible = true;\n this.enable();\n this.setDefaultEnabled(true);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.LIMITER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.LIMITER;\n }\n\n get order(): number {\n return 11;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LIMITER;\n }\n\n getAddingTime() {\n return this.lookAheadTime;\n }\n\n getSettings(): LimiterSettings {\n return {\n preGain: this.preGain,\n postGain: this.postGain,\n attackTime: this.attackTime,\n releaseTime: this.releaseTime,\n threshold: this.threshold,\n lookAheadTime: this.lookAheadTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"preGain\":\n this.preGain = parseFloat(value as string);\n break;\n case \"postGain\":\n this.postGain = parseFloat(value as string);\n break;\n case \"attackTime\":\n this.attackTime = parseFloat(value as string);\n break;\n case \"releaseTime\":\n this.releaseTime = parseFloat(value as string);\n break;\n case \"threshold\":\n this.threshold = parseFloat(value as string);\n break;\n case \"lookAheadTime\":\n this.lookAheadTime = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","/*\n * SoundTouch JS v0.1.30 audio processing library\n * Copyright (c) Olli Parviainen\n * Copyright (c) Ryan Berdeen\n * Copyright (c) Jakub Fiala\n * Copyright (c) Steve 'Cutter' Blades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n */\n\nclass FifoSampleBuffer {\n constructor() {\n this._vector = new Float32Array();\n this._position = 0;\n this._frameCount = 0;\n }\n get vector() {\n return this._vector;\n }\n get position() {\n return this._position;\n }\n get startIndex() {\n return this._position * 2;\n }\n get frameCount() {\n return this._frameCount;\n }\n get endIndex() {\n return (this._position + this._frameCount) * 2;\n }\n clear() {\n this.receive(this._frameCount);\n this.rewind();\n }\n put(numFrames) {\n this._frameCount += numFrames;\n }\n putSamples(samples, position, numFrames = 0) {\n position = position || 0;\n const sourceOffset = position * 2;\n if (!(numFrames >= 0)) {\n numFrames = (samples.length - sourceOffset) / 2;\n }\n const numSamples = numFrames * 2;\n this.ensureCapacity(numFrames + this._frameCount);\n const destOffset = this.endIndex;\n this.vector.set(samples.subarray(sourceOffset, sourceOffset + numSamples), destOffset);\n this._frameCount += numFrames;\n }\n putBuffer(buffer, position, numFrames = 0) {\n position = position || 0;\n if (!(numFrames >= 0)) {\n numFrames = buffer.frameCount - position;\n }\n this.putSamples(buffer.vector, buffer.position + position, numFrames);\n }\n receive(numFrames) {\n if (!(numFrames >= 0) || numFrames > this._frameCount) {\n numFrames = this.frameCount;\n }\n this._frameCount -= numFrames;\n this._position += numFrames;\n }\n receiveSamples(output, numFrames = 0) {\n const numSamples = numFrames * 2;\n const sourceOffset = this.startIndex;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n this.receive(numFrames);\n }\n extract(output, position = 0, numFrames = 0) {\n const sourceOffset = this.startIndex + position * 2;\n const numSamples = numFrames * 2;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n }\n ensureCapacity(numFrames = 0) {\n const minLength = parseInt(numFrames * 2);\n if (this._vector.length < minLength) {\n const newVector = new Float32Array(minLength);\n newVector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._vector = newVector;\n this._position = 0;\n } else {\n this.rewind();\n }\n }\n ensureAdditionalCapacity(numFrames = 0) {\n this.ensureCapacity(this._frameCount + numFrames);\n }\n rewind() {\n if (this._position > 0) {\n this._vector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._position = 0;\n }\n }\n}\n\nclass AbstractFifoSamplePipe {\n constructor(createBuffers) {\n if (createBuffers) {\n this._inputBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n } else {\n this._inputBuffer = this._outputBuffer = null;\n }\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n set inputBuffer(inputBuffer) {\n this._inputBuffer = inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n set outputBuffer(outputBuffer) {\n this._outputBuffer = outputBuffer;\n }\n clear() {\n this._inputBuffer.clear();\n this._outputBuffer.clear();\n }\n}\n\nclass RateTransposer extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this.reset();\n this._rate = 1;\n }\n set rate(rate) {\n this._rate = rate;\n }\n reset() {\n this.slopeCount = 0;\n this.prevSampleL = 0;\n this.prevSampleR = 0;\n }\n clone() {\n const result = new RateTransposer();\n result.rate = this._rate;\n return result;\n }\n process() {\n const numFrames = this._inputBuffer.frameCount;\n this._outputBuffer.ensureAdditionalCapacity(numFrames / this._rate + 1);\n const numFramesOutput = this.transpose(numFrames);\n this._inputBuffer.receive();\n this._outputBuffer.put(numFramesOutput);\n }\n transpose(numFrames = 0) {\n if (numFrames === 0) {\n return 0;\n }\n const src = this._inputBuffer.vector;\n const srcOffset = this._inputBuffer.startIndex;\n const dest = this._outputBuffer.vector;\n const destOffset = this._outputBuffer.endIndex;\n let used = 0;\n let i = 0;\n while (this.slopeCount < 1.0) {\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * this.prevSampleL + this.slopeCount * src[srcOffset];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * this.prevSampleR + this.slopeCount * src[srcOffset + 1];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n this.slopeCount -= 1.0;\n if (numFrames !== 1) {\n out: while (true) {\n while (this.slopeCount > 1.0) {\n this.slopeCount -= 1.0;\n used = used + 1;\n if (used >= numFrames - 1) {\n break out;\n }\n }\n const srcIndex = srcOffset + 2 * used;\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * src[srcIndex] + this.slopeCount * src[srcIndex + 2];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * src[srcIndex + 1] + this.slopeCount * src[srcIndex + 3];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n }\n this.prevSampleL = src[srcOffset + 2 * numFrames - 2];\n this.prevSampleR = src[srcOffset + 2 * numFrames - 1];\n return i;\n }\n}\n\nclass FilterSupport {\n constructor(pipe) {\n this._pipe = pipe;\n }\n get pipe() {\n return this._pipe;\n }\n get inputBuffer() {\n return this._pipe.inputBuffer;\n }\n get outputBuffer() {\n return this._pipe.outputBuffer;\n }\n fillInputBuffer() {\n throw new Error('fillInputBuffer() not overridden');\n }\n fillOutputBuffer(numFrames = 0) {\n while (this.outputBuffer.frameCount < numFrames) {\n const numInputFrames = 8192 * 2 - this.inputBuffer.frameCount;\n this.fillInputBuffer(numInputFrames);\n if (this.inputBuffer.frameCount < 8192 * 2) {\n break;\n }\n this._pipe.process();\n }\n }\n clear() {\n this._pipe.clear();\n }\n}\n\nconst noop = function () {\n return;\n};\n\nclass SimpleFilter extends FilterSupport {\n constructor(sourceSound, pipe, callback = noop) {\n super(pipe);\n this.callback = callback;\n this.sourceSound = sourceSound;\n this.historyBufferSize = 22050;\n this._sourcePosition = 0;\n this.outputBufferPosition = 0;\n this._position = 0;\n }\n get position() {\n return this._position;\n }\n set position(position) {\n if (position > this._position) {\n throw new RangeError('New position may not be greater than current position');\n }\n const newOutputBufferPosition = this.outputBufferPosition - (this._position - position);\n if (newOutputBufferPosition < 0) {\n throw new RangeError('New position falls outside of history buffer');\n }\n this.outputBufferPosition = newOutputBufferPosition;\n this._position = position;\n }\n get sourcePosition() {\n return this._sourcePosition;\n }\n set sourcePosition(sourcePosition) {\n this.clear();\n this._sourcePosition = sourcePosition;\n }\n onEnd() {\n this.callback();\n }\n fillInputBuffer(numFrames = 0) {\n const samples = new Float32Array(numFrames * 2);\n const numFramesExtracted = this.sourceSound.extract(samples, numFrames, this._sourcePosition);\n this._sourcePosition += numFramesExtracted;\n this.inputBuffer.putSamples(samples, 0, numFramesExtracted);\n }\n extract(target, numFrames = 0) {\n this.fillOutputBuffer(this.outputBufferPosition + numFrames);\n const numFramesExtracted = Math.min(numFrames, this.outputBuffer.frameCount - this.outputBufferPosition);\n this.outputBuffer.extract(target, this.outputBufferPosition, numFramesExtracted);\n const currentFrames = this.outputBufferPosition + numFramesExtracted;\n this.outputBufferPosition = Math.min(this.historyBufferSize, currentFrames);\n this.outputBuffer.receive(Math.max(currentFrames - this.historyBufferSize, 0));\n this._position += numFramesExtracted;\n return numFramesExtracted;\n }\n handleSampleData(event) {\n this.extract(event.data, 4096);\n }\n clear() {\n super.clear();\n this.outputBufferPosition = 0;\n }\n}\n\nconst USE_AUTO_SEQUENCE_LEN = 0;\nconst DEFAULT_SEQUENCE_MS = USE_AUTO_SEQUENCE_LEN;\nconst USE_AUTO_SEEKWINDOW_LEN = 0;\nconst DEFAULT_SEEKWINDOW_MS = USE_AUTO_SEEKWINDOW_LEN;\nconst DEFAULT_OVERLAP_MS = 8;\nconst _SCAN_OFFSETS = [[124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806, 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0], [-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];\nconst AUTOSEQ_TEMPO_LOW = 0.5;\nconst AUTOSEQ_TEMPO_TOP = 2.0;\nconst AUTOSEQ_AT_MIN = 125.0;\nconst AUTOSEQ_AT_MAX = 50.0;\nconst AUTOSEQ_K = (AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEQ_C = AUTOSEQ_AT_MIN - AUTOSEQ_K * AUTOSEQ_TEMPO_LOW;\nconst AUTOSEEK_AT_MIN = 25.0;\nconst AUTOSEEK_AT_MAX = 15.0;\nconst AUTOSEEK_K = (AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEEK_C = AUTOSEEK_AT_MIN - AUTOSEEK_K * AUTOSEQ_TEMPO_LOW;\nclass Stretch extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this._quickSeek = true;\n this.midBufferDirty = false;\n this.midBuffer = null;\n this.overlapLength = 0;\n this.autoSeqSetting = true;\n this.autoSeekSetting = true;\n this._tempo = 1;\n this.setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);\n }\n clear() {\n super.clear();\n this.clearMidBuffer();\n }\n clearMidBuffer() {\n if (this.midBufferDirty) {\n this.midBufferDirty = false;\n this.midBuffer = null;\n }\n }\n setParameters(sampleRate, sequenceMs, seekWindowMs, overlapMs) {\n if (sampleRate > 0) {\n this.sampleRate = sampleRate;\n }\n if (overlapMs > 0) {\n this.overlapMs = overlapMs;\n }\n if (sequenceMs > 0) {\n this.sequenceMs = sequenceMs;\n this.autoSeqSetting = false;\n } else {\n this.autoSeqSetting = true;\n }\n if (seekWindowMs > 0) {\n this.seekWindowMs = seekWindowMs;\n this.autoSeekSetting = false;\n } else {\n this.autoSeekSetting = true;\n }\n this.calculateSequenceParameters();\n this.calculateOverlapLength(this.overlapMs);\n this.tempo = this._tempo;\n }\n set tempo(newTempo) {\n let intskip;\n this._tempo = newTempo;\n this.calculateSequenceParameters();\n this.nominalSkip = this._tempo * (this.seekWindowLength - this.overlapLength);\n this.skipFract = 0;\n intskip = Math.floor(this.nominalSkip + 0.5);\n this.sampleReq = Math.max(intskip + this.overlapLength, this.seekWindowLength) + this.seekLength;\n }\n get tempo() {\n return this._tempo;\n }\n get inputChunkSize() {\n return this.sampleReq;\n }\n get outputChunkSize() {\n return this.overlapLength + Math.max(0, this.seekWindowLength - 2 * this.overlapLength);\n }\n calculateOverlapLength(overlapInMsec = 0) {\n let newOvl;\n newOvl = this.sampleRate * overlapInMsec / 1000;\n newOvl = newOvl < 16 ? 16 : newOvl;\n newOvl -= newOvl % 8;\n this.overlapLength = newOvl;\n this.refMidBuffer = new Float32Array(this.overlapLength * 2);\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n }\n checkLimits(x, mi, ma) {\n return x < mi ? mi : x > ma ? ma : x;\n }\n calculateSequenceParameters() {\n let seq;\n let seek;\n if (this.autoSeqSetting) {\n seq = AUTOSEQ_C + AUTOSEQ_K * this._tempo;\n seq = this.checkLimits(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);\n this.sequenceMs = Math.floor(seq + 0.5);\n }\n if (this.autoSeekSetting) {\n seek = AUTOSEEK_C + AUTOSEEK_K * this._tempo;\n seek = this.checkLimits(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);\n this.seekWindowMs = Math.floor(seek + 0.5);\n }\n this.seekWindowLength = Math.floor(this.sampleRate * this.sequenceMs / 1000);\n this.seekLength = Math.floor(this.sampleRate * this.seekWindowMs / 1000);\n }\n set quickSeek(enable) {\n this._quickSeek = enable;\n }\n clone() {\n const result = new Stretch();\n result.tempo = this._tempo;\n result.setParameters(this.sampleRate, this.sequenceMs, this.seekWindowMs, this.overlapMs);\n return result;\n }\n seekBestOverlapPosition() {\n return this._quickSeek ? this.seekBestOverlapPositionStereoQuick() : this.seekBestOverlapPositionStereo();\n }\n seekBestOverlapPositionStereo() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let i = 0;\n this.preCalculateCorrelationReferenceStereo();\n bestOffset = 0;\n bestCorrelation = Number.MIN_VALUE;\n for (; i < this.seekLength; i = i + 1) {\n correlation = this.calculateCrossCorrelationStereo(2 * i, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = i;\n }\n }\n return bestOffset;\n }\n seekBestOverlapPositionStereoQuick() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let scanCount = 0;\n let correlationOffset;\n let tempOffset;\n this.preCalculateCorrelationReferenceStereo();\n bestCorrelation = Number.MIN_VALUE;\n bestOffset = 0;\n correlationOffset = 0;\n tempOffset = 0;\n for (; scanCount < 4; scanCount = scanCount + 1) {\n let j = 0;\n while (_SCAN_OFFSETS[scanCount][j]) {\n tempOffset = correlationOffset + _SCAN_OFFSETS[scanCount][j];\n if (tempOffset >= this.seekLength) {\n break;\n }\n correlation = this.calculateCrossCorrelationStereo(2 * tempOffset, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = tempOffset;\n }\n j = j + 1;\n }\n correlationOffset = bestOffset;\n }\n return bestOffset;\n }\n preCalculateCorrelationReferenceStereo() {\n let i = 0;\n let context;\n let temp;\n for (; i < this.overlapLength; i = i + 1) {\n temp = i * (this.overlapLength - i);\n context = i * 2;\n this.refMidBuffer[context] = this.midBuffer[context] * temp;\n this.refMidBuffer[context + 1] = this.midBuffer[context + 1] * temp;\n }\n }\n calculateCrossCorrelationStereo(mixingPosition, compare) {\n const mixing = this._inputBuffer.vector;\n mixingPosition += this._inputBuffer.startIndex;\n let correlation = 0;\n let i = 2;\n const calcLength = 2 * this.overlapLength;\n let mixingOffset;\n for (; i < calcLength; i = i + 2) {\n mixingOffset = i + mixingPosition;\n correlation += mixing[mixingOffset] * compare[i] + mixing[mixingOffset + 1] * compare[i + 1];\n }\n return correlation;\n }\n overlap(overlapPosition) {\n this.overlapStereo(2 * overlapPosition);\n }\n overlapStereo(inputPosition) {\n const input = this._inputBuffer.vector;\n inputPosition += this._inputBuffer.startIndex;\n const output = this._outputBuffer.vector;\n const outputPosition = this._outputBuffer.endIndex;\n let i = 0;\n let context;\n let tempFrame;\n const frameScale = 1 / this.overlapLength;\n let fi;\n let inputOffset;\n let outputOffset;\n for (; i < this.overlapLength; i = i + 1) {\n tempFrame = (this.overlapLength - i) * frameScale;\n fi = i * frameScale;\n context = 2 * i;\n inputOffset = context + inputPosition;\n outputOffset = context + outputPosition;\n output[outputOffset + 0] = input[inputOffset + 0] * fi + this.midBuffer[context + 0] * tempFrame;\n output[outputOffset + 1] = input[inputOffset + 1] * fi + this.midBuffer[context + 1] * tempFrame;\n }\n }\n process() {\n let offset;\n let temp;\n let overlapSkip;\n if (this.midBuffer === null) {\n if (this._inputBuffer.frameCount < this.overlapLength) {\n return;\n }\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n this._inputBuffer.receiveSamples(this.midBuffer, this.overlapLength);\n }\n while (this._inputBuffer.frameCount >= this.sampleReq) {\n offset = this.seekBestOverlapPosition();\n this._outputBuffer.ensureAdditionalCapacity(this.overlapLength);\n this.overlap(Math.floor(offset));\n this._outputBuffer.put(this.overlapLength);\n temp = this.seekWindowLength - 2 * this.overlapLength;\n if (temp > 0) {\n this._outputBuffer.putBuffer(this._inputBuffer, offset + this.overlapLength, temp);\n }\n const start = this._inputBuffer.startIndex + 2 * (offset + this.seekWindowLength - this.overlapLength);\n this.midBuffer.set(this._inputBuffer.vector.subarray(start, start + 2 * this.overlapLength));\n this.skipFract += this.nominalSkip;\n overlapSkip = Math.floor(this.skipFract);\n this.skipFract -= overlapSkip;\n this._inputBuffer.receive(overlapSkip);\n }\n }\n}\n\nconst testFloatEqual = function (a, b) {\n return (a > b ? a - b : b - a) > 1e-10;\n};\n\nclass SoundTouch {\n constructor() {\n this.transposer = new RateTransposer(false);\n this.stretch = new Stretch(false);\n this._inputBuffer = new FifoSampleBuffer();\n this._intermediateBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n this._rate = 0;\n this._tempo = 0;\n this.virtualPitch = 1.0;\n this.virtualRate = 1.0;\n this.virtualTempo = 1.0;\n this.calculateEffectiveRateAndTempo();\n }\n clear() {\n this.transposer.clear();\n this.stretch.clear();\n }\n clone() {\n const result = new SoundTouch();\n result.rate = this.rate;\n result.tempo = this.tempo;\n return result;\n }\n get rate() {\n return this._rate;\n }\n set rate(rate) {\n this.virtualRate = rate;\n this.calculateEffectiveRateAndTempo();\n }\n set rateChange(rateChange) {\n this._rate = 1.0 + 0.01 * rateChange;\n }\n get tempo() {\n return this._tempo;\n }\n set tempo(tempo) {\n this.virtualTempo = tempo;\n this.calculateEffectiveRateAndTempo();\n }\n set tempoChange(tempoChange) {\n this.tempo = 1.0 + 0.01 * tempoChange;\n }\n set pitch(pitch) {\n this.virtualPitch = pitch;\n this.calculateEffectiveRateAndTempo();\n }\n set pitchOctaves(pitchOctaves) {\n this.pitch = Math.exp(0.69314718056 * pitchOctaves);\n this.calculateEffectiveRateAndTempo();\n }\n set pitchSemitones(pitchSemitones) {\n this.pitchOctaves = pitchSemitones / 12.0;\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n calculateEffectiveRateAndTempo() {\n const previousTempo = this._tempo;\n const previousRate = this._rate;\n this._tempo = this.virtualTempo / this.virtualPitch;\n this._rate = this.virtualRate * this.virtualPitch;\n if (testFloatEqual(this._tempo, previousTempo)) {\n this.stretch.tempo = this._tempo;\n }\n if (testFloatEqual(this._rate, previousRate)) {\n this.transposer.rate = this._rate;\n }\n if (this._rate > 1.0) {\n if (this._outputBuffer != this.transposer.outputBuffer) {\n this.stretch.inputBuffer = this._inputBuffer;\n this.stretch.outputBuffer = this._intermediateBuffer;\n this.transposer.inputBuffer = this._intermediateBuffer;\n this.transposer.outputBuffer = this._outputBuffer;\n }\n } else {\n if (this._outputBuffer != this.stretch.outputBuffer) {\n this.transposer.inputBuffer = this._inputBuffer;\n this.transposer.outputBuffer = this._intermediateBuffer;\n this.stretch.inputBuffer = this._intermediateBuffer;\n this.stretch.outputBuffer = this._outputBuffer;\n }\n }\n }\n process() {\n if (this._rate > 1.0) {\n this.stretch.process();\n this.transposer.process();\n } else {\n this.transposer.process();\n this.stretch.process();\n }\n }\n}\n\nclass WebAudioBufferSource {\n constructor(buffer) {\n this.buffer = buffer;\n this._position = 0;\n }\n get dualChannel() {\n return this.buffer.numberOfChannels > 1;\n }\n get position() {\n return this._position;\n }\n set position(value) {\n this._position = value;\n }\n extract(target, numFrames = 0, position = 0) {\n this.position = position;\n let left = this.buffer.getChannelData(0);\n let right = this.dualChannel ? this.buffer.getChannelData(1) : this.buffer.getChannelData(0);\n let i = 0;\n for (; i < numFrames; i++) {\n target[i * 2] = left[i + position];\n target[i * 2 + 1] = right[i + position];\n }\n return Math.min(numFrames, left.length - position);\n }\n}\n\nconst getWebAudioNode = function (context, filter, sourcePositionCallback = noop, bufferSize = 4096) {\n const node = context.createScriptProcessor(bufferSize, 2, 2);\n const samples = new Float32Array(bufferSize * 2);\n node.onaudioprocess = event => {\n let left = event.outputBuffer.getChannelData(0);\n let right = event.outputBuffer.getChannelData(1);\n let framesExtracted = filter.extract(samples, bufferSize);\n sourcePositionCallback(filter.sourcePosition);\n if (framesExtracted === 0) {\n filter.onEnd();\n }\n let i = 0;\n for (; i < framesExtracted; i++) {\n left[i] = samples[i * 2];\n right[i] = samples[i * 2 + 1];\n }\n };\n return node;\n};\n\nconst pad = function (n, width, z) {\n z = z || '0';\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n};\nconst minsSecs = function (secs) {\n const mins = Math.floor(secs / 60);\n const seconds = secs - mins * 60;\n return `${mins}:${pad(parseInt(seconds), 2)}`;\n};\n\nconst onUpdate = function (sourcePosition) {\n const currentTimePlayed = this.timePlayed;\n const sampleRate = this.sampleRate;\n this.sourcePosition = sourcePosition;\n this.timePlayed = sourcePosition / sampleRate;\n if (currentTimePlayed !== this.timePlayed) {\n const timePlayed = new CustomEvent('play', {\n detail: {\n timePlayed: this.timePlayed,\n formattedTimePlayed: this.formattedTimePlayed,\n percentagePlayed: this.percentagePlayed\n }\n });\n this._node.dispatchEvent(timePlayed);\n }\n};\nclass PitchShifter {\n constructor(context, buffer, bufferSize, onEnd = noop) {\n this._soundtouch = new SoundTouch();\n const source = new WebAudioBufferSource(buffer);\n this.timePlayed = 0;\n this.sourcePosition = 0;\n this._filter = new SimpleFilter(source, this._soundtouch, onEnd);\n this._node = getWebAudioNode(context, this._filter, sourcePostion => onUpdate.call(this, sourcePostion), bufferSize);\n this.tempo = 1;\n this.rate = 1;\n this.duration = buffer.duration;\n this.sampleRate = context.sampleRate;\n this.listeners = [];\n }\n get formattedDuration() {\n return minsSecs(this.duration);\n }\n get formattedTimePlayed() {\n return minsSecs(this.timePlayed);\n }\n get percentagePlayed() {\n return 100 * this._filter.sourcePosition / (this.duration * this.sampleRate);\n }\n set percentagePlayed(perc) {\n this._filter.sourcePosition = parseInt(perc * this.duration * this.sampleRate);\n this.sourcePosition = this._filter.sourcePosition;\n this.timePlayed = this.sourcePosition / this.sampleRate;\n }\n get node() {\n return this._node;\n }\n set pitch(pitch) {\n this._soundtouch.pitch = pitch;\n }\n set pitchSemitones(semitone) {\n this._soundtouch.pitchSemitones = semitone;\n }\n set rate(rate) {\n this._soundtouch.rate = rate;\n }\n set tempo(tempo) {\n this._soundtouch.tempo = tempo;\n }\n connect(toNode) {\n this._node.connect(toNode);\n }\n disconnect() {\n this._node.disconnect();\n }\n on(eventName, cb) {\n this.listeners.push({\n name: eventName,\n cb: cb\n });\n this._node.addEventListener(eventName, event => cb(event.detail));\n }\n off(eventName = null) {\n let listeners = this.listeners;\n if (eventName) {\n listeners = listeners.filter(e => e.name === eventName);\n }\n listeners.forEach(e => {\n this._node.removeEventListener(e.name, event => e.cb(event.detail));\n });\n }\n}\n\nexport { AbstractFifoSamplePipe, PitchShifter, RateTransposer, SimpleFilter, SoundTouch, Stretch, WebAudioBufferSource, getWebAudioNode };\n//# sourceMappingURL=soundtouch.js.map\n","import SoundtouchWorkletMessage from \"../../model/SoundtouchWorkletMessage\";\nimport { SoundtouchWorkletOptionsWrapper } from \"../../model/SoundtouchWorkletOptionsWrapper\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet soundtouchWrapperFilterWorkletNodeClass: any;\n\nif(typeof(window) !== \"undefined\" && typeof(window.AudioWorkletNode) !== \"undefined\") {\n soundtouchWrapperFilterWorkletNodeClass = class SoundtouchWrapperFilterWorkletNode extends AudioWorkletNode {\n\n name: string = \"\";\n private running = false;\n private _tempo = 1;\n private _pitch = 1;\n\n constructor(context: BaseAudioContext, workletName: string, options: SoundtouchWorkletOptionsWrapper) {\n super(context, workletName, options);\n this.name = this.constructor.name;\n this.running = true;\n this.updateInterval = options.processorOptions.updateInterval;\n }\n\n async setup(tempo: number, pitch: number): Promise {\n return new Promise(resolve => {\n if(this.port) {\n this.port.onmessage = (ev: MessageEvent) => {\n if(ev && ev.data && ev.data.status === \"OK\" && ev.data.args[0] === \"setup\") {\n this.port.onmessage = this.messageProcessor.bind(this);\n resolve();\n }\n };\n \n this.port.postMessage({ command: \"setup\", args: [tempo, pitch] });\n\n this._tempo = tempo;\n this._pitch = pitch;\n }\n });\n }\n\n set updateInterval(value: number) {\n this.port.postMessage({ command: \"updateInterval\", args: [value] });\n }\n\n get node() {\n return this;\n }\n\n set tempo(value: number) {\n this.port.postMessage({ command: \"setTempo\", args: [value] });\n }\n\n set pitch(value: number) {\n this.port.postMessage({ command: \"setPitch\", args: [value] });\n }\n\n get tempo(): number {\n this.port.postMessage({ command: \"getTempo\", args: [] });\n return this._tempo;\n }\n\n get pitch(): number {\n this.port.postMessage({ command: \"getPitch\", args: [] });\n return this._pitch;\n }\n\n async stop() {\n if (!this.running) return;\n\n this.port.postMessage({ command: \"stop\", args: [] });\n this.disconnect();\n\n this.running = false;\n }\n\n messageProcessor(e: MessageEvent) {\n if (e.data.command) {\n const { command } = e.data;\n \n switch (command) {\n case \"End\":\n this.stop();\n break;\n default:\n break;\n }\n\n if (e.data.status) {\n const value = e.data.args[1];\n\n switch (e.data.args[0]) {\n case \"getTempo\":\n this._tempo = value as number;\n break;\n case \"getPitch\":\n this._pitch = value as number;\n break;\n default:\n break;\n }\n return;\n }\n }\n }\n };\n}\n\nexport default soundtouchWrapperFilterWorkletNodeClass;\n","/*\n * Copyright (c) 2012 The Chromium Authors. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Copyright (C) 2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\ninterface VocoderBand {\n frequency: number;\n}\n\nexport default class Vocoder {\n\n private FILTER_QUALITY = 6; // The Q value for the carrier and modulator filters\n private FOURIER_SIZE = 4096;\n private WAVETABLEBOOST = 40.0;\n private SAWTOOTHBOOST = 0.40;\n private oscillatorType = 4; // CUSTOM\n private oscillatorDetuneValue = 0;\n\n private audioContext: BaseAudioContext | null = null;\n private modulatorBuffer: AudioBuffer | undefined;\n private carrierBuffer: AudioBuffer | null = null;\n private modulatorNode: AudioBufferSourceNode | null = null;\n private vocoding = false;\n\n // These are \"placeholder\" gain nodes - because the modulator and carrier will get swapped in\n // as they are loaded, it's easier to connect these nodes to all the bands, and the \"real\"\n // modulator & carrier AudioBufferSourceNodes connect to these.\n private modulatorInput: GainNode | null = null;\n private carrierInput: GainNode | null = null;\n\n private modulatorGain: GainNode | null = null;\n private modulatorGainValue = 1.0;\n\n // noise node added to the carrier signal\n private noiseBuffer: AudioBuffer | null = null;\n private noiseNode: AudioBufferSourceNode | null = null;\n private noiseGain: GainNode | null = null;\n private noiseGainValue = 0.2;\n\n // Carrier sample gain\n private carrierSampleNode: AudioBufferSourceNode | null = null;\n private carrierSampleGain: GainNode | null = null;\n private carrierSampleGainValue = 0.0;\n\n // Carrier Synth oscillator stuff\n private oscillatorNode: OscillatorNode | null = null;\n private oscillatorGain: GainNode | null = null;\n private oscillatorGainValue = 1.0;\n private wavetable: PeriodicWave | null = null;\n private wavetableSignalGain: GainNode | null = null;\n\n // These are the arrays of nodes - the \"columns\" across the frequency band \"rows\"\n private modFilterBands: BiquadFilterNode[] | null = null; // tuned bandpass filters\n private modFilterPostGains: GainNode[] | null = null; // post-filter gains.\n private heterodynes: GainNode[] | null = null; // gain nodes used to multiply bandpass X sine\n private powers: number[] | null = null; // gain nodes used to multiply prev out by itself\n private lpFilters: BiquadFilterNode[] | null = null; // tuned LP filters to remove doubled copy of product\n private lpFilterPostGains: GainNode[] | null = null; // gain nodes for tuning input to waveshapers\n private carrierBands: BiquadFilterNode[] | null = null; // tuned bandpass filters, same as modFilterBands but in carrier chain\n private carrierFilterPostGains: GainNode[] | null = null; // post-bandpass gain adjustment\n private carrierBandGains: GainNode[] | null = null; // these are the \"control gains\" driven by the lpFilters\n\n private vocoderBands: VocoderBand[] | null = null;\n private numVocoderBands: number = 0;\n\n private hpFilterGain: GainNode | null = null;\n private outputGain: GainNode | null = null;\n\n // Initialization function for the page.\n constructor(ctx: BaseAudioContext, carrierB: AudioBuffer, modulatorB?: AudioBuffer) {\n this.audioContext = ctx;\n this.carrierBuffer = carrierB;\n this.modulatorBuffer = modulatorB;\n }\n\n init() {\n this.generateVocoderBands(55, 7040, 28);\n // Set up the vocoder chains\n this.setupVocoderGraph();\n this.vocode();\n }\n\n getNodes() {\n return {\n modulatorNode: this.modulatorNode,\n modulatorGain: this.modulatorGain,\n synthLevel: this.oscillatorGain,\n noiseNode: this.noiseGain,\n oscillatorNode: this.oscillatorNode,\n hpFilterGain: this.hpFilterGain,\n outputGain: this.outputGain\n };\n }\n\n private shutOffCarrier() {\n if (this.oscillatorNode && this.noiseNode && this.carrierSampleNode) {\n this.oscillatorNode.stop(0);\n this.oscillatorNode = null;\n this.noiseNode.stop(0);\n this.noiseNode = null;\n this.carrierSampleNode.stop(0);\n this.carrierSampleNode = null;\n }\n }\n\n selectSawtooth() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n if (this.oscillatorNode)\n this.oscillatorNode.type = \"sawtooth\";\n }\n\n selectWavetable() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n if (this.oscillatorNode && this.wavetable)\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n }\n\n updateModGain(value: number) {\n this.modulatorGainValue = value;\n if (this.modulatorGain)\n this.modulatorGain.gain.value = value;\n }\n\n // sample-based carrier\n updateSampleLevel(value: number) {\n this.carrierSampleGainValue = value;\n if (this.carrierSampleGain)\n this.carrierSampleGain.gain.value = value;\n }\n\n // noise in carrier\n updateSynthLevel(value: number) {\n this.oscillatorGainValue = value;\n if (this.oscillatorGain)\n this.oscillatorGain.gain.value = value;\n }\n\n // noise in carrier\n updateNoiseLevel(value: number) {\n this.noiseGainValue = value;\n if (this.noiseGain)\n this.noiseGain.gain.value = value;\n }\n\n updateDetuneValue(value: number) {\n this.oscillatorDetuneValue = value;\n if (this.oscillatorNode)\n this.oscillatorNode.detune.value = value;\n }\n\n // this will algorithmically re-calculate vocoder bands, distributing evenly\n // from startFreq to endFreq, splitting evenly (logarhythmically) into a given numBands.\n // The function places this info into the global vocoderBands and numVocoderBands letiables.\n private generateVocoderBands(startFreq: number, endFreq: number, numBands: number) {\n // Remember: 1200 cents in octave, 100 cents per semitone\n\n const totalRangeInCents = 1200 * Math.log(endFreq / startFreq) / Math.LN2;\n const centsPerBand = totalRangeInCents / numBands;\n const scale = Math.pow(2, centsPerBand / 1200); // This is the scaling for successive bands\n\n this.vocoderBands = [];\n let currentFreq = startFreq;\n\n for (let i = 0; i < numBands; i++) {\n this.vocoderBands[i] = { frequency: currentFreq };\n //console.log( \"Band \" + i + \" centered at \" + currentFreq + \"Hz\" );\n currentFreq = currentFreq * scale;\n }\n\n this.numVocoderBands = numBands;\n }\n\n private loadNoiseBuffer() { // create a 5-second buffer of noise\n if (!this.audioContext) return;\n\n const lengthInSamples = 5 * this.audioContext.sampleRate;\n this.noiseBuffer = this.audioContext.createBuffer(1, lengthInSamples, this.audioContext.sampleRate);\n const bufferData = this.noiseBuffer.getChannelData(0);\n\n for (let i = 0; i < lengthInSamples; ++i) {\n bufferData[i] = (2 * Math.random() - 1); // -1 to +1\n }\n }\n\n private initBandpassFilters() {\n if (!this.audioContext) return;\n\n // When this function is called, the carrierNode and modulatorAnalyser\n // may not already be created. Create placeholder nodes for them.\n this.modulatorInput = this.audioContext.createGain();\n this.carrierInput = this.audioContext.createGain();\n\n if (this.modFilterBands == null)\n this.modFilterBands = [];\n\n if (this.modFilterPostGains == null)\n this.modFilterPostGains = [];\n\n if (this.heterodynes == null)\n this.heterodynes = [];\n\n if (this.powers == null)\n this.powers = [];\n\n if (this.lpFilters == null)\n this.lpFilters = [];\n\n if (this.lpFilterPostGains == null)\n this.lpFilterPostGains = [];\n\n if (this.carrierBands == null)\n this.carrierBands = [];\n\n if (this.carrierFilterPostGains == null)\n this.carrierFilterPostGains = [];\n\n if (this.carrierBandGains == null)\n this.carrierBandGains = [];\n\n const waveShaperCurve = new Float32Array(65536);\n // Populate with a \"curve\" that does an abs()\n const n = 65536;\n const n2 = n / 2;\n let x;\n\n for (let i = 0; i < n2; ++i) {\n x = i / n2;\n\n waveShaperCurve[n2 + i] = x;\n waveShaperCurve[n2 - i - 1] = x;\n }\n\n // Set up a high-pass filter to add back in the fricatives, etc.\n // (this isn't used by default in the \"production\" version, as I hid the slider)\n const hpFilter = this.audioContext.createBiquadFilter();\n hpFilter.type = \"highpass\";\n hpFilter.frequency.value = 8000; // or use vocoderBands[numVocoderBands-1].frequency;\n hpFilter.Q.value = 1; // no peaking\n this.modulatorInput.connect(hpFilter);\n\n this.hpFilterGain = this.audioContext.createGain();\n this.hpFilterGain.gain.value = 0.0;\n\n hpFilter.connect(this.hpFilterGain);\n\n if(this.modulatorBuffer) {\n this.hpFilterGain.connect(this.audioContext.destination);\n }\n\n //clear the arrays\n this.modFilterBands.length = 0;\n this.modFilterPostGains.length = 0;\n this.heterodynes.length = 0;\n this.powers.length = 0;\n this.lpFilters.length = 0;\n this.lpFilterPostGains.length = 0;\n this.carrierBands.length = 0;\n this.carrierFilterPostGains.length = 0;\n this.carrierBandGains.length = 0;\n\n this.outputGain = this.audioContext.createGain();\n\n if(this.modulatorBuffer) {\n this.outputGain.connect(this.audioContext.destination);\n }\n\n const rectifierCurve = new Float32Array(65536);\n for (let i = -32768; i < 32768; i++)\n rectifierCurve[i + 32768] = ((i > 0) ? i : -i) / 32768;\n\n for (let i = 0; i < this.numVocoderBands; i++) {\n // CREATE THE MODULATOR CHAIN\n // create the bandpass filter in the modulator chain\n const modulatorFilter = this.audioContext.createBiquadFilter();\n modulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n modulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n modulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n this.modulatorInput.connect(modulatorFilter);\n this.modFilterBands.push(modulatorFilter);\n\n // Now, create a second bandpass filter tuned to the same frequency -\n // this turns our second-order filter into a 4th-order filter,\n // which has a steeper rolloff/octave\n const secondModulatorFilter = this.audioContext.createBiquadFilter();\n secondModulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondModulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n secondModulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //modulatorFilter.chainedFilter = secondModulatorFilter;\n modulatorFilter.connect(secondModulatorFilter);\n\n // create a post-filtering gain to bump the levels up.\n const modulatorFilterPostGain = this.audioContext.createGain();\n modulatorFilterPostGain.gain.value = 6;\n secondModulatorFilter.connect(modulatorFilterPostGain);\n this.modFilterPostGains.push(modulatorFilterPostGain);\n\n // Create the sine oscillator for the heterodyne\n const heterodyneOscillator = this.audioContext.createOscillator();\n if (this.vocoderBands)\n heterodyneOscillator.frequency.value = this.vocoderBands[i].frequency;\n\n heterodyneOscillator.start(0);\n\n // Create the node to multiply the sine by the modulator\n const heterodyne = this.audioContext.createGain();\n modulatorFilterPostGain.connect(heterodyne);\n heterodyne.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n heterodyneOscillator.connect(heterodyne.gain);\n\n const heterodynePostGain = this.audioContext.createGain();\n heterodynePostGain.gain.value = 2.0; // GUESS: boost\n heterodyne.connect(heterodynePostGain);\n this.heterodynes.push(heterodynePostGain);\n\n\n // Create the rectifier node\n const rectifier = this.audioContext.createWaveShaper();\n rectifier.curve = rectifierCurve;\n heterodynePostGain.connect(rectifier);\n\n // Create the lowpass filter to mask off the difference (near zero)\n const lpFilter = this.audioContext.createBiquadFilter();\n lpFilter.type = \"lowpass\"; // Lowpass filter\n lpFilter.frequency.value = 5.0; // Guesstimate! Mask off 20Hz and above.\n lpFilter.Q.value = 1; // don't need a peak\n this.lpFilters.push(lpFilter);\n rectifier.connect(lpFilter);\n\n const lpFilterPostGain = this.audioContext.createGain();\n lpFilterPostGain.gain.value = 1.0;\n lpFilter.connect(lpFilterPostGain);\n this.lpFilterPostGains.push(lpFilterPostGain);\n\n const waveshaper = this.audioContext.createWaveShaper();\n waveshaper.curve = waveShaperCurve;\n lpFilterPostGain.connect(waveshaper);\n\n\n // Create the bandpass filter in the carrier chain\n const carrierFilter = this.audioContext.createBiquadFilter();\n carrierFilter.type = \"bandpass\";\n if (this.vocoderBands)\n carrierFilter.frequency.value = this.vocoderBands[i].frequency;\n carrierFilter.Q.value = this.FILTER_QUALITY;\n this.carrierBands.push(carrierFilter);\n this.carrierInput.connect(carrierFilter);\n\n // We want our carrier filters to be 4th-order filter too.\n const secondCarrierFilter = this.audioContext.createBiquadFilter();\n secondCarrierFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondCarrierFilter.frequency.value = this.vocoderBands[i].frequency;\n secondCarrierFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //carrierFilter.chainedFilter = secondCarrierFilter;\n carrierFilter.connect(secondCarrierFilter);\n\n const carrierFilterPostGain = this.audioContext.createGain();\n carrierFilterPostGain.gain.value = 10.0;\n secondCarrierFilter.connect(carrierFilterPostGain);\n this.carrierFilterPostGains.push(carrierFilterPostGain);\n\n // Create the carrier band gain node\n const bandGain = this.audioContext.createGain();\n this.carrierBandGains.push(bandGain);\n carrierFilterPostGain.connect(bandGain);\n bandGain.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n waveshaper.connect(bandGain.gain); // connect the lp controller\n\n bandGain.connect(this.outputGain);\n }\n\n\n // Now set up our wavetable stuff.\n const real = new Float32Array(this.FOURIER_SIZE);\n const imag = new Float32Array(this.FOURIER_SIZE);\n real[0] = 0.0;\n imag[0] = 0.0;\n for (let i = 1; i < this.FOURIER_SIZE; i++) {\n real[i] = 1.0;\n imag[i] = 1.0;\n }\n\n this.wavetable = this.audioContext.createPeriodicWave(real, imag);\n this.loadNoiseBuffer();\n }\n\n private setupVocoderGraph() {\n this.initBandpassFilters();\n }\n\n private createCarriersAndPlay(output: GainNode | null) {\n if(!this.audioContext || !output) return;\n\n this.carrierSampleNode = this.audioContext.createBufferSource();\n this.carrierSampleNode.buffer = this.carrierBuffer;\n this.carrierSampleNode.loop = true;\n\n this.carrierSampleGain = this.audioContext.createGain();\n this.carrierSampleGain.gain.value = this.carrierSampleGainValue;\n this.carrierSampleNode.connect(this.carrierSampleGain);\n this.carrierSampleGain.connect(output);\n\n // The wavetable signal needs a boost.\n this.wavetableSignalGain = this.audioContext.createGain();\n\n this.oscillatorNode = this.audioContext.createOscillator();\n if (this.oscillatorType == 4 && this.wavetable) { // wavetable\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n } else {\n //oscillatorNode.type = oscillatorType;\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n }\n this.oscillatorNode.frequency.value = 110;\n this.oscillatorNode.detune.value = this.oscillatorDetuneValue;\n this.oscillatorNode.connect(this.wavetableSignalGain);\n\n this.oscillatorGain = this.audioContext.createGain();\n this.oscillatorGain.gain.value = this.oscillatorGainValue;\n\n this.wavetableSignalGain.connect(this.oscillatorGain);\n this.oscillatorGain.connect(output);\n\n this.noiseNode = this.audioContext.createBufferSource();\n this.noiseNode.buffer = this.noiseBuffer;\n this.noiseNode.loop = true;\n this.noiseGain = this.audioContext.createGain();\n this.noiseGain.gain.value = this.noiseGainValue;\n this.noiseNode.connect(this.noiseGain);\n\n this.noiseGain.connect(output);\n this.oscillatorNode.start(0);\n this.noiseNode.start(0);\n this.carrierSampleNode.start(0);\n\n }\n\n private vocode() {\n if(!this.audioContext) return;\n\n if (this.vocoding) {\n if (this.modulatorNode) {\n this.modulatorNode.stop(0);\n }\n this.shutOffCarrier();\n this.vocoding = false;\n return;\n }\n\n this.createCarriersAndPlay(this.carrierInput);\n\n this.vocoding = true;\n\n this.modulatorGain = this.audioContext.createGain();\n this.modulatorGain.gain.value = this.modulatorGainValue;\n\n if(this.modulatorBuffer) {\n this.modulatorNode = this.audioContext.createBufferSource();\n this.modulatorNode.buffer = this.modulatorBuffer;\n this.modulatorNode.connect(this.modulatorGain);\n this.modulatorNode.start(0);\n }\n\n if (this.modulatorInput)\n this.modulatorGain.connect(this.modulatorInput);\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass PassthroughWorkletProcessor extends AudioWorkletProcessor {\n\n stopped = false;\n samplesCount = 0;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [];\n }\n\n get defaultParameterDescriptors() {\n return PassthroughWorkletProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n if (input && input[0]) {\n this.samplesCount += input[0].length;\n }\n\n if (output) {\n for(let channel = 0; channel < output.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp) {\n for (let sample = 0; sample < inp.length; sample++) {\n out[sample] = inp[sample];\n }\n }\n }\n\n this.port.postMessage({ command: \"update\", samplesCount: this.samplesCount });\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.PASSTHROUGH, PassthroughWorkletProcessor);\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\nexport default class TimerSaveTime {\n seconds = 0;\n initialSeconds = 0;\n interval: number | null = null;\n incr = 1;\n\n private countCallback: () => void = () => {};\n\n constructor(seconds: number, incr: number) {\n this.seconds = seconds;\n this.initialSeconds = seconds;\n this.interval;\n this.incr = incr;\n }\n\n start() {\n this.interval = window.setInterval(() => this.count(), 1000);\n }\n\n stop() {\n clearInterval(this.interval!);\n }\n\n count() {\n this.seconds += this.incr;\n\n if(this.seconds <= 0) {\n this.stop();\n }\n\n if(this.countCallback) {\n this.countCallback();\n }\n }\n\n onCount(callback: () => void) {\n this.countCallback = callback;\n }\n}","\n/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The Voice Recorder class\n// Used to record a sound (voice, etc.) with the user microphone\n// Offer control with play/pause and audio feedback\nimport { inject, injectable } from \"inversify\";\nimport TimerSaveTime from \"../utils/TimerSaveTime\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport AudioConstraintWrapper from \"../model/AudioConstraintWrapper\";\nimport { RecorderSettings } from \"../model/RecorderSettings\";\nimport type { ConfigService } from \"../services/interfaces/ConfigService\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { AudioConstraint } from \"../model/AudioConstraint\";\nimport Recorder from \"../recorder/Recorder\";\nimport VoiceRecorderInterface from \"./interfaces/VoiceRecorderInterface\";\nimport { TYPES } from \"@/inversify.types\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n@injectable()\nexport default class VoiceRecorder extends AbstractAudioElement implements VoiceRecorderInterface {\n\n private contextManager: AudioContextManagerInterface | null | undefined;\n\n private recorder: Recorder | null = null;\n\n private input: MediaStreamAudioSourceNode | null = null;\n\n private stream: MediaStream | null = null;\n\n private alreadyInit = false;\n\n private timer: TimerSaveTime | null = null;\n\n private enableAudioFeedback = false;\n\n private recording = false;\n\n private deviceList: MediaDeviceInfo[] = [];\n\n private constraints: AudioConstraintWrapper = {\n audio: {\n noiseSuppression: true,\n echoCancellation: true,\n autoGainControl: true,\n sampleRate: { ideal: 44100 }\n }\n };\n\n private sampleRateConfigNotSupported = false;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService) {\n super();\n\n this.contextManager = contextManager;\n this.configService = configService;\n }\n\n async init() {\n if (!this.isRecordingAvailable()) {\n return;\n }\n\n // Specific case: Firefox doesn't support changing sample-rate for MediaDevice API\n // In this case we disable sample-rate config feature for this VoiceRecorder\n this.sampleRateConfigNotSupported = !navigator.mediaDevices.getSupportedConstraints().sampleRate;\n\n if (this.contextManager) {\n if (this.sampleRateConfigNotSupported) {\n this.contextManager.createNewContext(0);\n } else {\n this.contextManager.createNewContextIfNeeded();\n }\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_INIT);\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n\n await this.setup(stream, false, false);\n\n this.alreadyInit = true;\n this.timer = new TimerSaveTime(0, 1);\n\n this.timer.onCount(() => {\n this.eventEmitter?.emit(EventType.RECORDER_COUNT_UPDATE);\n });\n\n this.successCallback();\n } catch (e) {\n console.error(e);\n\n const exception = e as DOMException;\n\n if (exception) {\n switch (exception.name) {\n case \"SecurityError\":\n case \"NotAllowedError\":\n this.errorCallback();\n break;\n case \"NotFoundError\":\n this.notFoundErrorCallback();\n break;\n // Disable sample rate configuration\n case \"NotSupportedError\":\n if (!this.sampleRateConfigNotSupported) {\n this.sampleRateConfigNotSupported = true;\n this.init();\n }\n break;\n default:\n this.unknownErrorCallback();\n break;\n }\n }\n }\n\n navigator.mediaDevices.ondevicechange = () => this.updateInputList();\n }\n\n private successCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_SUCCESS);\n }\n\n private errorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_ERROR);\n }\n\n private notFoundErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_NOT_FOUND_ERROR);\n }\n\n private unknownErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_UNKNOWN_ERROR);\n }\n\n audioFeedback(enable: boolean) {\n if (this.contextManager && this.contextManager.currentContext) {\n if (enable) {\n this.input && this.input.connect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = true;\n } else {\n this.input && this.input.connect(this.contextManager.currentContext.destination) && this.input.disconnect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = false;\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Get current constraints/settings\n * @returns MediaTrackSettings\n */\n private getConstraints() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n if (tracks && tracks.length > 0) {\n return tracks[0].getSettings();\n }\n }\n\n return null;\n }\n\n /**\n * Update the current constraints\n */\n private updateConstraints() {\n const constraints = this.getConstraints();\n\n if (constraints) {\n this.constraints.audio = Object.assign(this.constraints.audio, constraints);\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Reset the current constraints\n * @param newConstraint AudioConstraintWrapper\n */\n private async resetConstraints(newConstraint?: AudioConstraintWrapper) {\n if (this.stream) {\n const precAudioFeedback = this.enableAudioFeedback;\n const precRecording = this.recording;\n const tracks = this.stream.getTracks();\n\n if (newConstraint) {\n this.updateConstraints();\n this.constraints.audio = Object.assign(this.constraints.audio, newConstraint.audio);\n }\n\n if (tracks && tracks.length > 0) {\n try {\n await tracks[0].applyConstraints(this.constraints.audio);\n\n const newConstraints = this.getConstraints();\n const newConstraintName = newConstraint ? Object.keys(newConstraint.audio)[0] : \"\";\n\n this.audioFeedback(false);\n this.pause();\n\n if (!newConstraint ||\n (newConstraints && (newConstraints as AudioConstraint)[newConstraintName] != newConstraint.audio[newConstraintName])) {\n this.stopStream();\n\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n await this.setup(stream, precRecording, precAudioFeedback);\n } else {\n await this.setup(null, precRecording, precAudioFeedback);\n }\n } catch (e) {\n this.errorCallback();\n }\n }\n }\n }\n\n /**\n * Setup this voice recorder\n * @param stream MediaStream\n * @param precRecording Was recording?\n * @param precAudioFeedback Has audio feedback?\n */\n private async setup(stream: MediaStream | null, precRecording: boolean, precAudioFeedback: boolean) {\n if (stream && this.contextManager && this.contextManager.currentContext) {\n this.input = this.contextManager.currentContext.createMediaStreamSource(stream);\n this.stream = stream;\n }\n\n if (this.recorder && this.input) {\n await this.recorder.setup(this.input);\n\n if (precRecording) {\n await this.record();\n }\n }\n\n this.audioFeedback(precAudioFeedback);\n this.updateConstraints();\n await this.updateInputList();\n }\n\n setNoiseSuppression(enable: boolean) {\n this.resetConstraints({\n audio: {\n noiseSuppression: enable\n }\n });\n }\n\n setAutoGain(enable: boolean) {\n this.resetConstraints({\n audio: {\n autoGainControl: enable\n }\n });\n }\n\n setEchoCancellation(enable: boolean) {\n this.resetConstraints({\n audio: {\n echoCancellation: enable\n }\n });\n }\n\n /**\n * Update current audio input list\n */\n private async updateInputList() {\n if (this.deviceList) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.deviceList = [];\n\n devices.forEach(device => {\n if (device.kind == \"audioinput\") {\n this.deviceList.push(device);\n }\n });\n }\n }\n\n changeInput(deviceId: string, groupId: string | undefined) {\n if (groupId) {\n this.constraints.audio.deviceId = deviceId;\n this.constraints.audio.groupId = groupId;\n this.resetConstraints();\n }\n }\n\n async record() {\n if (this.alreadyInit && this.configService && this.input) {\n if (!this.recorder) {\n this.recorder = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: \"audio/wav\"\n });\n\n await this.recorder.setup(this.input);\n }\n\n if (this.recorder) {\n this.recorder.record();\n }\n\n this.timer && this.timer.start();\n this.recording = true;\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.RECORDER_RECORDING);\n }\n }\n }\n\n async stop() {\n if (this.alreadyInit && this.recorder) {\n this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n\n this.recorder.getBuffer((buffer: Float32Array[]) => {\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n\n const newBuffer = this.contextManager.currentContext.createBuffer(2, buffer[0].length, this.contextManager.currentContext.sampleRate);\n newBuffer.getChannelData(0).set(buffer[0]);\n newBuffer.getChannelData(1).set(buffer[1]);\n\n this.eventEmitter?.emit(EventType.RECORDER_STOPPED, newBuffer);\n this.reset();\n }\n });\n }\n }\n\n pause() {\n if (this.alreadyInit) {\n this.recorder && this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n this.eventEmitter?.emit(EventType.RECORDER_PAUSED);\n }\n }\n\n /**\n * Stop stream\n */\n private stopStream() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n tracks[i].stop();\n }\n }\n }\n\n reset() {\n this.recorder && this.recorder.kill();\n this.timer && this.timer.stop();\n this.audioFeedback(false);\n\n this.stopStream();\n\n this.input = null;\n this.recorder = null;\n this.stream = null;\n this.alreadyInit = false;\n this.timer = null;\n\n this.eventEmitter?.emit(EventType.RECORDER_RESETED);\n }\n\n get currentTimeDisplay() {\n return this.timer?.seconds ? (\"0\" + Math.trunc(this.timer?.seconds / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.timer?.seconds % 60)).slice(-2) : \"00:00\";\n }\n\n get currentTime() {\n return this.timer ? this.timer.seconds : 0;\n }\n\n getSettings(): RecorderSettings {\n return {\n deviceList: this.deviceList,\n audioFeedback: this.enableAudioFeedback,\n constraints: this.constraints.audio\n };\n }\n\n on(event: string, callback: EventEmitterCallback) {\n this.eventEmitter?.on(event, callback);\n }\n\n isRecordingAvailable() {\n return typeof (navigator.mediaDevices) !== \"undefined\" && typeof (navigator.mediaDevices.getUserMedia) !== \"undefined\";\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n throw Constants.VOICE_RECORDER;\n }\n}\n","import \"reflect-metadata\";\nimport { Container } from \"inversify\";\nimport { TYPES } from \"./inversify.types\";\nimport AudioContextManagerInterface from \"./audioEditor/interfaces/AudioContextManagerInterface\";\nimport AudioContextManager from \"./audioEditor/AudioContextManager\";\nimport AudioEditorInterface from \"./audioEditor/interfaces/AudioEditorInterface\";\nimport AudioProcessorInterface from \"./audioEditor/interfaces/AudioProcessorInterface\";\nimport BufferManagerInterface from \"./audioEditor/interfaces/BufferManagerInterface\";\nimport FilterManagerInterface from \"./audioEditor/interfaces/FilterManagerInterface\";\nimport RendererManagerInterface from \"./audioEditor/interfaces/RendererManagerInterface\";\nimport SaveBufferManagerInterface from \"./audioEditor/interfaces/SaveBufferManagerInteface\";\nimport AudioEditor from \"./audioEditor/AudioEditor\";\nimport AudioProcessor from \"./audioEditor/AudioProcessor\";\nimport BufferManager from \"./audioEditor/BufferManager\";\nimport FilterManager from \"./audioEditor/FilterManager\";\nimport RendererManager from \"./audioEditor/RendererManager\";\nimport SaveBufferManager from \"./audioEditor/SaveBufferManager\";\nimport EventEmitterInterface from \"./utils/interfaces/EventEmitterInterface\";\nimport EventEmitter from \"./utils/EventEmitter\";\nimport BufferPlayerInterface from \"./bufferPlayer/interfaces/BufferPlayerInterface\";\nimport BufferPlayer from \"./bufferPlayer/BufferPlayer\";\nimport BufferFetcherServiceInterface from \"./services/interfaces/BufferFetcherServiceInterface\";\nimport BufferDecoderServiceInterface from \"./services/interfaces/BufferDecoderServiceInterface\";\nimport BufferFetcherService from \"./services/BufferFetcherService\";\nimport BufferDecoderService from \"./services/BufferDecoderService\";\nimport AbstractAudioRenderer from \"./filters/interfaces/AbstractAudioRenderer\";\nimport ReturnAudioRenderer from \"./filters/ReturnAudioRenderer\";\nimport BassBoosterFilter from \"./filters/BassBoosterFilter\";\nimport BitCrusherFilter from \"./filters/BitCrusherFilter\";\nimport EchoFilter from \"./filters/EchoFilter\";\nimport HighPassFilter from \"./filters/HighPassFilter\";\nimport LimiterFilter from \"./filters/LimiterFilter\";\nimport LowPassFilter from \"./filters/LowPassFilter\";\nimport ReverbFilter from \"./filters/ReverbFilter\";\nimport SoundtouchWrapperFilter from \"./filters/SountouchWrapperFilter\";\nimport TelephonizerFilter from \"./filters/TelephonizerFilter\";\nimport VocoderFilter from \"./filters/VocoderFilter\";\nimport PassThroughFilter from \"./filters/PassThroughFilter\";\nimport AbstractAudioFilter from \"./filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"./filters/interfaces/AudioFilterEntrypointInterface\";\nimport VoiceRecorderInterface from \"./voiceRecorder/interfaces/VoiceRecorderInterface\";\nimport VoiceRecorder from \"./voiceRecorder/VoiceRecorder\";\n\nconst audioEditorContainer = new Container({ defaultScope: \"Singleton\" });\n\n// Entrypoint filter\naudioEditorContainer.bind(TYPES.EntryPointFilter).to(SoundtouchWrapperFilter);\n\n// Renderers\naudioEditorContainer.bind(TYPES.Renderers).to(ReturnAudioRenderer);\n\n// Filters\naudioEditorContainer.bind(TYPES.Filters).toDynamicValue(() => audioEditorContainer.get(TYPES.EntryPointFilter));\naudioEditorContainer.bind(TYPES.Filters).to(BassBoosterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(BitCrusherFilter);\naudioEditorContainer.bind(TYPES.Filters).to(EchoFilter);\naudioEditorContainer.bind(TYPES.Filters).to(HighPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LimiterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LowPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(ReverbFilter);\naudioEditorContainer.bind(TYPES.Filters).to(TelephonizerFilter);\naudioEditorContainer.bind(TYPES.Filters).to(VocoderFilter);\naudioEditorContainer.bind(TYPES.Filters).to(PassThroughFilter);\n\n// Services\naudioEditorContainer.bind(TYPES.EventEmitter).to(EventEmitter);\naudioEditorContainer.bind(TYPES.AudioContextManager).to(AudioContextManager);\naudioEditorContainer.bind(TYPES.AudioEditor).to(AudioEditor);\naudioEditorContainer.bind(TYPES.AudioProcessor).to(AudioProcessor);\naudioEditorContainer.bind(TYPES.BufferManager).to(BufferManager);\naudioEditorContainer.bind(TYPES.FilterManager).to(FilterManager);\naudioEditorContainer.bind(TYPES.RendererManager).to(RendererManager);\naudioEditorContainer.bind(TYPES.SaveBufferManager).to(SaveBufferManager);\naudioEditorContainer.bind(TYPES.BufferPlayer).to(BufferPlayer);\naudioEditorContainer.bind(TYPES.BufferFetcherService).to(BufferFetcherService);\naudioEditorContainer.bind(TYPES.BufferDecoderService).to(BufferDecoderService);\naudioEditorContainer.bind(TYPES.VoiceRecorder).to(VoiceRecorder);\n\nexport { audioEditorContainer };\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nimport { PitchShifter } from \"soundtouchjs\";\nimport Constants from \"../model/Constants\";\nimport AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport AudioFilterEntrypointInterface from \"./interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport utils from \"../utils/Functions\";\nimport SoundtouchWrapperFilterWorkletNode from \"./worklets/SoundtouchWrapperFilterWorkletNode\";\nimport SimpleAudioWorkletProcessor from \"../workletPolyfill/SimpleAudioWorkletProcessor\";\nimport SoundtouchSettings from \"../model/filtersSettings/SoundtouchSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class SoundtouchWrapperFilter extends AbstractAudioFilterWorklet implements AudioFilterEntrypointInterface {\n\n private speedAudio = 1;\n private frequencyAudio = 1;\n private currentSpeedAudio = 1;\n private currentPitchShifterWorklet: typeof SoundtouchWrapperFilterWorkletNode;\n private currentPitchShifter: PitchShifter;\n private isOfflineMode = false;\n\n constructor() {\n super();\n this.enable();\n this.setDefaultEnabled(true);\n }\n\n async initializeWorklet(): Promise {\n // Do nothing\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.SOUNDTOUCH;\n }\n\n constructAudioWorkletProcessor(): SimpleAudioWorkletProcessor {\n throw new Error(\"Method not implemented.\");\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.SOUNDTOUCH;\n }\n\n async getEntrypointNode(context: BaseAudioContext, buffer: AudioBuffer, offline: boolean): Promise {\n this.isOfflineMode = offline;\n\n this.cleanUpOldNodes();\n\n // In offline (compatibility) mode\n if (offline) {\n // If the settings are untouched, we don't use Soundtouch\n if (!this.isEnabled() || (this.speedAudio == 1 && this.frequencyAudio == 1)) {\n // Just return an audio buffer source node\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n return {\n input: bufferSource,\n output: bufferSource\n };\n } else {\n // If audio worklet is enabled for soundtouch, and if the speed of audio is untouched\n // Soundtouch Audio Worklet don't support speed editing yet\n if (this.isAudioWorkletEnabled() && utils.isAudioWorkletCompatible(context) && this.speedAudio == 1) {\n return this.renderWithWorklet(buffer, context);\n } else {\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n }\n\n // Not in offline mode: get classic soundtouch script processor node\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, context);\n this.updateState();\n\n return {\n input: this.currentPitchShifter,\n output: this.currentPitchShifter\n };\n }\n\n /** Cleanup old nodes (worklets, pitch shifter) */\n private cleanUpOldNodes() {\n // Stop current worklet\n if (this.currentPitchShifterWorklet) {\n this.currentPitchShifterWorklet.stop();\n this.currentPitchShifterWorklet.disconnect();\n }\n\n if (this.currentPitchShifter) {\n this.currentPitchShifter.disconnect();\n this.currentPitchShifter._filter = null;\n }\n }\n\n private getSoundtouchScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): AudioNode {\n return new PitchShifter(context, buffer, Constants.SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE);\n }\n\n /**\n * Use script processor node (deprecated) to render the audio buffer with Soundtouch, according to the current settings.\n * Not working on Firefox\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n const offlineContext = new OfflineAudioContext(2, context.sampleRate * durationAudio, context.sampleRate);\n\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, offlineContext);\n this.updateState();\n\n this.currentPitchShifter.connect(offlineContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n const bufferSourceRendered = context.createBufferSource();\n bufferSourceRendered.buffer = renderedBuffer;\n bufferSourceRendered.start();\n\n this.cleanUpOldNodes();\n\n return {\n input: bufferSourceRendered,\n output: bufferSourceRendered\n };\n }\n\n /**\n * EXPERIMENTAL - Use audio worklet to render the audio buffer with Soundtouch, according to the current settings.\n * Working in Firefox and Chrome\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithWorklet(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n\n try {\n // Setup worklet JS module\n await context.audioWorklet.addModule((this.configService ? this.configService.getWorkletBasePath() : \"\") + Constants.WORKLET_PATHS.SOUNDTOUCH);\n\n // Setup an audio buffer source from the audio buffer\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n // Create the worklet node\n this.currentPitchShifterWorklet = new SoundtouchWrapperFilterWorkletNode(context, \"soundtouch-worklet\", {\n processorOptions: {\n bypass: false,\n recording: false,\n nInputFrames: this.approximateNInputFrames(durationAudio, context),\n updateInterval: 10.0,\n sampleRate: buffer.sampleRate\n },\n });\n\n // Connect the node for correct rendering\n bufferSource.connect(this.currentPitchShifterWorklet.node);\n\n // Setup pitch/speed of Soundtouch\n if (this.isEnabled()) {\n await this.currentPitchShifterWorklet.setup(this.speedAudio, this.frequencyAudio);\n } else {\n await this.currentPitchShifterWorklet.setup(1, 1);\n }\n\n return {\n input: this.currentPitchShifterWorklet,\n output: this.currentPitchShifterWorklet\n };\n } catch (e) {\n // Fallback to script processor node\n console.error(e);\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n\n private approximateNInputFrames(durationAudio: number, context: BaseAudioContext) {\n // {frequencyAudio, multiplicator}: {{0.1, 10}, {0.2, 5}, {0.3, 3.33}, {0.4, 2.5}, {0.5, 2}, {0.6, 1.67}, {0.7, 1.43}, {0.8, 1.25}, {0.9, 1.11}, {1, 1}}\n return durationAudio * context.sampleRate * (Math.round(14 * Math.exp(-4 * this.frequencyAudio)) + 1);\n }\n\n get order(): number {\n return 2;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.SOUNDTOUCH;\n }\n\n getSettings(): SoundtouchSettings {\n return {\n speedAudio: this.speedAudio,\n frequencyAudio: this.frequencyAudio\n };\n }\n\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isSoundtouchAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n private getCurrentPitchShifter() {\n if (this.isOfflineMode) {\n // If the settings are untouched, we don't use Soundtouch\n if (this.speedAudio == 1 && this.frequencyAudio == 1) {\n return null;\n } else {\n if (this.isAudioWorkletEnabled() && this.currentPitchShifterWorklet && this.speedAudio == 1) {\n return this.currentPitchShifterWorklet;\n } else {\n return this.currentPitchShifter;\n }\n }\n }\n\n return this.currentPitchShifter;\n }\n\n updateState(): void {\n const pitchShifter = this.getCurrentPitchShifter();\n\n if (!this.isEnabled()) {\n if (pitchShifter) {\n pitchShifter.pitch = 1;\n pitchShifter.tempo = 1;\n }\n\n this.currentSpeedAudio = 1;\n } else {\n if (pitchShifter) {\n pitchShifter.pitch = this.frequencyAudio;\n pitchShifter.tempo = this.speedAudio;\n }\n\n this.currentSpeedAudio = this.speedAudio;\n }\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n const valueFloat = parseFloat(value as string);\n\n switch (settingId) {\n case \"speedAudio\":\n this.speedAudio = valueFloat;\n break;\n case \"frequencyAudio\":\n this.frequencyAudio = valueFloat;\n break;\n default:\n break;\n }\n\n this.updateState();\n }\n\n setEnabled(state: boolean): void {\n super.setEnabled(state);\n this.updateState();\n }\n\n getSpeed(): number {\n return this.currentSpeedAudio;\n }\n}\n","import AbstractAudioRenderer from \"./interfaces/AbstractAudioRenderer\";\nimport Constants from \"../model/Constants\";\n\nexport default class ReturnAudioRenderer extends AbstractAudioRenderer {\n\n renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise {\n return new Promise(resolve => {\n const numChannels = buffer.numberOfChannels;\n const totalFrames = context.sampleRate * buffer.duration + context.sampleRate * 2;\n const bufferReturned = context.createBuffer(numChannels, totalFrames, context.sampleRate);\n\n for (let channel = 0; channel < numChannels; channel++) {\n const nowBuffering = bufferReturned.getChannelData(channel);\n const sourceChannelData = buffer.getChannelData(channel);\n\n for (let i = 0; i < totalFrames; i++) {\n if (i < sourceChannelData.length) {\n nowBuffering[i] = sourceChannelData[sourceChannelData.length - 1 - i];\n } else {\n nowBuffering[i] = 0;\n }\n }\n }\n\n resolve(bufferReturned);\n });\n }\n\n get order(): number {\n return 0;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.RETURN_AUDIO;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport BassBoosterSettings from \"../model/filtersSettings/BassBoosterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BassBoosterFilter extends AbstractAudioFilter {\n private frequencyBooster = 200;\n private frequencyReduce = 200;\n private dbBooster = 15;\n private dbReduce = -2;\n\n getNode(context: BaseAudioContext) {\n const bassBoostFilter = context.createBiquadFilter();\n bassBoostFilter.type = \"lowshelf\";\n bassBoostFilter.frequency.value = this.frequencyBooster;\n bassBoostFilter.gain.value = this.dbBooster;\n\n const bassBoostFilterHighFreq = context.createBiquadFilter();\n bassBoostFilterHighFreq.type = \"highshelf\";\n bassBoostFilterHighFreq.frequency.value = this.frequencyReduce;\n bassBoostFilterHighFreq.gain.value = this.dbReduce;\n bassBoostFilterHighFreq.connect(bassBoostFilter);\n\n return {\n input: bassBoostFilterHighFreq,\n output: bassBoostFilter\n };\n }\n \n get order(): number {\n return 3;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BASS_BOOST;\n }\n\n getSettings(): BassBoosterSettings {\n return {\n frequencyBooster: this.frequencyBooster,\n frequencyReduce: this.frequencyReduce,\n dbBooster: this.dbBooster,\n dbReduce: this.dbReduce,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch(settingId) {\n case \"frequencyBooster\":\n this.frequencyBooster = parseInt(value as string);\n break;\n case \"frequencyReduce\":\n this.frequencyReduce = parseInt(value as string);\n break;\n case \"dbBooster\":\n this.dbBooster = parseInt(value as string);\n break;\n case \"dbReduce\":\n this.dbReduce = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport BitCrusherSettings from \"../model/filtersSettings/BitCrusherSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/BitCrusher.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilterWorklet {\n private bits = 16;\n private normFreq = 0.9;\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.BITCRUSHER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.BITCRUSHER;\n }\n\n get order(): number {\n return 6;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BITCRUSHER;\n }\n\n getSettings(): BitCrusherSettings {\n return {\n bits: this.bits,\n normFreq: this.normFreq,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch (settingId) {\n case \"bits\":\n this.bits = parseInt(value as string);\n break;\n case \"normFreq\":\n this.normFreq = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport EchoSettings from \"../model/filtersSettings/EchoSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class EchoFilter extends AbstractAudioFilter {\n private delay = 0.2;\n private gain = 0.75;\n\n getNode(context: BaseAudioContext) {\n const delayNode = context.createDelay(179);\n delayNode.delayTime.value = this.delay;\n\n const gainNode = context.createGain();\n gainNode.gain.value = this.gain;\n\n gainNode.connect(delayNode);\n delayNode.connect(gainNode);\n\n return {\n input: gainNode,\n output: delayNode\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.ECHO;\n }\n\n getAddingTime() {\n return 5;\n }\n\n getSettings(): EchoSettings {\n return {\n delay: this.delay,\n gain: this.gain\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"delay\":\n this.delay = parseFloat(value as string);\n break;\n case \"gain\":\n this.gain = parseFloat(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport HighPassSettings from \"../model/filtersSettings/HighPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class HighPassFilter extends AbstractAudioFilter {\n private highFrequency = 3500;\n\n getNode(context: BaseAudioContext) {\n const highPassFilter = context.createBiquadFilter();\n highPassFilter.type = \"highpass\";\n highPassFilter.frequency.value = this.highFrequency;\n\n return {\n input: highPassFilter,\n output: highPassFilter\n };\n }\n \n get order(): number {\n return 4;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.HIGH_PASS;\n }\n\n getSettings(): HighPassSettings {\n return {\n highFrequency: this.highFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"highFrequency\":\n this.highFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport LowPassSettings from \"../model/filtersSettings/LowPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LowPassFilter extends AbstractAudioFilter {\n private lowFrequency = 3500;\n \n getNode(context: BaseAudioContext) {\n const lowPassFilter = context.createBiquadFilter();\n lowPassFilter.type = \"lowpass\";\n lowPassFilter.frequency.value = this.lowFrequency;\n\n return {\n input: lowPassFilter,\n output: lowPassFilter\n };\n }\n \n get order(): number {\n return 5;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LOW_PASS;\n }\n\n getSettings(): LowPassSettings {\n return {\n lowFrequency: this.lowFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"lowFrequency\":\n this.lowFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { ReverbEnvironment } from \"../model/ReverbEnvironment\";\nimport ReverbSettings from \"../model/filtersSettings/ReverbSettings\";\nimport GenericSettingValue from \"../model/filtersSettings/GenericSettingValue\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"@/utils/Functions\";\n\nexport default class ReverbFilter extends AbstractAudioFilter {\n\n private reverbEnvironment: ReverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n private reverbCustomEnvironmentAddTime = 5;\n private customEnvironment: AudioBuffer | null = null;\n\n getNode(context: BaseAudioContext) {\n const convolver = context.createConvolver();\n\n if (!this.reverbEnvironment || (this.reverbEnvironment.url == \"custom\" && !this.customEnvironment)) {\n // Fallback to default environment otherwise\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n\n const buffer = this.getReverbBuffer(context);\n\n if (buffer) {\n convolver.buffer = buffer;\n }\n\n return {\n input: convolver,\n output: convolver\n };\n }\n\n private getReverbBuffer(context: BaseAudioContext): AudioBuffer | undefined {\n if (this.reverbEnvironment.url == \"custom\" && this.customEnvironment) {\n if (this.customEnvironment.sampleRate === context.sampleRate) {\n return this.customEnvironment;\n } else {\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n } else if (this.bufferFetcherService) {\n return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url);\n }\n\n return;\n }\n\n get order(): number {\n return 9;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.REVERB;\n }\n\n getAddingTime() {\n const settings = this.getSettings();\n\n if (settings && settings.reverbEnvironment) {\n if (settings.reverbEnvironment.value != \"custom\") {\n if (settings.reverbEnvironment.additionalData) {\n return settings.reverbEnvironment.additionalData.addDuration as number;\n }\n } else {\n return this.reverbCustomEnvironmentAddTime;\n }\n }\n\n return 0;\n }\n\n getSettings(): ReverbSettings {\n if (!this.reverbEnvironment) {\n return {\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n return {\n reverbEnvironment: {\n name: this.reverbEnvironment.name,\n value: this.reverbEnvironment.url,\n additionalData: {\n size: this.reverbEnvironment.size,\n link: this.reverbEnvironment.link,\n addDuration: this.reverbEnvironment.addDuration\n }\n },\n downloadedBuffers: this.bufferFetcherService?.getDownloadedBuffersList(),\n hasCustomEnvironment: this.customEnvironment ? true : false,\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (settingId == \"reverbEnvironment\") {\n const reverbEnvironment = value as GenericSettingValue;\n\n if (reverbEnvironment) {\n const url = reverbEnvironment.value;\n\n try {\n if (url != \"custom\") {\n await this.bufferFetcherService?.fetchBuffer(url);\n }\n\n if (reverbEnvironment.additionalData) {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: reverbEnvironment.additionalData.size as number,\n addDuration: reverbEnvironment.additionalData.addDuration as number,\n link: reverbEnvironment.additionalData.link as string\n };\n } else {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: 0,\n addDuration: 0,\n link: \"\"\n };\n }\n } catch (e) { /* empty */ }\n }\n } else if (settingId == \"reverbCustomEnvironmentAddTime\") {\n if (utilFunctions.isSettingValueValid(value)) {\n this.reverbCustomEnvironmentAddTime = parseInt(value as string);\n }\n } else if (settingId == \"reverbCustomEnvironmentFile\") {\n if (this.bufferDecoderService && value) {\n this.customEnvironment = await this.bufferDecoderService.decodeBufferFromFile(value as File);\n\n if (!this.customEnvironment) {\n // Fallback to default environment\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n }\n }\n }\n \n async bufferFetcherReseted() {\n const reverbSettings = this.getSettings();\n \n if (reverbSettings) {\n const reverbUrl = (reverbSettings as ReverbSettings).reverbEnvironment?.value;\n \n if (reverbUrl && reverbUrl !== \"custom\" && this.bufferFetcherService) {\n await this.bufferFetcherService.fetchBuffer(reverbUrl);\n return true;\n }\n }\n\n return false;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilter {\n\n getNode(context: BaseAudioContext) {\n const lpf1 = context.createBiquadFilter();\n lpf1.type = \"lowpass\";\n lpf1.frequency.value = 2000.0;\n const lpf2 = context.createBiquadFilter();\n lpf2.type = \"lowpass\";\n lpf2.frequency.value = 2000.0;\n const hpf1 = context.createBiquadFilter();\n hpf1.type = \"highpass\";\n hpf1.frequency.value = 500.0;\n const hpf2 = context.createBiquadFilter();\n hpf2.type = \"highpass\";\n hpf2.frequency.value = 500.0;\n lpf1.connect(lpf2);\n lpf2.connect(hpf1);\n hpf1.connect(hpf2);\n \n return {\n input: lpf1,\n output: hpf2\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.TELEPHONIZER;\n }\n\n getSettings() {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport Constants from \"../model/Constants\";\nimport Vocoder from \"../utils/Vocoder\";\nimport VocoderSettings from \"../model/filtersSettings/VocoderSettings\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class VocoderFilter extends AbstractAudioFilter {\n\n private currentVocoder: Vocoder | null = null;\n private modulatorGainValue = 1.0;\n private carrierSampleGainValue = 0;\n private oscillatorGainValue = 1.0;\n private noiseGainValue = 0.2;\n private oscillatorDetuneValue = 0;\n\n getNode(context: BaseAudioContext): AudioFilterNodes {\n const modulatorBuffer = this.bufferFetcherService?.getAudioBuffer(Constants.VOCODER_MODULATOR);\n\n this.currentVocoder = new Vocoder(context, modulatorBuffer!);\n this.currentVocoder.init();\n this.applyCurrentSettingsToVocoder();\n\n const { modulatorGain, outputGain } = this.currentVocoder.getNodes();\n\n return {\n input: modulatorGain!,\n output: outputGain!\n };\n }\n\n getSettings(): VocoderSettings {\n return {\n modulatorGainValue: this.modulatorGainValue,\n carrierSampleGainValue: this.carrierSampleGainValue,\n oscillatorGainValue: this.oscillatorGainValue,\n noiseGainValue: this.noiseGainValue,\n oscillatorDetuneValue: this.oscillatorDetuneValue\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"modulatorGainValue\":\n this.modulatorGainValue = parseFloat(value as string);\n break;\n case \"carrierSampleGainValue\":\n this.carrierSampleGainValue = parseFloat(value as string);\n break;\n case \"oscillatorGainValue\":\n this.oscillatorGainValue = parseFloat(value as string);\n break;\n case \"noiseGainValue\":\n this.noiseGainValue = parseFloat(value as string);\n break;\n case \"oscillatorDetuneValue\":\n this.oscillatorDetuneValue = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToVocoder();\n }\n\n private applyCurrentSettingsToVocoder() {\n if(this.currentVocoder) {\n this.currentVocoder.updateModGain(this.modulatorGainValue);\n this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue);\n this.currentVocoder.updateSynthLevel(this.oscillatorGainValue);\n this.currentVocoder.updateNoiseLevel(this.noiseGainValue);\n this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue);\n }\n }\n \n get order(): number {\n return 1;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.VOCODER;\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport \"./worklets/Passthrough.worklet\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport PassThroughWorkletEvent from \"@/model/PassThroughWorkletEvent\";\nimport { EventType } from \"@/model/EventTypeEnum\";\n\nexport default class PassThroughFilter extends AbstractAudioFilterWorklet {\n\n private currentTime = 0;\n private lastSampleCount = 0;\n private samplePerSecond = 0;\n private currentTimeSamplesPerSecond = 0;\n\n receiveEvent(message: MessageEvent): void {\n const currentTime = performance.now();\n const samplesProcessed = message.data.samplesCount;\n\n if (message.data.command === \"update\") {\n this.calculatePercentageProcessed(currentTime, samplesProcessed);\n }\n\n this.calculateRemainingTimeProcessing(currentTime, samplesProcessed);\n }\n\n /**\n * Calculate percentage processed\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculatePercentageProcessed(currentTime: number, samplesProcessed: number) {\n if (this.currentTime === 0) {\n this.currentTime = currentTime;\n }\n\n const timeDifference = currentTime - this.currentTime;\n const percentageProcessed = (samplesProcessed / this._totalSamples);\n\n if (this.eventEmitter && timeDifference >= Constants.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL) {\n this.eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, percentageProcessed * 100);\n this.currentTime = currentTime;\n }\n }\n\n /**\n * Calculate remaining time to process the audio\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculateRemainingTimeProcessing(currentTime: number, samplesProcessed: number) {\n if (this.currentTimeSamplesPerSecond === 0) {\n this.currentTimeSamplesPerSecond = currentTime;\n }\n\n const timeDifferenceSamplePerSecond = currentTime - this.currentTimeSamplesPerSecond;\n const remainingSamples = this._totalSamples - samplesProcessed;\n\n if (this.eventEmitter && remainingSamples <= 0) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, 0);\n return;\n }\n\n if (this.eventEmitter && timeDifferenceSamplePerSecond >= 1000) {\n this.calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond, samplesProcessed);\n\n const remainingTimeSeconds = remainingSamples / this.samplePerSecond;\n\n this.currentTimeSamplesPerSecond = currentTime;\n this.lastSampleCount = samplesProcessed;\n\n if (isNaN(remainingTimeSeconds) || !isFinite(remainingTimeSeconds)) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n } else {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, remainingTimeSeconds);\n }\n }\n }\n\n /**\n * Calculate smoothed samples per second\n * @param timeDifferenceSamplePerSecond Time difference \n * @param samplesProcessed Samples count processed\n * @returns Smoothed samples per second\n */\n private calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond: number, samplesProcessed: number): void {\n if (timeDifferenceSamplePerSecond > 0) {\n const currentSampleRate = (samplesProcessed - this.lastSampleCount) / (timeDifferenceSamplePerSecond / 1000);\n this.samplePerSecond = (Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR * currentSampleRate) + ((1 - Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR) * this.samplePerSecond);\n }\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.PASSTHROUGH;\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.PASSTHROUGH;\n }\n\n get order(): number {\n return 10;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.PASSTHROUGH;\n }\n\n set totalSamples(value: number) {\n super.totalSamples = value;\n this.currentTime = 0;\n this.currentTimeSamplesPerSecond = 0;\n this.samplePerSecond = 0;\n this.lastSampleCount = 0;\n }\n\n getSettings() {\n return {};\n }\n\n isEnabled(): boolean {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { ConfigService } from \"./interfaces/ConfigService\";\n\n/**\n * Default implementation for a ConfigService, using a built-in map.\n * The configuration is not stored in localstorage in this case.\n */\n@injectable()\nexport default class GenericConfigService implements ConfigService {\n\n private mapConfig = new Map();\n\n getConfig(key: string): string | undefined | null {\n return this.mapConfig.get(key);\n }\n\n setConfig(key: string, value: string): void {\n this.mapConfig.set(key, value);\n }\n\n isCompatibilityModeEnabled(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED) == \"true\";\n }\n\n isCompatibilityModeChecked(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED) == \"true\";\n }\n\n isAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n isSoundtouchAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n getBufferSize(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BUFFER_SIZE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_BUFFER_SIZE;\n }\n\n getSampleRate(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.SAMPLE_RATE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_SAMPLE_RATE;\n }\n\n getBitrateMP3(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BITRATE_MP3);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_MP3_BITRATE;\n }\n\n enableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"true\");\n }\n\n disableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"false\");\n }\n\n getWorkletBasePath(): string {\n return \"\";\n }\n\n getWorkerBasePath(): string {\n return \"\";\n }\n\n getSoundBasePath(): string {\n return \"\";\n }\n\n isInitialRenderingDisabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.DISABLE_INITIAL_RENDERING;\n }\n};\n","import { TYPES } from \"@/inversify.types\";\nimport AudioEditorInterface from \"@/audioEditor/interfaces/AudioEditorInterface\";\nimport { audioEditorContainer } from \"@/inversify.config\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\nimport BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport GenericConfigService from \"@/services/GenericConfigService\";\nimport VoiceRecorderInterface from \"@/voiceRecorder/interfaces/VoiceRecorderInterface\";\n\nexport default class SoundStudioFactory {\n\n private static ready = false;\n\n static createAudioEditor(configService?: ConfigService, buffersToFetch?: string[]): AudioEditorInterface {\n if (!SoundStudioFactory.ready) {\n if (configService) {\n audioEditorContainer.bind(TYPES.ConfigService).toDynamicValue(() => configService);\n } else {\n audioEditorContainer.bind(TYPES.ConfigService).to(GenericConfigService);\n console.warn(\"No ConfigService provided. Using default generic implementation.\");\n }\n \n audioEditorContainer.bind(TYPES.AudioBuffersToFetch).toConstantValue(buffersToFetch || []);\n SoundStudioFactory.ready = true;\n }\n\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static createVoiceRecorder(): VoiceRecorderInterface {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getAudioEditorInstance(): AudioEditorInterface | null {\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static getAudioPlayerInstance(): BufferPlayerInterface | null {\n return audioEditorContainer.get(TYPES.BufferPlayer);\n }\n\n static getAudioRecorderInstance(): VoiceRecorderInterface | null {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getEventEmitterInstance(): EventEmitterInterface | null {\n return audioEditorContainer.get(TYPES.EventEmitter);\n }\n\n static getConfigServiceInstance(): ConfigService | undefined {\n return audioEditorContainer.get(TYPES.ConfigService);\n }\n}\n"],"names":["Reflect","factory","root","globalThis","global","self","this","Function","_","functionThis","eval","indirectEvalThis","exporter","makeExporter","target","previous","key","value","Object","defineProperty","configurable","writable","hasOwn","prototype","hasOwnProperty","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","create","supportsProto","__proto__","Array","downLevel","HashMap","MakeDictionary","has","map","call","get","undefined","functionPrototype","getPrototypeOf","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","registrySymbol","for","metadataRegistry","GetOrCreateMetadataRegistry","metadataProvider","CreateMetadataProvider","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","provider","GetMetadataProvider","OrdinaryDeleteMetadata","i","length","decorated","descriptor","MetadataKey","O","P","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","set","keys","_i","ownKeys_1","add","push","_a","parentKeys_1","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","valueOf","toString_1","toString","IsCallable","argument","ToString","isArray","SameValueZero","y","V","func","GetIterator","obj","method","IteratorValue","iterResult","IteratorStep","next","done","IteratorClose","f","proto","prototypeProto","constructor","CreateMetadataRegistry","fallback","first","second","rest","CreateFallbackProvider","targetProviderMap","registry","registerProvider","getProvider","setProvider","isExtensible","Error","getProviderNoCache","isProviderFor","providerMap","hasProvider","existingProvider","enumerable","targetMetadata","GetOrCreateMetadataMap","Create","createdTargetMetadata","metadataMap","delete","k","nextValue","e","size","reflect","metadataOwner","metadataPropertySet","registeredProvider","cacheSentinel","arraySentinel","MapIterator","values","selector","_index","_keys","_values","_selector","index","throw","error","return","_cacheKey","_cacheIndex","_find","clear","getKey","getValue","getEntry","insert","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","Math","random","GenRandomBytes","Uint8Array","array","crypto","getRandomValues","msCrypto","data","offset","byte","toLowerCase","__","NAMED_TAG","NAME_TAG","UNMANAGED_TAG","OPTIONAL_TAG","INJECT_TAG","MULTI_INJECT_TAG","TAGGED","TAGGED_PROP","PARAM_TYPES","POST_CONSTRUCT","PRE_DESTROY","NON_CUSTOM_TAG_KEYS","BindingScopeEnum","Request","Singleton","Transient","BindingTypeEnum","ConstantValue","Constructor","DynamicValue","Factory","Instance","Invalid","Provider","TargetTypeEnum","ClassProperty","ConstructorArgument","Variable","idCounter","id","Binding","serviceIdentifier","scope","activated","type","constraint","request","implementationType","cache","onActivation","onDeactivation","dynamicValue","clone","DUPLICATED_METADATA","NULL_ARGUMENT","KEY_NOT_FOUND","AMBIGUOUS_MATCH","NOT_REGISTERED","MISSING_INJECTABLE_ANNOTATION","MISSING_INJECT_ANNOTATION","CIRCULAR_DEPENDENCY","INVALID_DECORATOR_OPERATION","ARGUMENTS_LENGTH_MISMATCH","arguments","POST_CONSTRUCT_ERROR","clazz","errorMessage","PRE_DESTROY_ERROR","ON_DEACTIVATION_ERROR","STACK_OVERFLOW","MetadataReader","getConstructorMetadata","constructorFunc","compilerGeneratedMetadata","METADATA_KEY.PARAM_TYPES","userGeneratedMetadata","METADATA_KEY.TAGGED","getPropertiesMetadata","METADATA_KEY.TAGGED_PROP","BindingCount","MultipleBindingsAvailable","NoBindingsAvailable","OnlyOneBindingAvailable","isStackOverflowExeption","RangeError","message","ERROR_MSGS.STACK_OVERFLOW","getServiceIdentifierAsString","name","listRegisteredBindingsForServiceIdentifier","container","getBindings","registeredBindingsList","registeredBindings","forEach","binding","getFunctionName","metaData","alreadyDependencyChain","parentRequest","circularDependencyToException","childRequests","childRequest","services","stringArr","_createStringArr","req","reverse","join","dependencyChainToString","ERROR_MSGS.CIRCULAR_DEPENDENCY","name_1","match","Context","addPlan","plan","setCurrentRequest","currentRequest","Metadata","METADATA_KEY.NAMED_TAG","String","Plan","parentContext","rootRequest","LazyServiceIdentifier","cb","_cb","unwrap","QueryableString","str","startsWith","searchString","indexOf","endsWith","reverseString","reverseSearchString","split","contains","equals","compareString","Target","identifier","namedOrTagged","queryableName","slice","metadataItem","hasTag","METADATA_KEY.MULTI_INJECT_TAG","matchesArray","matchesTag","isNamed","isTagged","some","METADATA_KEY.NON_CUSTOM_TAG_KEYS","every","isOptional","METADATA_KEY.OPTIONAL_TAG","getNamedTag","filter","m","getCustomTags","matchesNamedTag","_this","__spreadArray","to","from","pack","ar","l","concat","getTargets","metadataReader","constructorName","isBaseClass","serviceIdentifiers","ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION","constructorArgsMetadata","hasUserDeclaredUnknownInjections","hasOptionalParameters","constructorTargets","iterations","targets","getConstructorArgsAsTarget","getConstructorArgsAsTargets","propertyTargets","getClassPropsAsTargets","formatTargetMetadata","isManaged","unmanaged","injectIdentifier","inject","multiInject","ERROR_MSGS.MISSING_INJECT_ANNOTATION","targetName","_getServiceIdentifierForProperty","propertyName","className","msg","classPropsMetadata","symbolKeys","getOwnPropertySymbols","keys_1","baseConstructor","baseTargets","getBaseClassDependencyCount","t","METADATA_KEY.UNMANAGED_TAG","unmanagedCount","apply","dependencyCount","targetMetadataMap","METADATA_KEY.INJECT_TAG","METADATA_KEY.NAME_TAG","bindings","requestScope","addChildRequest","child","getBindingDictionary","cntnr","_bindingDictionary","_getActiveBindings","avoidConstraints","context","activeBindings","options","autoBindInjectable","bind","toSelf","serviceIdentifierString","ERROR_MSGS.NOT_REGISTERED","m_1","namedTag","otherTags","tag","listMetadataForTarget","ERROR_MSGS.AMBIGUOUS_MATCH","_validateActiveBindingCount","_createSubRequests","thePlan","subChildRequest","dependencies","getDependencies","skipBaseClassChecks","baseClassDependencyCount","ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH","dependency","bindingDictionary","hasKey","isMultiInject","targetType","injectMetadata","tagMetadata","_createTarget","isPromise","object","then","isPromiseOrContainsPromise","FactoryType","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","rejected","__generator","body","g","label","sent","trys","ops","verb","n","v","op","pop","_saveToRequestScope","_saveToSingletonScope","_saveAsyncResultToSingletonScope","asyncResult","ex_1","__assign","assign","s","p","_createInstance","constr","resolveRequest","resolved","reduce","resolvedRequests","injection","constructorInjections","propertyRequests","propertyInjections","isAsync","_resolveRequests","createInstanceWithInjectionsArg","args","possiblyWaitInjections","createInstanceWithInjections","createInstanceWithInjectionsAsync","instance","r","property","possiblePromiseinjections","injections","possiblePromiseinjections_1","all","_getInstanceAfterPostConstruct","postConstructResult","_b","METADATA_KEY.POST_CONSTRUCT","_postConstruct","_validateInstanceResolution","scopeErrorMessage","METADATA_KEY.PRE_DESTROY","_throwIfHandlingDeactivation","_resolveRequest","targetIsAnArray","targetParentIsNotAnArray","_f","_resolveBinding","_resolveFactoryFromBinding","factoryDetails","factoryType","getFactoryDetails","fn","errorCallback","tryAndThrowErrorIfStackOverflow","_getResolvedFromBinding","boundValue","serviceIdentifierAsString","ERROR_MSGS.INVALID_BINDING_TYPE","ensureFullyBound","resolvedResult","resolveInstance","_resolveInScope","resolveFromBinding","tryGetFromScope","saveToScope","_onActivation","_bindingActivation","containersIterator","_getContainersIterator","containersIteratorResult","context_1","activationsIterator","_getContainerActivationsForService","_activateContainerAsync","_activateContainer","previousResult","activation","resultPromise","activations","_activations","containersStack","nextContainer","traverseAncerstors","taggedConstraint","namedConstraint","typeConstraint","BindingWhenSyntax","_binding","when","BindingOnSyntax","whenTargetNamed","whenTargetIsDefault","whenTargetTagged","whenInjectedInto","whenParentNamed","whenParentTagged","whenAnyAncestorIs","ancestor","whenNoAncestorIs","whenAnyAncestorNamed","whenNoAncestorNamed","whenAnyAncestorTagged","whenNoAncestorTagged","whenAnyAncestorMatches","whenNoAncestorMatches","handler","BindingWhenOnSyntax","_bindingWhenSyntax","_bindingOnSyntax","BindingInSyntax","inRequestScope","inSingletonScope","inTransientScope","BindingInWhenOnSyntax","_bindingInSyntax","BindingToSyntax","toConstantValue","toDynamicValue","toConstructor","toFactory","toFunction","bindingWhenOnSyntax","toAutoFactory","toAutoNamedFactory","named","getNamed","toProvider","toService","service","ContainerSnapshot","of","middleware","deactivations","moduleActivationStore","snapshot","Lookup","getMap","ERROR_MSGS.NULL_ARGUMENT","entry","ERROR_MSGS.KEY_NOT_FOUND","remove","removeIntersection","lookup","traverse","lookupActivations","filteredValues","lookupValue","moduleActivation","_setValue","removeByCondition","condition","removals","updatedEntries","entries_1","copy","b","ModuleActivationStore","moduleId","handlers","_getEmptyHandlersStore","addDeactivation","_getModuleActivationHandlers","onDeactivations","addActivation","onActivations","handlersStore","moduleActivationHandlers","Container","containerOptions","defaultScope","_snapshots","_middleware","_deactivations","_metadataReader","_moduleActivationStore","merge","container1","container2","containers","targetContainers","targetContainer","targetBindingDictionary","destination","load","modules","getHelpers","_getContainerModuleHelpersFactory","modules_1","currentModule","containerModuleHelpers","bindFunction","unbindFunction","isboundFunction","rebindFunction","unbindAsyncFunction","onActivationFunction","onDeactivationFunction","loadAsync","modules_2","unload","module","_removeModuleBindings","_deactivateSingletons","_removeModuleHandlers","unloadAsync","modules_3","module_1","_deactivateSingletonsAsync","rebind","unbind","rebindAsync","unbindAsync","_removeServiceFromDictionary","unbindAll","unbindAllAsync","promises","isBound","bound","isCurrentBound","isBoundNamed","isBoundTagged","request_1","createMockRequest","restore","createChild","applyMiddleware","middlewares","initial","_planAndResolve","prev","curr","applyCustomMetadataReader","getArgs","_getNotAllArgs","_getButThrowIfAsync","getAsync","_get","getTagged","getTaggedAsync","getNamedAsync","getAll","_getAllArgs","getAllAsync","_getAll","getAllTagged","getAllTaggedAsync","getAllNamed","getAllNamedAsync","constructorFunction","_preDestroy","moduleActivationsHandlers","_deactivate","_deactivateContainer","_handleDeactivationError","_propagateContainerDeactivationThenBindingAndPreDestroyAsync","propagateDeactivationResult","_propagateContainerDeactivationThenBindingAndPreDestroy","ex","ERROR_MSGS.ON_DEACTIVATION_ERROR","deactivationsIterator","deactivation","_deactivateContainerAsync","setModuleId","bindingToSyntax","getRebindFunction","getOnActivationFunction","getOnDeactivationFunction","mId","planAndResolveArgs","contextInterceptor","middlewareResult","_deactivateIfSingleton","bindings_1","_bindingDeactivationAndPreDestroy","_bindingDeactivationAndPreDestroyAsync","ERROR_MSGS.CANNOT_UNBIND","tagParameter","annotationTarget","parameterName","parameterIndex","ERROR_MSGS.INVALID_DECORATOR_OPERATION","_throwIfMethodParameter","_tagParameterOrProperty","_ensureNoMetadataKeyDuplicates","metadatas","duplicate","seenValues","array_1","getFirstArrayDuplicate","md","ERROR_MSGS.DUPLICATED_METADATA","paramsOrPropertiesMetadata","paramOrPropertyMetadata","_loop_1","paramOrPropertyMetadata_1","createTaggedDecorator","targetKey","indexOrPropertyDescriptor","tagProperty","injectable","types","injectBase","TYPES","AudioContextManager","AudioEditor","AudioProcessor","BufferManager","FilterManager","RendererManager","SaveBufferManager","ConfigService","EventEmitter","BufferPlayer","BufferDecoderService","BufferFetcherService","AudioBuffersToFetch","Renderers","Filters","EntryPointFilter","VoiceRecorder","__decorate","desc","d","c","getOwnPropertyDescriptor","__param","paramIndex","__metadata","EventType","SuppressedError","Constants","AUDIO_EDITOR","VOICE_RECORDER","BUFFER_PLAYER","AUDIO_CONTEXT_MANAGER","AUDIO_PROCESSOR","BUFFER_MANAGER","FILTER_MANAGER","RENDERER_MANAGER","SAVE_BUFFER_MANAGER","EXPORT_WAV_COMMAND","EXPORT_MP3_COMMAND","AUDIO_WAV","AUDIO_MP3","RECORD_COMMAND","INIT_COMMAND","FILTERS_NAMES","REVERB","ECHO","BASS_BOOST","BITCRUSHER","HIGH_PASS","LIMITER","LOW_PASS","PASSTHROUGH","RETURN_AUDIO","SOUNDTOUCH","TELEPHONIZER","VOCODER","WORKLET_PATHS","RECORDER_WORKLET","WORKLET_NAMES","PREFERENCES_KEYS","COMPATIBILITY_MODE_ENABLED","COMPATIBILITY_MODE_CHECKED","ENABLE_AUDIO_WORKLET","ENABLE_SOUNDTOUCH_AUDIO_WORKLET","BUFFER_SIZE","SAMPLE_RATE","DISABLE_INITIAL_RENDERING","BITRATE_MP3","ENABLE_RECORDER_AUDIO_WORKLET","SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE","DEFAULT_REVERB_ENVIRONMENT","url","addDuration","link","VOCODER_MODULATOR","DEFAULT_BUFFER_SIZE","VALID_BUFFER_SIZE","VALID_MP3_BITRATES","DEFAULT_SAMPLE_RATE","VALID_SAMPLE_RATES","TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL","TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR","DEFAULT_SAVE_FORMAT","DEFAULT_MP3_BITRATE","listeners","on","event","callback","emit","off","eventEmitter","configService","previousSampleRate","setup","getSampleRate","SAMPLE_RATE_CHANGED","currentContext","createNewContext","createNewContextIfNeeded","principalBuffer","isCompatibilityModeEnabled","currentSampleRate","sampleRate","_currentContext","oldAudioContext","destroyOldContext","latencyHint","AudioContext","close","AbstractAudioElement","enabled","defaultEnabled","bufferFetcherService","bufferDecoderService","isEnabled","isDefaultEnabled","setDefaultEnabled","state","setEnabled","enable","disable","toggle","injectDependencies","utilFunctions","calcAudioDuration","audio","speed","duration","loadAudioBuffer","file","arrayBuffer","readAsArrayBufferPromisified","audioBuffer","decodeAudioData","decodeBuffer","reader","FileReader","onload","ev","ArrayBuffer","readAsArrayBuffer","numberOfChannels","resume","newBuffer","createBuffer","sourceChannelData","getChannelData","channel0Data","channel1Data","convertAudioBufferToFloat32Array","channel","convertAudioParamToFloat32Array","param","Float32Array","sumAudioBufferChannel","a","sumAudioBuffer","sum","isAudioWorkletCompatible","audioContext","isSettingValueValid","isNaN","Number","trim","calculateAudioDuration","filterManager","speedAudio","getAddingTime","resetAudioRenderingProgress","UPDATE_AUDIO_TREATMENT_PERCENT","UPDATE_REMAINING_TIME_ESTIMATED","forceDownload","blob","filename","window","document","createElement","URL","createObjectURL","appendChild","href","download","click","revokeObjectURL","rendererManager","contextManager","saveBufferManager","audioProcessor","bufferManager","player","super","bufferPlayer","onBeforePlaying","compatibilityMode","setupOutput","PLAYING_FINISHED","loop","start","addFilters","filters","addRenderers","renderers","defaultDeviceSampleRate","tempContext","loadBufferFromFile","prepareContext","decodeBufferFromFile","initialRenderingDone","sumInputBuffer","utils","loadBuffer","getOutputBuffer","renderedBuffer","renderAudio","isAudioWorkletAvailable","getFiltersState","getRenderersState","getFiltersSettings","reconnectNodesIfNeeded","entrypointFilter","connectNodes","getSpeed","toggleFilter","filterId","toggleRenderer","changeFilterSettings","settings","resetFilterSettings","resetAllFiltersState","resetAllRenderersState","exit","stop","reset","cancelAudioRendering","saveBuffer","downloadingInitialData","order","_renderedBuffer","audioRenderingLastCanceled","inputBuffer","resetBufferFetcher","isInitialRenderingDisabled","loadInitialBuffer","durationAudio","offlineContext","OfflineAudioContext","outputContext","executeAudioRenderers","currentOfflineContext","setupTotalSamples","setupPlayerSpeed","initializeWorklets","currentNodes","output","connect","startRendering","loadRenderedAudio","OFFLINE_AUDIO_RENDERING_FINISHED","setCompatibilityMode","AUDIO_RENDERING_FINISHED","CANCELLED_AND_LOADED_INITIAL_AUDIO","isCompatibilityModeChecked","setCompatibilityModeChecked","enableCompatibilityMode","COMPATIBILITY_MODE_AUTO_ENABLED","RENDERING_AUDIO_PROBLEM_DETECTED","disconnectOldNodes","CANCELLING_AUDIO_PROCESSING","checked","setConfig","audioBuffersToFetch","fetchBuffers","refetch","LOADING_BUFFERS","fetchAllBuffers","LOADED_BUFFERS","LOADING_BUFFERS_ERROR","resetFilterBuffers","entryPointFilter","_entryPointFilter","_currentNodes","initializeDefaultSettings","getSettings","find","setSetting","resetSettings","element","keepCurrentInputOutput","isCompatibilityMode","entrypointNode","entrypointNodes","getEntrypointNode","intermediateNodes","previousNode","sort","node","getNode","updateState","keepCurrentOutput","disconnect","intermediate","isWorklet","initializeWorklet","totalSamples","bufferFetcherReseted","renderer","rendererId","currentBuffer","getRecorderWorker","workerBasePath","Worker","Recorder","cfg","worker","config","bufferLen","numChannels","mimeType","workletBasePath","bitrate","callbacks","getBuffer","exportWAV","exportMP3","recording","source","AudioWorkletNode","port","postMessage","createRecorderNode","command","onmessage","createRecorderWorklet","createRecorderScriptProcessorNode","audioWorklet","addModule","numChannelParameter","parameters","setValueAtTime","onaudioprocess","record","kill","terminate","Recorder$1","savingBuffer","playingStoppedCallback","PLAYING_STOPPED","savingResult","saveBufferCompatibilityMode","saveBufferDirect","getWorkerBasePath","downloadAudioBlob","format","rec","getBufferSize","getWorkletBasePath","finishedCallback","downloadBlobCallback","Date","toISOString","currentTime","displayTime","intervals","playing","onBeforePlayingCallback","currentNode","_contextManager","init","direct","createBufferSource","updateInfos","clearIntervals","interval","clearInterval","PLAYING_STARTED","startTime","performance","now","setInterval","timeNow","nextTime","playDirect","pause","PLAYING_UPDATE","setTimePercent","percent","round","setTime","time","toggleLoop","currentTimeDisplay","trunc","maxTimeDisplay","remainingTimeDisplay","buffers","bufferErrors","fetchBuffer","bufferURI","force","realBufferURI","getSoundBasePath","getKeyFromLocation","FETCHING_BUFFERS","response","fetch","ok","FETCHING_BUFFERS_ERROR","_c","FINISHED_FETCHING_BUFFERS","_d","bufferURIs","uri","getAudioBuffer","getOrFetchAudioBuffer","getDownloadedBuffersList","location","substring","lastIndexOf","DECODING_AUDIO_FILE","DECODED_AUDIO_FILE","console","ERROR_DECODING_AUDIO_FILE","AbstractAudioRenderer","AbstractAudioFilter","defaultSettings","_totalSamples","getDefaultSettings","AudioParamPolyfill","defaultValue","_value","_minValue","_maxValue","MAX_SAFE_INTEGER","_defaultValue","automationRate","newValue","max","min","minValue","maxValue","warn","linearRampToValueAtTime","endTime","exponentialRampToValueAtTime","cancelAndHoldAtTime","cancelTime","cancelScheduledValues","setTargetAtTime","timeConstant","setValueCurveAtTime","WorkletScriptProcessorNodeAdapter","bufferSize","_parameters","_port","workletProcessor","_scriptProcessorNode","createScriptProcessor","setupPort","setupProcessor","setupWorkletScope","messageChannel","MessageChannel","port1","port2","inputArray","Functions","ouputArray","outputBuffer","records","recordsMap","fromEntries","process","descriptors","defaultParameterDescriptors","RegisterProcessorPolyfill","registerProcessor","processorName","processorClass","processorsMap","getProcessor","processor","SimpleAudioWorkletProcessor","inputs","outputs","parameterDescriptors","AudioWorkletProcessor","AbstractAudioFilterWorklet","currentWorkletNode","fallbackToScriptProcessor","keepCurrentNodeIfPossible","workletPath","catch","isAudioWorkletEnabled","initializeNode","workletName","receiveEvent","applyCurrentSettingsToWorklet","currentSettings","settingKey","settingFromWorklet","BitCrusherProcessor","stopped","phaser","last","pow","bits","currentNormFreq","normFreq","fill","blockSize","inp","out","floor","DelayBuffer","_array","readPointer","writePointer","read","LimiterProcessor","delayBuffer","envelopeSample","disabled","getEnvelope","attackTime","releaseTime","attackGain","exp","releaseGain","envelope","envIn","abs","getMaxEnvelope","channels","ampToDB","log10","dBToAmp","db","envelopeData","postGainAmp","postGain","preGainAmp","preGain","lookAheadTime","slope","gainDB","threshold","gain","LimiterFilter","settingId","parseFloat","FifoSampleBuffer","_vector","_position","_frameCount","vector","position","startIndex","frameCount","endIndex","receive","rewind","put","numFrames","putSamples","samples","sourceOffset","numSamples","ensureCapacity","destOffset","subarray","putBuffer","receiveSamples","extract","minLength","parseInt","newVector","ensureAdditionalCapacity","AbstractFifoSamplePipe","createBuffers","_inputBuffer","_outputBuffer","RateTransposer","_rate","rate","slopeCount","prevSampleL","prevSampleR","numFramesOutput","transpose","src","srcOffset","dest","used","srcIndex","FilterSupport","pipe","_pipe","fillInputBuffer","fillOutputBuffer","numInputFrames","noop","SimpleFilter","sourceSound","historyBufferSize","_sourcePosition","outputBufferPosition","newOutputBufferPosition","sourcePosition","onEnd","numFramesExtracted","currentFrames","handleSampleData","_SCAN_OFFSETS","AUTOSEEK_K","Stretch","_quickSeek","midBufferDirty","midBuffer","overlapLength","autoSeqSetting","autoSeekSetting","_tempo","setParameters","clearMidBuffer","sequenceMs","seekWindowMs","overlapMs","calculateSequenceParameters","calculateOverlapLength","tempo","newTempo","intskip","nominalSkip","seekWindowLength","skipFract","sampleReq","seekLength","inputChunkSize","outputChunkSize","overlapInMsec","newOvl","refMidBuffer","checkLimits","mi","ma","seq","seek","AUTOSEQ_AT_MIN","AUTOSEEK_AT_MIN","quickSeek","seekBestOverlapPosition","seekBestOverlapPositionStereoQuick","seekBestOverlapPositionStereo","bestOffset","bestCorrelation","correlation","preCalculateCorrelationReferenceStereo","MIN_VALUE","calculateCrossCorrelationStereo","correlationOffset","tempOffset","scanCount","j","temp","mixingPosition","compare","mixing","calcLength","mixingOffset","overlap","overlapPosition","overlapStereo","inputPosition","outputPosition","tempFrame","frameScale","fi","inputOffset","outputOffset","overlapSkip","testFloatEqual","SoundTouch","transposer","stretch","_intermediateBuffer","virtualPitch","virtualRate","virtualTempo","calculateEffectiveRateAndTempo","rateChange","tempoChange","pitch","pitchOctaves","pitchSemitones","previousTempo","previousRate","WebAudioBufferSource","dualChannel","left","right","minsSecs","secs","mins","width","z","onUpdate","currentTimePlayed","timePlayed","CustomEvent","detail","formattedTimePlayed","percentagePlayed","_node","dispatchEvent","PitchShifter","_soundtouch","_filter","sourcePositionCallback","framesExtracted","getWebAudioNode","sourcePostion","formattedDuration","perc","semitone","toNode","eventName","addEventListener","removeEventListener","soundtouchWrapperFilterWorkletNodeClass","running","_pitch","updateInterval","processorOptions","status","messageProcessor","SoundtouchWrapperFilterWorkletNode","Vocoder","ctx","carrierB","modulatorB","FILTER_QUALITY","FOURIER_SIZE","WAVETABLEBOOST","SAWTOOTHBOOST","oscillatorType","oscillatorDetuneValue","carrierBuffer","modulatorNode","vocoding","modulatorInput","carrierInput","modulatorGain","modulatorGainValue","noiseBuffer","noiseNode","noiseGain","noiseGainValue","carrierSampleNode","carrierSampleGain","carrierSampleGainValue","oscillatorNode","oscillatorGain","oscillatorGainValue","wavetable","wavetableSignalGain","modFilterBands","modFilterPostGains","heterodynes","powers","lpFilters","lpFilterPostGains","carrierBands","carrierFilterPostGains","carrierBandGains","vocoderBands","numVocoderBands","hpFilterGain","outputGain","modulatorBuffer","generateVocoderBands","setupVocoderGraph","vocode","getNodes","synthLevel","shutOffCarrier","selectSawtooth","selectWavetable","setPeriodicWave","updateModGain","updateSampleLevel","updateSynthLevel","updateNoiseLevel","updateDetuneValue","detune","startFreq","endFreq","numBands","centsPerBand","log","LN2","scale","currentFreq","frequency","loadNoiseBuffer","lengthInSamples","bufferData","initBandpassFilters","createGain","waveShaperCurve","n2","hpFilter","createBiquadFilter","Q","rectifierCurve","modulatorFilter","secondModulatorFilter","modulatorFilterPostGain","heterodyneOscillator","createOscillator","heterodyne","heterodynePostGain","rectifier","createWaveShaper","curve","lpFilter","lpFilterPostGain","waveshaper","carrierFilter","secondCarrierFilter","carrierFilterPostGain","bandGain","real","imag","createPeriodicWave","createCarriersAndPlay","PassthroughWorkletProcessor","samplesCount","sample","TimerSaveTime","seconds","incr","initialSeconds","countCallback","count","onCount","recorder","stream","alreadyInit","timer","enableAudioFeedback","deviceList","constraints","noiseSuppression","echoCancellation","autoGainControl","ideal","sampleRateConfigNotSupported","isRecordingAvailable","navigator","mediaDevices","getSupportedConstraints","RECORDER_INIT","getUserMedia","RECORDER_COUNT_UPDATE","successCallback","notFoundErrorCallback","unknownErrorCallback","ondevicechange","updateInputList","RECORDER_SUCCESS","RECORDER_ERROR","RECORDER_NOT_FOUND_ERROR","RECORDER_UNKNOWN_ERROR","audioFeedback","RECORDER_UPDATE_CONSTRAINTS","getConstraints","tracks","getTracks","updateConstraints","resetConstraints","newConstraint","precAudioFeedback","precRecording","applyConstraints","newConstraints","newConstraintName","stopStream","createMediaStreamSource","setNoiseSuppression","setAutoGain","setEchoCancellation","devices","enumerateDevices","device","kind","changeInput","deviceId","groupId","RECORDER_RECORDING","RECORDER_STOPPED","RECORDER_PAUSED","RECORDER_RESETED","audioEditorContainer","frequencyAudio","currentSpeedAudio","isOfflineMode","constructAudioWorkletProcessor","offline","cleanUpOldNodes","bufferSource","renderWithWorklet","renderWithScriptProcessorNode","currentPitchShifter","getSoundtouchScriptProcessorNode","currentPitchShifterWorklet","bufferSourceRendered","bypass","nInputFrames","approximateNInputFrames","isSoundtouchAudioWorkletEnabled","getCurrentPitchShifter","pitchShifter","valueFloat","totalFrames","bufferReturned","nowBuffering","frequencyBooster","frequencyReduce","dbBooster","dbReduce","bassBoostFilter","bassBoostFilterHighFreq","delay","delayNode","createDelay","delayTime","gainNode","highFrequency","highPassFilter","lowFrequency","lowPassFilter","reverbEnvironment","reverbCustomEnvironmentAddTime","customEnvironment","convolver","createConvolver","getReverbBuffer","additionalData","downloadedBuffers","hasCustomEnvironment","reverbSettings","reverbUrl","lpf1","lpf2","hpf1","hpf2","currentVocoder","applyCurrentSettingsToVocoder","lastSampleCount","samplePerSecond","currentTimeSamplesPerSecond","samplesProcessed","calculatePercentageProcessed","calculateRemainingTimeProcessing","timeDifference","percentageProcessed","timeDifferenceSamplePerSecond","remainingSamples","calculateSmoothedSamplePerSecond","remainingTimeSeconds","isFinite","GenericConfigService","mapConfig","getConfig","setting","getBitrateMP3","disableCompatibilityMode","SoundStudioFactory","createAudioEditor","buffersToFetch","ready","createVoiceRecorder","getAudioEditorInstance","getAudioPlayerInstance","getAudioRecorderInstance","getEventEmitterInstance","getConfigServiceInstance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,74]} \ No newline at end of file diff --git a/dist/esm/SimpleSoundStudioLibrary.js b/dist/esm/SimpleSoundStudioLibrary.js index 8e36ae1..1ad272d 100644 --- a/dist/esm/SimpleSoundStudioLibrary.js +++ b/dist/esm/SimpleSoundStudioLibrary.js @@ -10,5 +10,5 @@ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -***************************************************************************** */!function(t){!function(i){var r="object"==typeof globalThis?globalThis:"object"==typeof e?e:"object"==typeof self?self:"object"==typeof this?this:function(){try{return Function("return this;")()}catch(t){}}()||function(){try{return(0,eval)("(function() { return this; })()")}catch(t){}}(),n=o(t);function o(t,e){return function(i,r){Object.defineProperty(t,i,{configurable:!0,writable:!0,value:r}),e&&e(i,r)}}void 0!==r.Reflect&&(n=o(r.Reflect,n)),function(t,e){var i=Object.prototype.hasOwnProperty,r="function"==typeof Symbol,n=r&&void 0!==Symbol.toPrimitive?Symbol.toPrimitive:"@@toPrimitive",o=r&&void 0!==Symbol.iterator?Symbol.iterator:"@@iterator",s="function"==typeof Object.create,a={__proto__:[]}instanceof Array,u=!s&&!a,c={create:s?function(){return lt(Object.create(null))}:a?function(){return lt({__proto__:null})}:function(){return lt({})},has:u?function(t,e){return i.call(t,e)}:function(t,e){return e in t},get:u?function(t,e){return i.call(t,e)?t[e]:void 0}:function(t,e){return t[e]}},h=Object.getPrototypeOf(Function),l="function"==typeof Map&&"function"==typeof Map.prototype.entries?Map:ut(),d="function"==typeof Set&&"function"==typeof Set.prototype.entries?Set:ct(),f="function"==typeof WeakMap?WeakMap:ht(),p=r?Symbol.for("@reflect-metadata:registry"):void 0,g=nt(),v=ot(g);function m(t,e,i,r){if(x(i)){if(!K(t))throw new TypeError;if(!z(e))throw new TypeError;return C(t,e)}if(!K(t))throw new TypeError;if(!W(e))throw new TypeError;if(!W(r)&&!x(r)&&!L(r))throw new TypeError;return L(r)&&(r=void 0),M(t,e,i=H(i),r)}function y(t,e){function i(i,r){if(!W(i))throw new TypeError;if(!x(r)&&!Q(r))throw new TypeError;O(t,e,i,r)}return i}function E(t,e,i,r){if(!W(i))throw new TypeError;return x(r)||(r=H(r)),O(t,e,i,r)}function _(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),I(t,e,i)}function b(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),P(t,e,i)}function S(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),B(t,e,i)}function A(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),N(t,e,i)}function w(t,e){if(!W(t))throw new TypeError;return x(e)||(e=H(e)),D(t,e)}function R(t,e){if(!W(t))throw new TypeError;return x(e)||(e=H(e)),F(t,e)}function T(t,e,i){if(!W(e))throw new TypeError;if(x(i)||(i=H(i)),!W(e))throw new TypeError;x(i)||(i=H(i));var r=at(e,i,!1);return!x(r)&&r.OrdinaryDeleteMetadata(t,e,i)}function C(t,e){for(var i=t.length-1;i>=0;--i){var r=(0,t[i])(e);if(!x(r)&&!L(r)){if(!z(r))throw new TypeError;e=r}}return e}function M(t,e,i,r){for(var n=t.length-1;n>=0;--n){var o=(0,t[n])(e,i,r);if(!x(o)&&!L(o)){if(!W(o))throw new TypeError;r=o}}return r}function I(t,e,i){if(P(t,e,i))return!0;var r=it(e);return!L(r)&&I(t,r,i)}function P(t,e,i){var r=at(e,i,!1);return!x(r)&&j(r.OrdinaryHasOwnMetadata(t,e,i))}function B(t,e,i){if(P(t,e,i))return N(t,e,i);var r=it(e);return L(r)?void 0:B(t,r,i)}function N(t,e,i){var r=at(e,i,!1);if(!x(r))return r.OrdinaryGetOwnMetadata(t,e,i)}function O(t,e,i,r){at(i,r,!0).OrdinaryDefineOwnMetadata(t,e,i,r)}function D(t,e){var i=F(t,e),r=it(t);if(null===r)return i;var n=D(r,e);if(n.length<=0)return i;if(i.length<=0)return n;for(var o=new d,s=[],a=0,u=i;a=0&&t=this._keys.length?(this._index=-1,this._keys=e,this._values=e):this._index++,{value:i,done:!1}}return{value:void 0,done:!0}},t.prototype.throw=function(t){throw this._index>=0&&(this._index=-1,this._keys=e,this._values=e),t},t.prototype.return=function(t){return this._index>=0&&(this._index=-1,this._keys=e,this._values=e),{value:t,done:!0}},t}();return function(){function e(){this._keys=[],this._values=[],this._cacheKey=t,this._cacheIndex=-2}return Object.defineProperty(e.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),e.prototype.has=function(t){return this._find(t,!1)>=0},e.prototype.get=function(t){var e=this._find(t,!1);return e>=0?this._values[e]:void 0},e.prototype.set=function(t,e){var i=this._find(t,!0);return this._values[i]=e,this},e.prototype.delete=function(e){var i=this._find(e,!1);if(i>=0){for(var r=this._keys.length,n=i+1;n= than the number of constructor arguments of its base class."},P=function(t,e){return"@postConstruct error in class "+t+": "+e},B=function(t,e){return"@preDestroy error in class "+t+": "+e},N=function(t,e){return"onDeactivation() error in class "+t+": "+e},O="Maximum call stack size exceeded",D=function(){function t(){}return t.prototype.getConstructorMetadata=function(t){return{compilerGeneratedMetadata:Reflect.getMetadata(h,t),userGeneratedMetadata:Reflect.getMetadata(u,t)||{}}},t.prototype.getPropertiesMetadata=function(t){return Reflect.getMetadata(c,t)||[]},t}(),F={MultipleBindingsAvailable:2,NoBindingsAvailable:0,OnlyOneBindingAvailable:1};function k(t){return t instanceof RangeError||t.message===O}function x(t){return"function"==typeof t?t.name:"symbol"==typeof t?t.toString():t}function L(t,e,i){var r="",n=i(t,e);return 0!==n.length&&(r="\nRegistered bindings:",n.forEach((function(t){var e="Object";null!==t.implementationType&&(e=V(t.implementationType)),r=r+"\n "+e,t.constraint.metaData&&(r=r+" - "+t.constraint.metaData)}))),r}function G(t,e){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===e||G(t.parentRequest,e))}function W(t){t.childRequests.forEach((function(t){if(G(t,t.serviceIdentifier)){var e=function(t){var e=function t(e,i){void 0===i&&(i=[]);var r=x(e.serviceIdentifier);return i.push(r),null!==e.parentRequest?t(e.parentRequest,i):i}(t);return e.reverse().join(" --\x3e ")}(t);throw new Error(C+" "+e)}W(t)}))}function V(t){if(t.name)return t.name;var e=t.toString(),i=e.match(/^function\s*([^\s(]+)/);return i?i[1]:"Anonymous function: "+e}var U=function(){function t(t){this.id=y(),this.container=t}return t.prototype.addPlan=function(t){this.plan=t},t.prototype.setCurrentRequest=function(t){this.currentRequest=t},t}(),j=function(){function t(t,e){this.key=t,this.value=e}return t.prototype.toString=function(){return this.key===i?"named: "+String(this.value).toString()+" ":"tagged: { key:"+this.key.toString()+", value: "+String(this.value)+" }"},t}(),q=function(t,e){this.parentContext=t,this.rootRequest=e},H=function(){function t(t){this._cb=t}return t.prototype.unwrap=function(){return this._cb()},t}(),K=function(){function t(t){this.str=t}return t.prototype.startsWith=function(t){return 0===this.str.indexOf(t)},t.prototype.endsWith=function(t){var e,i=t.split("").reverse().join("");return e=this.str.split("").reverse().join(""),this.startsWith.call({str:e},i)},t.prototype.contains=function(t){return-1!==this.str.indexOf(t)},t.prototype.equals=function(t){return this.str===t},t.prototype.value=function(){return this.str},t}(),Y=function(){function t(t,e,r,n){this.id=y(),this.type=t,this.serviceIdentifier=r;var o="symbol"==typeof e?e.toString().slice(7,-1):e;this.name=new K(o||""),this.identifier=e,this.metadata=new Array;var s=null;"string"==typeof n?s=new j(i,n):n instanceof j&&(s=n),null!==s&&this.metadata.push(s)}return t.prototype.hasTag=function(t){for(var e=0,i=this.metadata;e0,c=a.length>i.length,h=function(t,e,i,r,n){for(var o=[],s=0;s0?a:J(t,i)}return 0}function tt(t){var e={};return t.forEach((function(t){e[t.key.toString()]=t.value})),{inject:e[s],multiInject:e[a],targetName:e[r],unmanaged:e[n]}}var et=function(){function t(t,e,i,r,n){this.id=y(),this.serviceIdentifier=t,this.parentContext=e,this.parentRequest=i,this.target=n,this.childRequests=[],this.bindings=Array.isArray(r)?r:[r],this.requestScope=null===i?new Map:null}return t.prototype.addChildRequest=function(e,i,r){var n=new t(e,this.parentContext,this,i,r);return this.childRequests.push(n),n},t}();function it(t){return t._bindingDictionary}function rt(t,e,i,r,n){var o=ot(i.container,n.serviceIdentifier),s=[];return o.length===F.NoBindingsAvailable&&i.container.options.autoBindInjectable&&"function"==typeof n.serviceIdentifier&&t.getConstructorMetadata(n.serviceIdentifier).compilerGeneratedMetadata&&(i.container.bind(n.serviceIdentifier).toSelf(),o=ot(i.container,n.serviceIdentifier)),s=e?o:o.filter((function(t){var e=new et(t.serviceIdentifier,i,r,t,n);return t.constraint(e)})),function(t,e,i,r){switch(e.length){case F.NoBindingsAvailable:if(i.isOptional())return e;var n=x(t),o=w;throw o+=function(t,e){if(e.isTagged()||e.isNamed()){var i="",r=e.getNamedTag(),n=e.getCustomTags();return null!==r&&(i+=r.toString()+"\n"),null!==n&&n.forEach((function(t){i+=t.toString()+"\n"}))," "+t+"\n "+t+" - "+i}return" "+t}(n,i),o+=L(r,n,ot),new Error(o);case F.OnlyOneBindingAvailable:return e;case F.MultipleBindingsAvailable:default:if(i.isArray())return e;n=x(t),o=A+" "+n;throw o+=L(r,n,ot),new Error(o)}}(n.serviceIdentifier,s,n,i.container),s}function nt(t,e,i,r,n,o){var s,a;if(null===n){s=rt(t,e,r,null,o),a=new et(i,r,null,s,o);var u=new q(r,a);r.addPlan(u)}else s=rt(t,e,r,n,o),a=n.addChildRequest(o.serviceIdentifier,s,o);s.forEach((function(e){var i=null;if(o.isArray())i=a.addChildRequest(e.serviceIdentifier,e,o);else{if(e.cache)return;i=a}if(e.type===g.Instance&&null!==e.implementationType){var n=function(t,e){return Q(t,V(e),e,!1)}(t,e.implementationType);if(!r.container.options.skipBaseClassChecks){var s=J(t,e.implementationType);if(n.length0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0){var n=function(t,e){return t.reduce((function(t,i){var r=e(i);return i.target.type===v.ConstructorArgument?t.constructorInjections.push(r):(t.propertyRequests.push(i),t.propertyInjections.push(r)),t.isAsync||(t.isAsync=ut(r)),t}),{constructorInjections:[],propertyInjections:[],propertyRequests:[],isAsync:!1})}(e,i),o=gt(gt({},n),{constr:t});r=n.isAsync?function(t){return vt(this,void 0,void 0,(function(){var e,i;return mt(this,(function(r){switch(r.label){case 0:return[4,bt(t.constructorInjections)];case 1:return e=r.sent(),[4,bt(t.propertyInjections)];case 2:return i=r.sent(),[2,_t(gt(gt({},t),{constructorInjections:e,propertyInjections:i}))]}}))}))}(o):_t(o)}else r=new t;return r}function _t(t){var e,i=new((e=t.constr).bind.apply(e,yt([void 0],t.constructorInjections,!1)));return t.propertyRequests.forEach((function(e,r){var n=e.target.identifier,o=t.propertyInjections[r];e.target.isOptional()&&void 0===o||(i[n]=o)})),i}function bt(t){return vt(this,void 0,void 0,(function(){var e,i,r,n;return mt(this,(function(o){for(e=[],i=0,r=t;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0?this._map.set(t,e):this._map.delete(t)},t}(),Qt=function(){function t(){this._map=new Map}return t.prototype.remove=function(t){if(this._map.has(t)){var e=this._map.get(t);return this._map.delete(t),e}return this._getEmptyHandlersStore()},t.prototype.addDeactivation=function(t,e,i){this._getModuleActivationHandlers(t).onDeactivations.add(e,i)},t.prototype.addActivation=function(t,e,i){this._getModuleActivationHandlers(t).onActivations.add(e,i)},t.prototype.clone=function(){var e=new t;return this._map.forEach((function(t,i){e._map.set(i,{onActivations:t.onActivations.clone(),onDeactivations:t.onDeactivations.clone()})})),e},t.prototype._getModuleActivationHandlers=function(t){var e=this._map.get(t);return void 0===e&&(e=this._getEmptyHandlersStore(),this._map.set(t,e)),e},t.prototype._getEmptyHandlersStore=function(){return{onActivations:new zt,onDeactivations:new zt}},t}(),Zt=function(){return Zt=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]=0;a--)(n=t[a])&&(s=(o<3?n(s):o>3?n(e,i,s):n(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s}function le(t,e){return function(i,r){e(i,r,t)}}function de(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function fe(t,e,i,r){return new(i||(i=Promise))((function(n,o){function s(t){try{u(r.next(t))}catch(t){o(t)}}function a(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))}var pe;"function"==typeof SuppressedError&&SuppressedError,function(t){t.LOADING_BUFFERS="loadingBuffers",t.LOADING_BUFFERS_ERROR="loadingBuffersError",t.FETCHING_BUFFERS="fetchingBuffers",t.FETCHING_BUFFERS_ERROR="fetchingBuffersError",t.FINISHED_FETCHING_BUFFERS="finishedFetchingBuffers",t.LOADED_BUFFERS="loadedBuffers",t.COMPATIBILITY_MODE_AUTO_ENABLED="compatibilityModeAutoEnabled",t.RENDERING_AUDIO_PROBLEM_DETECTED="renderingAudioProblemDetected",t.AUDIO_RENDERING_FINISHED="audioRenderingFinished",t.OFFLINE_AUDIO_RENDERING_FINISHED="offlineAudioRenderingFinished",t.PLAYING_STOPPED="playingStopped",t.PLAYING_STARTED="playingStarted",t.PLAYING_FINISHED="playingFinished",t.PLAYING_UPDATE="playingUpdate",t.RECORDER_INIT="recorderInit",t.RECORDER_SUCCESS="recorderSuccess",t.RECORDER_ERROR="recorderError",t.RECORDER_UPDATE_CONSTRAINTS="recorderUpdateConstraints",t.RECORDER_RECORDING="recorderRecording",t.RECORDER_STOPPED="recorderStopped",t.RECORDER_PAUSED="recorderPaused",t.RECORDER_RESETED="recorderReseted",t.RECORDER_COUNT_UPDATE="recorderCountUpdate",t.SAMPLE_RATE_CHANGED="sampleRateChanged",t.DECODING_AUDIO_FILE="decodingAudioFile",t.DECODED_AUDIO_FILE="decodedAudioFile",t.ERROR_DECODING_AUDIO_FILE="errorDecodingAudioFile",t.RECORDER_NOT_FOUND_ERROR="recorderNotFoundError",t.RECORDER_UNKNOWN_ERROR="recorderUnknownError",t.UPDATE_AUDIO_TREATMENT_PERCENT="updateAudioTreatmentPercent",t.UPDATE_REMAINING_TIME_ESTIMATED="updateRemainingTimeEstimated",t.CANCELLED_AND_LOADED_INITIAL_AUDIO="cancelledAndLoadedInitialAudio",t.CANCELLING_AUDIO_PROCESSING="cancellingAudioProcessing"}(pe||(pe={}));const ge={AUDIO_EDITOR:"audioEditor",VOICE_RECORDER:"voiceRecorder",BUFFER_PLAYER:"bufferPlayer",AUDIO_CONTEXT_MANAGER:"audioContextManager",AUDIO_PROCESSOR:"audioProcessor",BUFFER_MANAGER:"bufferManager",FILTER_MANAGER:"filterManager",RENDERER_MANAGER:"rendererManager",SAVE_BUFFER_MANAGER:"saveBufferManager",EXPORT_WAV_COMMAND:"exportWAV",EXPORT_MP3_COMMAND:"exportMP3",AUDIO_WAV:"audio/wav",AUDIO_MP3:"audio/mp3",RECORD_COMMAND:"record",INIT_COMMAND:"init",FILTERS_NAMES:{REVERB:"reverb",ECHO:"echo",BASS_BOOST:"bassboost",BITCRUSHER:"bitcrusher",HIGH_PASS:"highpass",LIMITER:"limiter",LOW_PASS:"lowpass",PASSTHROUGH:"passthroughfilter",RETURN_AUDIO:"returnAudio",SOUNDTOUCH:"soundtouch",TELEPHONIZER:"telephonizer",VOCODER:"vocoder"},WORKLET_PATHS:{BITCRUSHER:"BitCrusher.worklet.js",LIMITER:"Limiter.worklet.js",SOUNDTOUCH:"Soundtouch.worklet.js",RECORDER_WORKLET:"RecorderWorklet.js",PASSTHROUGH:"Passthrough.worklet.js"},WORKLET_NAMES:{BITCRUSHER:"bitcrusher-processor",LIMITER:"limiter-processor",SOUNDTOUCH:"soundtouch-worklet",RECORDER_WORKLET:"recorder-worklet",PASSTHROUGH:"passthrough"},PREFERENCES_KEYS:{COMPATIBILITY_MODE_ENABLED:"compatibility-mode-enabled",COMPATIBILITY_MODE_CHECKED:"compatibility-mode-checked",ENABLE_AUDIO_WORKLET:"enable-audio-worklet",ENABLE_SOUNDTOUCH_AUDIO_WORKLET:"enable-soundtouch-audio-worklet",BUFFER_SIZE:"buffer-size",SAMPLE_RATE:"sample-rate",DISABLE_INITIAL_RENDERING:"disable-initial-rendering",BITRATE_MP3:"bitrate-mp3"},ENABLE_SOUNDTOUCH_AUDIO_WORKLET:!0,ENABLE_AUDIO_WORKLET:!0,ENABLE_RECORDER_AUDIO_WORKLET:!0,SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE:16384,DEFAULT_REVERB_ENVIRONMENT:{name:"Medium Damping Cave E002 M2S",url:"impulse_response.wav",size:1350278,addDuration:4,link:"http://www.cksde.com/p_6_250.htm"},VOCODER_MODULATOR:"modulator.mp3",DEFAULT_BUFFER_SIZE:0,VALID_BUFFER_SIZE:[0,256,512,1024,2048,4096,8192,16384],VALID_MP3_BITRATES:[32,64,96,128,160,256,320],DEFAULT_SAMPLE_RATE:0,VALID_SAMPLE_RATES:[0,8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,176400,192e3],TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL:100,TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR:.9,DISABLE_INITIAL_RENDERING:!0,DEFAULT_SAVE_FORMAT:"wav",DEFAULT_MP3_BITRATE:320};let ve=class{constructor(){this.listeners={},this.listeners={}}on(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)}emit(t,e){this.listeners[t]&&this.listeners[t].forEach((t=>{t(e)}))}off(t,e){this.listeners[t]&&(this.listeners[t]=this.listeners[t].filter((t=>t!==e)))}};ve=he([oe(),de("design:paramtypes",[])],ve);var me=ve;let ye=class{constructor(t,e){this.previousSampleRate=ge.DEFAULT_SAMPLE_RATE,this.eventEmitter=t||new me,this.configService=e,this.setup()}setup(){this.configService&&(this.previousSampleRate=this.configService.getSampleRate(),this.eventEmitter&&this.eventEmitter.emit(pe.SAMPLE_RATE_CHANGED,this.previousSampleRate)),this.currentContext||this.createNewContext(this.previousSampleRate)}createNewContextIfNeeded(t){if(this.configService&&this.configService.isCompatibilityModeEnabled()&&t){if(this.currentSampleRate!=t.sampleRate)return this.createNewContext(t.sampleRate),this.previousSampleRate=t.sampleRate,!0}else{let t=ge.DEFAULT_SAMPLE_RATE;if(this.configService&&(t=this.configService.getSampleRate()),t!=this.previousSampleRate)return this.createNewContext(t),this.previousSampleRate=t,!0}return!1}createNewContext(t){this._currentContext&&(this.oldAudioContext=this._currentContext,this.destroyOldContext());const e={latencyHint:"interactive"};0!=t&&(e.sampleRate=t),this._currentContext=new AudioContext(e),this.eventEmitter&&this.eventEmitter.emit(pe.SAMPLE_RATE_CHANGED,this.currentSampleRate)}destroyOldContext(){this.oldAudioContext&&(this.oldAudioContext.close(),this.oldAudioContext=null)}get currentSampleRate(){return this.currentContext?this.currentContext.sampleRate:0}get currentContext(){return this._currentContext}};ye=he([oe(),le(0,ae(ce.EventEmitter)),le(1,ae(ce.ConfigService)),de("design:paramtypes",[Object,Object])],ye);var Ee=ye;let _e=class{constructor(){this.enabled=!1,this.defaultEnabled=!1,this.bufferFetcherService=null,this.bufferDecoderService=null,this.configService=null,this.eventEmitter=null}isEnabled(){return this.enabled}isDefaultEnabled(){return this.defaultEnabled}setDefaultEnabled(t){this.defaultEnabled=t}setEnabled(t){this.enabled=t}enable(){this.setEnabled(!0)}disable(){this.setEnabled(!1)}toggle(){this.setEnabled(!this.isEnabled())}injectDependencies(t,e,i,r){this.bufferFetcherService=t,this.bufferDecoderService=e,this.configService=i,this.eventEmitter=r}};he([ae(ce.BufferFetcherService),de("design:type",Object)],_e.prototype,"bufferFetcherService",void 0),he([ae(ce.BufferDecoderService),de("design:type",Object)],_e.prototype,"bufferDecoderService",void 0),he([ae(ce.ConfigService),de("design:type",Object)],_e.prototype,"configService",void 0),he([ae(ce.EventEmitter),de("design:type",Object)],_e.prototype,"eventEmitter",void 0),_e=he([oe()],_e);var be=_e;const Se={calcAudioDuration:(t,e)=>{if(t){let i=t.duration+1;return e&&(i/=e),i}return 0},loadAudioBuffer:(t,e)=>fe(void 0,void 0,void 0,(function*(){const i=yield Se.readAsArrayBufferPromisified(e),r=yield t.decodeAudioData(i);return Se.decodeBuffer(t,r)})),readAsArrayBufferPromisified:t=>new Promise(((e,i)=>{const r=new FileReader;r.onload=t=>{var r;const n=null===(r=null==t?void 0:t.target)||void 0===r?void 0:r.result;n instanceof ArrayBuffer?e(n):i()},t&&r.readAsArrayBuffer(t)})),decodeBuffer:(t,e)=>{if(1==e.numberOfChannels){t.resume();const i=e.duration,r=t.sampleRate,n=t.createBuffer(2,r*i+2*r,r),o=e.getChannelData(0),s=n.getChannelData(0),a=n.getChannelData(1);for(let t=0;t{const e=[];for(let i=0;i{const i=new Float32Array(e);for(let r=0;rt.getChannelData(e).reduce(((t,e)=>t+e),0),sumAudioBuffer(t){let e=0;for(let i=0;ivoid 0!==t&&void 0!==t.audioWorklet,isSettingValueValid:t=>!(void 0===t||isNaN(Number(t))||"string"==typeof t&&""===t.trim()),calculateAudioDuration(t,e,i){if(t&&e){return this.calcAudioDuration(t,i)+e.getAddingTime()}return 0},resetAudioRenderingProgress(t){t&&(t.emit(pe.UPDATE_AUDIO_TREATMENT_PERCENT,0),t.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,-1))},forceDownload(t,e){const i=window.document.createElement("a"),r=(window.URL||window.webkitURL).createObjectURL(t);window.document.body.appendChild(i),i.href=r,i.download=e||"output.wav",i.click(),window.URL.revokeObjectURL(r)}};let Ae=class extends be{constructor(t,e,i,r,n,o,s){super(),this.principalBuffer=null,this.filterManager=t,this.rendererManager=e,this.contextManager=i,this.saveBufferManager=r,this.audioProcessor=n,this.bufferManager=o,this.bufferPlayer=s,this.setup()}setup(){this.bufferPlayer&&(this.bufferPlayer.onBeforePlaying((()=>fe(this,void 0,void 0,(function*(){this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager&&this.contextManager.currentContext&&this.audioProcessor&&(yield this.audioProcessor.setupOutput(this.principalBuffer,this.contextManager.currentContext))})))),this.bufferPlayer.on(pe.PLAYING_FINISHED,(()=>{this.bufferPlayer&&this.bufferPlayer.loop&&this.bufferPlayer.start()})))}addFilters(...t){this.filterManager&&this.filterManager.addFilters(...t)}addRenderers(...t){this.rendererManager&&this.rendererManager.addRenderers(...t)}get currentSampleRate(){return this.contextManager?this.contextManager.currentSampleRate:0}get defaultDeviceSampleRate(){const t=new AudioContext;let e=0;return t&&(e=t.sampleRate,t.close()),e}loadBufferFromFile(t){return fe(this,void 0,void 0,(function*(){if(this.principalBuffer=null,this.audioProcessor&&(yield this.audioProcessor.prepareContext(this.principalBuffer)),!(this.contextManager&&this.contextManager.currentContext&&this.bufferDecoderService&&this.audioProcessor))throw new Error("Audio Context is not ready!");if(this.principalBuffer=yield this.bufferDecoderService.decodeBufferFromFile(t),this.audioProcessor.initialRenderingDone=!1,!this.principalBuffer)throw new Error("Error decoding audio file");this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),Se.resetAudioRenderingProgress(this.eventEmitter)}))}loadBuffer(t){this.principalBuffer=t,this.audioProcessor&&(this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),this.audioProcessor.initialRenderingDone=!1)}getOutputBuffer(){return this.audioProcessor?this.audioProcessor.renderedBuffer:null}renderAudio(){return fe(this,void 0,void 0,(function*(){return!!this.audioProcessor&&(yield this.audioProcessor.renderAudio(this.principalBuffer))}))}isAudioWorkletAvailable(){return!(!this.contextManager||!this.contextManager.currentContext)&&Se.isAudioWorkletCompatible(this.contextManager.currentContext)}getFiltersState(){return this.filterManager&&this.rendererManager?Object.assign(Object.assign({},this.filterManager.getFiltersState()),this.rendererManager.getRenderersState()):{}}getFiltersSettings(){return this.filterManager?this.filterManager.getFiltersSettings():new Map}reconnectNodesIfNeeded(){return fe(this,void 0,void 0,(function*(){if(this.contextManager&&this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager.currentContext&&this.principalBuffer&&this.filterManager&&this.filterManager.entrypointFilter){yield this.filterManager.connectNodes(this.contextManager.currentContext,this.principalBuffer,!0,this.bufferPlayer.compatibilityMode);const t=this.filterManager.entrypointFilter.getSpeed();this.bufferPlayer.speedAudio=t,this.bufferPlayer.duration=Se.calculateAudioDuration(this.principalBuffer,this.filterManager,t)*t}}))}toggleFilter(t){this.rendererManager&&this.rendererManager.toggleRenderer(t),this.filterManager&&(this.filterManager.toggleFilter(t),this.reconnectNodesIfNeeded())}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.changeFilterSettings(t,e),yield this.reconnectNodesIfNeeded())}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.resetFilterSettings(t),yield this.reconnectNodesIfNeeded())}))}resetAllFiltersState(){this.rendererManager&&this.rendererManager.resetAllRenderersState(),this.filterManager&&(this.filterManager.resetAllFiltersState(),this.reconnectNodesIfNeeded())}exit(){this.bufferPlayer&&(this.bufferPlayer.stop(),this.bufferPlayer.reset()),this.cancelAudioRendering(),this.principalBuffer=null}cancelAudioRendering(){this.audioProcessor&&this.audioProcessor.cancelAudioRendering()}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}off(t,e){this.eventEmitter&&this.eventEmitter.off(t,e)}saveBuffer(t){return fe(this,void 0,void 0,(function*(){var e;return!(!this.saveBufferManager||!this.audioProcessor)&&(yield null===(e=this.saveBufferManager)||void 0===e?void 0:e.saveBuffer(this.audioProcessor.renderedBuffer,t))}))}set downloadingInitialData(t){this.bufferManager&&(this.bufferManager.downloadingInitialData=t)}get downloadingInitialData(){return!!this.bufferManager&&this.bufferManager.downloadingInitialData}get order(){return-1}get id(){return ge.AUDIO_EDITOR}};Ae=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.SaveBufferManager)),le(4,ae(ce.AudioProcessor)),le(5,ae(ce.BufferManager)),le(6,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object,Object,Object,Object,Object])],Ae);var we=Ae;let Re=class extends be{constructor(t,e,i,r,n){super(),this._renderedBuffer=null,this.audioRenderingLastCanceled=!1,this.initialRenderingDone=!1,this.sumInputBuffer=0,this.contextManager=i,this.bufferPlayer=r,this.filterManager=t,this.rendererManager=e,this.bufferManager=n}prepareContext(t){return fe(this,void 0,void 0,(function*(){if(this.contextManager){this.contextManager.createNewContextIfNeeded(t)&&this.bufferManager&&(yield this.bufferManager.resetBufferFetcher()),this.contextManager.currentContext&&this.contextManager.currentContext.resume()}}))}renderAudio(t){return fe(this,void 0,void 0,(function*(){if(yield this.prepareContext(t),!this.contextManager||!this.contextManager.currentContext)throw new Error("AudioContext is not yet available");if(!this.filterManager)throw new Error("Filter manager is not available");if(!this.rendererManager)throw new Error("Renderer manager is not available");if(!this.filterManager.entrypointFilter)throw new Error("Entrypoint filter is not available");if(!t)throw new Error("No principal buffer available");if(!this.initialRenderingDone&&this.configService&&this.configService.isInitialRenderingDisabled()&&!this.configService.isCompatibilityModeEnabled())return this.loadInitialBuffer(t),this.initialRenderingDone=!0,!0;this.configService&&this.bufferPlayer&&!this.configService.isCompatibilityModeEnabled()&&this.bufferPlayer.compatibilityMode&&this.bufferPlayer.stop();const e=this.filterManager.entrypointFilter.getSpeed(),i=Se.calculateAudioDuration(t,this.filterManager,e),r=new OfflineAudioContext(2,this.contextManager.currentContext.sampleRate*i,this.contextManager.currentContext.sampleRate),n=this.configService&&this.configService.isCompatibilityModeEnabled()?this.contextManager.currentContext:r;return this._renderedBuffer=yield this.rendererManager.executeAudioRenderers(t,n),this.currentOfflineContext=null,this.audioRenderingLastCanceled=!1,Se.resetAudioRenderingProgress(this.eventEmitter),this.filterManager.setupTotalSamples(i,this.contextManager.currentContext),yield this.setupOutput(t,n,i,r)}))}setupPlayerSpeed(t){if(this.filterManager&&this.filterManager.entrypointFilter){const e=this.filterManager.entrypointFilter.getSpeed();t.speedAudio=e}}setupOutput(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(this._renderedBuffer&&this.configService&&this.eventEmitter&&this.bufferPlayer&&this.filterManager){if(yield this.filterManager.initializeWorklets(e),yield this.filterManager.connectNodes(e,this._renderedBuffer,!1,this.configService.isCompatibilityModeEnabled()),this.setupPlayerSpeed(this.bufferPlayer),!this.configService.isCompatibilityModeEnabled()&&r&&this.filterManager.currentNodes){this.currentOfflineContext=r,this.filterManager.currentNodes.output.connect(e.destination);const n=yield r.startRendering();if(this.contextManager&&!this.loadRenderedAudio(t,n))return yield this.setupOutput(t,this.contextManager.currentContext,i);if(this.audioRenderingLastCanceled)return!1;this.eventEmitter.emit(pe.OFFLINE_AUDIO_RENDERING_FINISHED)}else this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes.output,i),this.initialRenderingDone=!0;return this.eventEmitter.emit(pe.AUDIO_RENDERING_FINISHED),!0}return!1}))}loadRenderedAudio(t,e){if(this.eventEmitter&&this.bufferPlayer){if(this.audioRenderingLastCanceled)this.initialRenderingDone||(this.loadInitialBuffer(t),this.eventEmitter.emit(pe.CANCELLED_AND_LOADED_INITIAL_AUDIO));else{if(0==Se.sumAudioBuffer(e)&&0!==this.sumInputBuffer){if(this.configService&&!this.configService.isCompatibilityModeChecked())return this.setCompatibilityModeChecked(!0),this.configService.enableCompatibilityMode(),this.eventEmitter.emit(pe.COMPATIBILITY_MODE_AUTO_ENABLED),!1;this.eventEmitter.emit(pe.RENDERING_AUDIO_PROBLEM_DETECTED)}this._renderedBuffer=e,this.bufferPlayer.loadBuffer(this._renderedBuffer)}this.initialRenderingDone=!0}return!0}loadInitialBuffer(t){this.bufferPlayer&&(this._renderedBuffer=t,this.bufferPlayer.loadBuffer(t))}cancelAudioRendering(){this.currentOfflineContext&&!this.audioRenderingLastCanceled&&this.filterManager&&(this.audioRenderingLastCanceled=!0,this.filterManager.disconnectOldNodes(!1),this.eventEmitter&&this.eventEmitter.emit(pe.CANCELLING_AUDIO_PROCESSING))}setCompatibilityModeChecked(t){this.configService&&this.configService.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED,""+t)}get renderedBuffer(){return this._renderedBuffer}get order(){return-1}get id(){return ge.AUDIO_PROCESSOR}};Re=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.BufferPlayer)),le(4,ae(ce.BufferManager)),de("design:paramtypes",[Object,Object,Object,Object,Object])],Re);var Te=Re;let Ce=class extends be{constructor(t,e,i,r){super(),this.downloadingInitialData=!1,this.audioBuffersToFetch=[],this.bufferFetcherService=e,this.eventEmitter=i||new me,this.filterManager=t,this.filterManager=t,this.audioBuffersToFetch=r,this.setup()}setup(){this.audioBuffersToFetch.length>0&&this.fetchBuffers(!1)}fetchBuffers(t){return fe(this,void 0,void 0,(function*(){if(!this.downloadingInitialData&&this.bufferFetcherService){this.downloadingInitialData=!0,this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADING_BUFFERS);try{yield this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch),this.downloadingInitialData=!1,this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADED_BUFFERS)}catch(e){this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADING_BUFFERS_ERROR)}}}))}resetBufferFetcher(){return fe(this,void 0,void 0,(function*(){this.bufferFetcherService&&(this.bufferFetcherService.reset(),yield this.fetchBuffers(!0),this.filterManager&&(yield this.filterManager.resetFilterBuffers()))}))}get order(){return-1}get id(){return ge.BUFFER_MANAGER}};Ce=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.BufferFetcherService)),le(2,ae(ce.EventEmitter)),le(3,ae(ce.AudioBuffersToFetch)),de("design:paramtypes",[Object,Object,Object,Array])],Ce);var Me=Ce;let Ie=class extends be{constructor(t,e){super(),this.filters=[],this._entryPointFilter=null,this._currentNodes=null,this.filters=t,this._entryPointFilter=e,this.setup()}setup(){for(const t of this.filters)t.initializeDefaultSettings()}addFilters(...t){for(const e of t)e.initializeDefaultSettings(),e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.filters.push(...t)}getFiltersState(){const t={};return this.filters.forEach((e=>{t[e.id]=e.isEnabled()})),t}getFiltersSettings(){const t=new Map;for(const e of this.filters)t.set(e.id,e.getSettings());return t}toggleFilter(t){const e=this.filters.find((e=>e.id===t));e&&e.toggle()}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){const i=this.filters.find((e=>e.id===t));if(i)for(const t of Object.keys(e))yield i.setSetting(t,e[t])}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){const e=this.filters.find((e=>e.id===t));e&&(yield e.resetSettings())}))}resetAllFiltersState(){this.filters.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}connectNodes(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(!this._entryPointFilter)return;let n=null;if(i&&this._currentNodes)n=this._currentNodes.input;else{const i=yield this._entryPointFilter.getEntrypointNode(t,e,!r);n=i.input}const o=[];let s=n;this.disconnectOldNodes(i);const a=this.filters.sort(((t,e)=>t.order-e.order)).filter(((t,e)=>t!==this._entryPointFilter&&(t.isEnabled()||e>=this.filters.length-1)));for(const e of a){const i=e.getNode(t);s&&s.connect(i.input),s=i.output,o.push(i)}this._entryPointFilter&&this._entryPointFilter.updateState(),this._currentNodes={input:n,output:s,intermediateNodes:o.filter((t=>t.input!=s&&t.output!=s&&t.input!=n&&t.output!=n))}}))}disconnectOldNodes(t){if(this._currentNodes&&(this._currentNodes.input.disconnect(),t||this._currentNodes.output.disconnect(),this._currentNodes.intermediateNodes))for(const t of this._currentNodes.intermediateNodes)t.input.disconnect(),t.output.disconnect()}initializeWorklets(t){return fe(this,void 0,void 0,(function*(){for(const e of this.filters)e.isWorklet()&&(yield e.initializeWorklet(t))}))}getAddingTime(){let t=0;for(const e of this.filters)e.isEnabled()&&(t+=e.getAddingTime());return t}setupTotalSamples(t,e){if(e){const i=t*e.sampleRate;for(const t of this.filters)t.totalSamples=i}}resetFilterBuffers(){return fe(this,void 0,void 0,(function*(){for(const t of this.filters)yield t.bufferFetcherReseted()}))}get entrypointFilter(){return this._entryPointFilter}get currentNodes(){return this._currentNodes}get order(){return-1}get id(){return ge.FILTER_MANAGER}};Ie=he([oe(),le(0,ue(ce.Filters)),le(1,ae(ce.EntryPointFilter)),de("design:paramtypes",[Array,Object])],Ie);var Pe=Ie;let Be=class extends be{constructor(t=[]){super(),this.renderers=[],this.renderers=t}addRenderers(...t){for(const e of t)e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.renderers.push(...t)}getRenderersState(){const t={};return this.renderers.forEach((e=>{t[e.id]=e.isEnabled()})),t}toggleRenderer(t){const e=this.renderers.find((e=>e.id===t));e&&e.toggle()}resetAllRenderersState(){this.renderers.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}executeAudioRenderers(t,e){return fe(this,void 0,void 0,(function*(){let i=t;for(const t of this.renderers.sort(((t,e)=>t.order-e.order)))t.isEnabled()&&(i=yield t.renderAudio(e,i));return i}))}get order(){return-1}get id(){return ge.RENDERER_MANAGER}};Be=he([oe(),le(0,ue(ce.Renderers)),de("design:paramtypes",[Array])],Be);var Ne=Be;function Oe(t){return new Worker((t||"")+"RecorderWorker.js")}let De=class{constructor(t){this.worker=null,this.node=null,this.context=null,this.config={bufferLen:4096,sampleRate:44100,numChannels:2,mimeType:"audio/wav",workletBasePath:"worklets/",workerBasePath:"workers/",bitrate:ge.DEFAULT_MP3_BITRATE,callback:()=>{}},this.callbacks={getBuffer:[],exportWAV:[],exportMP3:[]},this.recording=!1,Object.assign(this.config,t)}setup(t){return fe(this,void 0,void 0,(function*(){this.node&&(this.node instanceof AudioWorkletNode&&this.node.port.postMessage("stop"),this.node.disconnect()),t&&(this.context=t.context,yield this.createRecorderNode(),this.node&&this.context&&(t.connect(this.node),this.node.connect(this.context.destination))),this.context&&!this.worker&&(this.worker=Oe(this.config.workerBasePath),this.worker&&(this.worker.postMessage({command:"init",config:{sampleRate:this.context.sampleRate,numChannels:this.config.numChannels,bitrate:this.config.bitrate}}),this.worker.onmessage=t=>{let e=null;switch(t.data.command){case"getBuffer":e=this.callbacks.getBuffer;break;case ge.EXPORT_WAV_COMMAND:e=this.callbacks.exportWAV;break;case ge.EXPORT_MP3_COMMAND:e=this.callbacks.exportMP3}if(e){const i=e.pop();"function"==typeof i&&i(t.data.data)}}))}))}createRecorderNode(){return fe(this,void 0,void 0,(function*(){if(this.context)if(Se.isAudioWorkletCompatible(this.context)&&ge.ENABLE_RECORDER_AUDIO_WORKLET)try{yield this.createRecorderWorklet()}catch(t){this.createRecorderScriptProcessorNode()}else this.createRecorderScriptProcessorNode()}))}createRecorderWorklet(){return fe(this,void 0,void 0,(function*(){if(this.context&&(yield this.context.audioWorklet.addModule(this.config.workletBasePath+ge.WORKLET_PATHS.RECORDER_WORKLET),this.node=new AudioWorkletNode(this.context,ge.WORKLET_NAMES.RECORDER_WORKLET),this.node&&this.node.port)){const t=this.node.parameters.get("numChannels");t&&(t.value=this.config.numChannels,t.setValueAtTime(this.config.numChannels,0)),this.node.port.onmessage=t=>{this.worker&&"record"==t.data.command&&t.data.buffer.length>0&&this.worker.postMessage({command:"record",buffer:t.data.buffer})}}}))}createRecorderScriptProcessorNode(){this.context&&(this.node=this.context.createScriptProcessor.call(this.context,this.config.bufferLen,this.config.numChannels,this.config.numChannels),this.node.onaudioprocess=t=>{if(!this.recording)return;const e=[];for(let i=0;i{this.savingBuffer&&this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback)}))}saveBuffer(t,e){return fe(this,void 0,void 0,(function*(){if(this.savingBuffer)throw new Error("The buffer is currently saving");if(!this.bufferPlayer)throw new Error("No buffer player was found");this.savingBuffer=!0;let i=!1;return i=this.bufferPlayer.compatibilityMode?yield this.saveBufferCompatibilityMode(e):yield this.saveBufferDirect(t,e),this.savingBuffer=!1,i}))}saveBufferDirect(t,e){return new Promise(((i,r)=>{var n;if(!t||this.contextManager&&!this.contextManager.currentContext)return r("No rendered buffer or AudioContext not initialized");const o=Oe(null===(n=this.configService)||void 0===n?void 0:n.getWorkerBasePath());if(o){const r=[];for(let e=0;e{t.data.command!=ge.EXPORT_WAV_COMMAND&&t.data.command!=ge.EXPORT_MP3_COMMAND||this.downloadAudioBlob(t.data.data,e),o.terminate(),this.savingBuffer=!1,i(!0)},o.postMessage({command:ge.INIT_COMMAND,config:{sampleRate:t.sampleRate,numChannels:2,bitrate:(null==e?void 0:e.bitrate)||ge.DEFAULT_MP3_BITRATE}}),o.postMessage({command:ge.RECORD_COMMAND,buffer:r}),o.postMessage({command:"mp3"===(null==e?void 0:e.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?ge.EXPORT_MP3_COMMAND:ge.EXPORT_WAV_COMMAND,type:ge.AUDIO_WAV})}}))}saveBufferCompatibilityMode(t){return new Promise(((e,i)=>{if(!this.bufferPlayer)return i("No buffer player found");this.bufferPlayer.start().then((()=>{if(!this.configService)return i("No config service found");if(!this.filterManager)return i("No filter manager found");const r=new De({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"mp3"==(null==t?void 0:t.format)?ge.AUDIO_MP3:ge.AUDIO_WAV,bitrate:(null==t?void 0:t.bitrate)||ge.DEFAULT_MP3_BITRATE});r.setup(this.filterManager.currentNodes.output).then((()=>{r.record(),this.playingStoppedCallback=()=>{r.kill(),this.savingBuffer=!1,this.eventEmitter&&(this.eventEmitter.off(pe.PLAYING_FINISHED,i),this.playingStoppedCallback&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback)),e(!0)};const i=()=>{this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback),r.stop();const n=n=>{this.downloadAudioBlob(n,t),this.savingBuffer=!1,this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_FINISHED,i),r.kill(),e(!0)};"mp3"===(null==t?void 0:t.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?r.exportMP3(n):r.exportWAV(n)};this.eventEmitter&&(this.eventEmitter.on(pe.PLAYING_FINISHED,i),this.eventEmitter.on(pe.PLAYING_STOPPED,this.playingStoppedCallback))}))}))}))}downloadAudioBlob(t,e){Se.forceDownload(t,"audio-"+(new Date).toISOString()+"."+((null==e?void 0:e.format)||ge.DEFAULT_SAVE_FORMAT))}get order(){return-1}get id(){return ge.SAVE_BUFFER_MANAGER}};ke=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.AudioContextManager)),le(2,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object])],ke);var xe=ke;let Le=class extends be{constructor(t){super(),this.buffer=null,this.source=null,this.currentTime=0,this.displayTime=0,this.duration=0,this.intervals=[],this.playing=!1,this.loop=!1,this.speedAudio=1,this.onBeforePlayingCallback=()=>fe(this,void 0,void 0,(function*(){})),this.compatibilityMode=!1,this.currentNode=null,this._contextManager=t}init(t){this.playing=!1,this._contextManager&&this._contextManager.currentContext&&(this._contextManager.currentContext.resume(),!this.compatibilityMode&&this.buffer&&(null==this.source||t||this.source.disconnect(),this.source=this._contextManager.currentContext.createBufferSource(),this.source.buffer=this.buffer,this.duration=this.buffer.duration*this.speedAudio,this.source.connect(this._contextManager.currentContext.destination))),this.updateInfos()}loadBuffer(t){this.compatibilityMode=!1,this.reset(),this.buffer=t,this.init()}setCompatibilityMode(t,e){this.compatibilityMode=!0,this.reset(),this.init(),null!=e&&(this.duration=e*this.speedAudio),this.currentNode=t,this.updateInfos()}reset(t){this.clearIntervals(),this.currentTime=0,this.displayTime=0,t||this.stop()}stop(){var t;this.clearIntervals(),null!=this.source&&null!=this.source&&this.playing&&(this.source.stop(0),this.playing=!1),this.currentNode&&(this.currentNode.disconnect(),this.compatibilityMode&&(this.currentTime=0,this.displayTime=0)),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.PLAYING_STOPPED),this.updateInfos()}clearIntervals(){for(const t of this.intervals)clearInterval(t);this.intervals=[]}start(t){return fe(this,void 0,void 0,(function*(){var e;if(this.source||this.compatibilityMode){if(t||this.stop(),this.init(t),yield this.onBeforePlayingCallback(),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.PLAYING_STARTED),this.compatibilityMode){if(!(this.currentNode&&this._contextManager&&this._contextManager.currentContext))return;this.currentNode.connect(this._contextManager.currentContext.destination)}else{if(!this.source)return;this.source.start(0,t?0:this.currentTime/this.speedAudio),this.playing=!0}let i=performance.now();this.intervals.push(window.setInterval((()=>{var e,r;const n=performance.now(),o=n-i;i=n,this.currentTime+=o/1e3*this.speedAudio,this.displayTime=this.currentTime,this.currentTime>this.duration?this.loop?this.compatibilityMode?null===(e=this.eventEmitter)||void 0===e||e.emit(pe.PLAYING_FINISHED):(this.reset(t),this.start()):(null===(r=this.eventEmitter)||void 0===r||r.emit(pe.PLAYING_FINISHED),this.reset(t)):this.updateInfos()}),100))}}))}playDirect(){return fe(this,void 0,void 0,(function*(){this.compatibilityMode?this.start(!1):this.start(!0)}))}pause(){this.stop()}updateInfos(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.PLAYING_UPDATE)}setTimePercent(t){this.compatibilityMode||(this.currentTime=Math.round(this.duration*(t/100)),this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}setTime(t){this.compatibilityMode||(this.currentTime=t,this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}onBeforePlaying(t){this.onBeforePlayingCallback=t}toggleLoop(){this.loop=!this.loop}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}get currentTimeDisplay(){return("0"+Math.trunc(this.displayTime/60)).slice(-2)+":"+("0"+Math.trunc(this.displayTime%60)).slice(-2)}get maxTimeDisplay(){return("0"+Math.trunc(this.duration/60)).slice(-2)+":"+("0"+Math.trunc(this.duration%60)).slice(-2)}get percent(){return 100-Math.round((this.duration-this.displayTime)/this.duration*100)}get remainingTimeDisplay(){return("0"+Math.trunc((this.duration-this.displayTime)/60)).slice(-2)+":"+("0"+Math.trunc((this.duration-this.displayTime)%60)).slice(-2)}get order(){return-1}get id(){return ge.BUFFER_PLAYER}};Le=he([oe(),le(0,ae(ce.AudioContextManager)),de("design:paramtypes",[Object])],Le);var Ge=Le;let We=class{constructor(t,e,i){this.buffers=new Map,this.bufferErrors=[],this.configService=null,this.contextManager=t,this.eventEmitter=i||new me,this.configService=e}fetchBuffer(t,e){return fe(this,void 0,void 0,(function*(){var i,r,n,o;const s=(this.configService?this.configService.getSoundBasePath():"")+t;if(null==this.buffers.get(this.getKeyFromLocation(s))||e){null===(i=this.eventEmitter)||void 0===i||i.emit(pe.FETCHING_BUFFERS,s);try{const t=yield fetch(s);if(!t.ok)throw this.bufferErrors.push(s),null===(r=this.eventEmitter)||void 0===r||r.emit(pe.FETCHING_BUFFERS_ERROR,s),pe.FETCHING_BUFFERS_ERROR;{const e=yield t.arrayBuffer();if(this.contextManager&&this.contextManager.currentContext){const t=yield this.contextManager.currentContext.decodeAudioData(e);this.buffers.set(this.getKeyFromLocation(s),Se.decodeBuffer(this.contextManager.currentContext,t))}}null===(n=this.eventEmitter)||void 0===n||n.emit(pe.FINISHED_FETCHING_BUFFERS,s)}catch(t){throw this.bufferErrors.push(s),null===(o=this.eventEmitter)||void 0===o||o.emit(pe.FETCHING_BUFFERS_ERROR,s),pe.FETCHING_BUFFERS_ERROR}}}))}fetchAllBuffers(t){return fe(this,void 0,void 0,(function*(){for(const e of t)yield this.fetchBuffer(e)}))}getAudioBuffer(t){return this.buffers.get(this.getKeyFromLocation(t))}getOrFetchAudioBuffer(t){return fe(this,void 0,void 0,(function*(){return null==this.getAudioBuffer(t)&&(yield this.fetchBuffer(t)),this.getAudioBuffer(t)}))}getDownloadedBuffersList(){return Array.from(this.buffers.keys())}getKeyFromLocation(t){return t.substring(t.lastIndexOf("/")+1)}reset(){this.buffers.clear()}};We=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.ConfigService)),le(2,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object,Object])],We);var Ve=We;let Ue=class{constructor(t,e){this.contextManager=t,this.eventEmitter=e||new me}decodeBufferFromFile(t){return fe(this,void 0,void 0,(function*(){this.eventEmitter&&this.eventEmitter.emit(pe.DECODING_AUDIO_FILE);try{if(this.contextManager&&this.contextManager.currentContext){const e=yield Se.loadAudioBuffer(this.contextManager.currentContext,t);return this.eventEmitter&&this.eventEmitter.emit(pe.DECODED_AUDIO_FILE),e}}catch(t){console.error(t),this.eventEmitter&&(this.eventEmitter.emit(pe.DECODED_AUDIO_FILE),this.eventEmitter.emit(pe.ERROR_DECODING_AUDIO_FILE))}return null}))}};Ue=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object])],Ue);var je=Ue;class qe extends be{}class He extends be{constructor(){super(...arguments),this.defaultSettings=null,this._totalSamples=0}getAddingTime(){return 0}initializeDefaultSettings(){this.defaultSettings=this.getSettings()}getDefaultSettings(){return this.defaultSettings}resetSettings(){return fe(this,void 0,void 0,(function*(){if(this.defaultSettings)for(const t in this.defaultSettings)this.defaultSettings&&void 0!==this.defaultSettings[t]&&(yield this.setSetting(t,this.defaultSettings[t]))}))}isWorklet(){return!1}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){return!1}))}set totalSamples(t){this._totalSamples=t}}class Ke{constructor(t,e){this._value=0,this._minValue=0,this._maxValue=Number.MAX_SAFE_INTEGER,this._defaultValue=0,this.context=null,this.automationRate="a-rate",this._defaultValue=void 0!==e?e:0,this._value=this._defaultValue,this.context=t}get value(){return this._value}set value(t){this._value=Math.max(this._minValue,Math.min(this._maxValue,t))}get minValue(){return this._minValue}get maxValue(){return this._maxValue}get defaultValue(){return this._defaultValue}setValueAtTime(t,e){return console.warn("setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}linearRampToValueAtTime(t,e){return console.warn("linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}exponentialRampToValueAtTime(t,e){return console.warn("exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}cancelAndHoldAtTime(t){throw new Error("Method not implemented.")}cancelScheduledValues(t){throw new Error("Method not implemented.")}setTargetAtTime(t,e,i){throw new Error("Method not implemented.")}setValueCurveAtTime(t,e,i){throw new Error("Method not implemented.")}}class Ye{constructor(t,e,i){this._parameters=new Map,this._port=null,this.currentContext=null,this.workletProcessor=e,this.currentContext=t,this._scriptProcessorNode=t.createScriptProcessor(i,2,2),this.setupPort(),this.setupProcessor(),this.setupWorkletScope(t)}setupPort(){const t=new MessageChannel;t.port1.onmessage=t=>{this.workletProcessor&&this.workletProcessor.port2&&this.workletProcessor.port2.postMessage(t.data)},this.workletProcessor&&this.workletProcessor.port2&&(this.workletProcessor.port2.onmessage=e=>{t.port1.postMessage(e.data)}),this._port=t.port2}setupProcessor(){if(!this._scriptProcessorNode)return;this._scriptProcessorNode.onaudioprocess=t=>{if(this.workletProcessor){const e=[Se.convertAudioBufferToFloat32Array(t.inputBuffer)],i=[Se.convertAudioBufferToFloat32Array(t.outputBuffer)],r=[];for(const[t,e]of this._parameters.entries())r.push([t,Se.convertAudioParamToFloat32Array(e,1)]);const n=Object.fromEntries(r);this.workletProcessor.process(e,i,n)}};const t=this.workletProcessor.defaultParameterDescriptors;t&&t.forEach((t=>{this.currentContext&&this._parameters.set(t.name,new Ke(this.currentContext,t.defaultValue))}))}setupWorkletScope(t){"undefined"!=typeof window&&(window.sampleRate=t.sampleRate)}get port(){return this._port}get parameters(){return this._parameters}get node(){return this._scriptProcessorNode}get context(){var t;return null===(t=this._scriptProcessorNode)||void 0===t?void 0:t.context}}class ze{static registerProcessor(t,e){ze.processorsMap.set(t,e)}static getProcessor(t){const e=ze.processorsMap.get(t);return e?new e:null}}ze.processorsMap=new Map;class Qe{constructor(){this.messageChannel=null,this.messageChannel=new MessageChannel}process(t,e,i){return!0}get port(){return this.messageChannel&&this.messageChannel.port1}get port2(){return this.messageChannel&&this.messageChannel.port2}get parameters(){throw new Error("Method not implemented.")}get parameterDescriptors(){throw new Error("Method not implemented.")}get defaultParameterDescriptors(){return[]}}"undefined"==typeof window||"AudioWorkletProcessor"in window||(window.AudioWorkletProcessor=Qe,window.registerProcessor=ze.registerProcessor),"undefined"==typeof global||"AudioWorkletProcessor"in global||(global.AudioWorkletProcessor=Qe,global.registerProcessor=ze.registerProcessor);class Ze extends He{constructor(){super(...arguments),this.currentWorkletNode=null,this.fallbackToScriptProcessor=!1,this.keepCurrentNodeIfPossible=!1}initializeWorklet(t){return fe(this,void 0,void 0,(function*(){if(this.stop(),!Se.isAudioWorkletCompatible(t))return console.error("Audio Worklets not supported on this browser. Fallback to ScriptProcessor"),void(this.fallbackToScriptProcessor=!0);const e=(this.configService?this.configService.getWorkletBasePath():"")+this.workletPath;yield t.audioWorklet.addModule(e).catch((t=>{console.error(`Error when loading Worklet (${e}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`,t),this.fallbackToScriptProcessor=!0}))}))}isAudioWorkletEnabled(){return this.configService?this.configService.isAudioWorkletEnabled():ge.ENABLE_AUDIO_WORKLET}initializeNode(t,e){if(this.isAudioWorkletEnabled()&&!this.fallbackToScriptProcessor)this.currentWorkletNode=new AudioWorkletNode(t,e);else{const i=ze.getProcessor(e);if(!i)throw new Error(`No processor registered with name ${e} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);this.currentWorkletNode=new Ye(t,i,this.configService.getBufferSize())}this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.onmessage=t=>this.receiveEvent(t))}applyCurrentSettingsToWorklet(){if(this.currentWorkletNode&&this.currentWorkletNode.parameters){const t=this.getSettings();for(const e of Object.keys(t)){const i=this.currentWorkletNode.parameters.get(e);i&&(i.value=t[e],i.setValueAtTime(t[e],0))}}}getNode(t){if(this.keepCurrentNodeIfPossible&&this.currentWorkletNode&&this.currentWorkletNode.context==t||(this.stop(),this.initializeNode(t,this.workletName)),this.applyCurrentSettingsToWorklet(),this.setEnabled(this.isEnabled()),this.currentWorkletNode)return this.currentWorkletNode instanceof Ye?{input:this.currentWorkletNode.node,output:this.currentWorkletNode.node}:{input:this.currentWorkletNode,output:this.currentWorkletNode};throw new Error("Worklet node has not yet been created")}stop(){this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.postMessage("stop"),this.currentWorkletNode.port.onmessage=null),this.currentWorkletNode=null}setEnabled(t){this.currentWorkletNode&&this.currentWorkletNode.port&&this.currentWorkletNode.port.postMessage(t?"enable":"disable"),super.setEnabled(t)}isWorklet(){return!0}}class Xe extends AudioWorkletProcessor{constructor(){super(),this.stopped=!1,this.phaser=null,this.last=null,this.port.onmessage=t=>{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[{name:"bits",defaultValue:16},{name:"normFreq",defaultValue:.9}]}get defaultParameterDescriptors(){return Xe.parameterDescriptors}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=2*Math.pow(.5,i.bits[0]),s=(1-i.normFreq[0])/(sampleRate/48e3);if(null==this.last&&(this.last=new Array(r.length).fill(0)),null==this.phaser&&(this.phaser=new Array(r.length).fill(0)),r&&r[0]){const t=r[0].length;for(let e=0;e=1&&(this.phaser[e]-=1,this.last[e]=o*Math.floor(i[r]*(1/o)+.5)),a[r]=this.last[e]}}return!0}stop(){this.stopped=!0,this.phaser=null,this.last=null}}registerProcessor(ge.WORKLET_NAMES.BITCRUSHER,Xe);class $e{constructor(t){this._array=new Float32Array,this.n=0,this.length=0,this.readPointer=0,this.writePointer=0,this.n=Math.floor(t),this.init()}init(){this._array=new Float32Array(2*this.n),this.length=this._array.length,this.readPointer=0,this.writePointer=this.n-1,this._array.fill(0)}read(){const t=this._array[this.readPointer%this.length];return this.readPointer=(this.readPointer+1)%this.length,t}push(t){this._array[this.writePointer%this.length]=t,this.writePointer=(this.writePointer+1)%this.length}reset(){this.init()}clear(){this._array=new Float32Array,this.length=0,this.readPointer=0,this.writePointer=0}sum(){return this._array.reduce(((t,e)=>t+e),0)}}class Je extends AudioWorkletProcessor{constructor(){super(),this.delayBuffer=[],this.envelopeSample=0,this.stopped=!1,this.disabled=!1,this.port.onmessage=t=>{"reset"==t.data?this.reset():"stop"==t.data?this.stop():"disable"==t.data?this.disabled=!0:"enable"==t.data&&(this.disabled=!1)}}static get parameterDescriptors(){return[{name:"preGain",defaultValue:0},{name:"postGain",defaultValue:0},{name:"attackTime",defaultValue:0},{name:"releaseTime",defaultValue:3},{name:"threshold",defaultValue:-.05},{name:"lookAheadTime",defaultValue:0}]}get defaultParameterDescriptors(){return Je.parameterDescriptors}getEnvelope(t,e,i,r){const n=Math.exp(-1/(r*e)),o=Math.exp(-1/(r*i)),s=new Float32Array(t.length);for(let e=0;er&&(r=t[n][i]);return r}ampToDB(t){return 20*Math.log10(t)}dBToAmp(t){return Math.pow(10,t/20)}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=[],s=this.dBToAmp(i.postGain[0]),a=this.dBToAmp(i.preGain[0]);for(let t=0;t0&&a)for(let e=0;e=0||(i=(t.length-r)/2);const n=2*i;this.ensureCapacity(i+this._frameCount);const o=this.endIndex;this.vector.set(t.subarray(r,r+n),o),this._frameCount+=i}putBuffer(t,e,i=0){e=e||0,i>=0||(i=t.frameCount-e),this.putSamples(t.vector,t.position+e,i)}receive(t){t>=0&&!(t>this._frameCount)||(t=this.frameCount),this._frameCount-=t,this._position+=t}receiveSamples(t,e=0){const i=2*e,r=this.startIndex;t.set(this._vector.subarray(r,r+i)),this.receive(e)}extract(t,e=0,i=0){const r=this.startIndex+2*e,n=2*i;t.set(this._vector.subarray(r,r+n))}ensureCapacity(t=0){const e=parseInt(2*t);if(this._vector.length0&&(this._vector.set(this._vector.subarray(this.startIndex,this.endIndex)),this._position=0)}}class ei{constructor(t){t?(this._inputBuffer=new ti,this._outputBuffer=new ti):this._inputBuffer=this._outputBuffer=null}get inputBuffer(){return this._inputBuffer}set inputBuffer(t){this._inputBuffer=t}get outputBuffer(){return this._outputBuffer}set outputBuffer(t){this._outputBuffer=t}clear(){this._inputBuffer.clear(),this._outputBuffer.clear()}}class ii extends ei{constructor(t){super(t),this.reset(),this._rate=1}set rate(t){this._rate=t}reset(){this.slopeCount=0,this.prevSampleL=0,this.prevSampleR=0}clone(){const t=new ii;return t.rate=this._rate,t}process(){const t=this._inputBuffer.frameCount;this._outputBuffer.ensureAdditionalCapacity(t/this._rate+1);const e=this.transpose(t);this._inputBuffer.receive(),this._outputBuffer.put(e)}transpose(t=0){if(0===t)return 0;const e=this._inputBuffer.vector,i=this._inputBuffer.startIndex,r=this._outputBuffer.vector,n=this._outputBuffer.endIndex;let o=0,s=0;for(;this.slopeCount<1;)r[n+2*s]=(1-this.slopeCount)*this.prevSampleL+this.slopeCount*e[i],r[n+2*s+1]=(1-this.slopeCount)*this.prevSampleR+this.slopeCount*e[i+1],s+=1,this.slopeCount+=this._rate;if(this.slopeCount-=1,1!==t)t:for(;;){for(;this.slopeCount>1;)if(this.slopeCount-=1,o+=1,o>=t-1)break t;const a=i+2*o;r[n+2*s]=(1-this.slopeCount)*e[a]+this.slopeCount*e[a+2],r[n+2*s+1]=(1-this.slopeCount)*e[a+1]+this.slopeCount*e[a+3],s+=1,this.slopeCount+=this._rate}return this.prevSampleL=e[i+2*t-2],this.prevSampleR=e[i+2*t-1],s}}class ri{constructor(t){this._pipe=t}get pipe(){return this._pipe}get inputBuffer(){return this._pipe.inputBuffer}get outputBuffer(){return this._pipe.outputBuffer}fillInputBuffer(){throw new Error("fillInputBuffer() not overridden")}fillOutputBuffer(t=0){for(;this.outputBuffer.frameCountthis._position)throw new RangeError("New position may not be greater than current position");const e=this.outputBufferPosition-(this._position-t);if(e<0)throw new RangeError("New position falls outside of history buffer");this.outputBufferPosition=e,this._position=t}get sourcePosition(){return this._sourcePosition}set sourcePosition(t){this.clear(),this._sourcePosition=t}onEnd(){this.callback()}fillInputBuffer(t=0){const e=new Float32Array(2*t),i=this.sourceSound.extract(e,t,this._sourcePosition);this._sourcePosition+=i,this.inputBuffer.putSamples(e,0,i)}extract(t,e=0){this.fillOutputBuffer(this.outputBufferPosition+e);const i=Math.min(e,this.outputBuffer.frameCount-this.outputBufferPosition);this.outputBuffer.extract(t,this.outputBufferPosition,i);const r=this.outputBufferPosition+i;return this.outputBufferPosition=Math.min(this.historyBufferSize,r),this.outputBuffer.receive(Math.max(r-this.historyBufferSize,0)),this._position+=i,i}handleSampleData(t){this.extract(t.data,4096)}clear(){super.clear(),this.outputBufferPosition=0}}const si=[[124,186,248,310,372,434,496,558,620,682,744,806,868,930,992,1054,1116,1178,1240,1302,1364,1426,1488,0],[-100,-75,-50,-25,25,50,75,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-20,-15,-10,-5,5,10,15,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-4,-3,-2,-1,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],ai=-10/1.5;class ui extends ei{constructor(t){super(t),this._quickSeek=!0,this.midBufferDirty=!1,this.midBuffer=null,this.overlapLength=0,this.autoSeqSetting=!0,this.autoSeekSetting=!0,this._tempo=1,this.setParameters(44100,0,0,8)}clear(){super.clear(),this.clearMidBuffer()}clearMidBuffer(){this.midBufferDirty&&(this.midBufferDirty=!1,this.midBuffer=null)}setParameters(t,e,i,r){t>0&&(this.sampleRate=t),r>0&&(this.overlapMs=r),e>0?(this.sequenceMs=e,this.autoSeqSetting=!1):this.autoSeqSetting=!0,i>0?(this.seekWindowMs=i,this.autoSeekSetting=!1):this.autoSeekSetting=!0,this.calculateSequenceParameters(),this.calculateOverlapLength(this.overlapMs),this.tempo=this._tempo}set tempo(t){let e;this._tempo=t,this.calculateSequenceParameters(),this.nominalSkip=this._tempo*(this.seekWindowLength-this.overlapLength),this.skipFract=0,e=Math.floor(this.nominalSkip+.5),this.sampleReq=Math.max(e+this.overlapLength,this.seekWindowLength)+this.seekLength}get tempo(){return this._tempo}get inputChunkSize(){return this.sampleReq}get outputChunkSize(){return this.overlapLength+Math.max(0,this.seekWindowLength-2*this.overlapLength)}calculateOverlapLength(t=0){let e;e=this.sampleRate*t/1e3,e=e<16?16:e,e-=e%8,this.overlapLength=e,this.refMidBuffer=new Float32Array(2*this.overlapLength),this.midBuffer=new Float32Array(2*this.overlapLength)}checkLimits(t,e,i){return ti?i:t}calculateSequenceParameters(){let t,e;this.autoSeqSetting&&(t=150+-50*this._tempo,t=this.checkLimits(t,50,125),this.sequenceMs=Math.floor(t+.5)),this.autoSeekSetting&&(e=28.333333333333332+ai*this._tempo,e=this.checkLimits(e,15,25),this.seekWindowMs=Math.floor(e+.5)),this.seekWindowLength=Math.floor(this.sampleRate*this.sequenceMs/1e3),this.seekLength=Math.floor(this.sampleRate*this.seekWindowMs/1e3)}set quickSeek(t){this._quickSeek=t}clone(){const t=new ui;return t.tempo=this._tempo,t.setParameters(this.sampleRate,this.sequenceMs,this.seekWindowMs,this.overlapMs),t}seekBestOverlapPosition(){return this._quickSeek?this.seekBestOverlapPositionStereoQuick():this.seekBestOverlapPositionStereo()}seekBestOverlapPositionStereo(){let t,e,i,r=0;for(this.preCalculateCorrelationReferenceStereo(),t=0,e=Number.MIN_VALUE;re&&(e=i,t=r);return t}seekBestOverlapPositionStereoQuick(){let t,e,i,r,n,o=0;for(this.preCalculateCorrelationReferenceStereo(),e=Number.MIN_VALUE,t=0,r=0,n=0;o<4;o+=1){let s=0;for(;si[o][s]&&(n=r+si[o][s],!(n>=this.seekLength));)i=this.calculateCrossCorrelationStereo(2*n,this.refMidBuffer),i>e&&(e=i,t=n),s+=1;r=t}return t}preCalculateCorrelationReferenceStereo(){let t,e,i=0;for(;i=this.sampleReq;){t=this.seekBestOverlapPosition(),this._outputBuffer.ensureAdditionalCapacity(this.overlapLength),this.overlap(Math.floor(t)),this._outputBuffer.put(this.overlapLength),e=this.seekWindowLength-2*this.overlapLength,e>0&&this._outputBuffer.putBuffer(this._inputBuffer,t+this.overlapLength,e);const r=this._inputBuffer.startIndex+2*(t+this.seekWindowLength-this.overlapLength);this.midBuffer.set(this._inputBuffer.vector.subarray(r,r+2*this.overlapLength)),this.skipFract+=this.nominalSkip,i=Math.floor(this.skipFract),this.skipFract-=i,this._inputBuffer.receive(i)}}}const ci=function(t,e){return(t>e?t-e:e-t)>1e-10};class hi{constructor(){this.transposer=new ii(!1),this.stretch=new ui(!1),this._inputBuffer=new ti,this._intermediateBuffer=new ti,this._outputBuffer=new ti,this._rate=0,this._tempo=0,this.virtualPitch=1,this.virtualRate=1,this.virtualTempo=1,this.calculateEffectiveRateAndTempo()}clear(){this.transposer.clear(),this.stretch.clear()}clone(){const t=new hi;return t.rate=this.rate,t.tempo=this.tempo,t}get rate(){return this._rate}set rate(t){this.virtualRate=t,this.calculateEffectiveRateAndTempo()}set rateChange(t){this._rate=1+.01*t}get tempo(){return this._tempo}set tempo(t){this.virtualTempo=t,this.calculateEffectiveRateAndTempo()}set tempoChange(t){this.tempo=1+.01*t}set pitch(t){this.virtualPitch=t,this.calculateEffectiveRateAndTempo()}set pitchOctaves(t){this.pitch=Math.exp(.69314718056*t),this.calculateEffectiveRateAndTempo()}set pitchSemitones(t){this.pitchOctaves=t/12}get inputBuffer(){return this._inputBuffer}get outputBuffer(){return this._outputBuffer}calculateEffectiveRateAndTempo(){const t=this._tempo,e=this._rate;this._tempo=this.virtualTempo/this.virtualPitch,this._rate=this.virtualRate*this.virtualPitch,ci(this._tempo,t)&&(this.stretch.tempo=this._tempo),ci(this._rate,e)&&(this.transposer.rate=this._rate),this._rate>1?this._outputBuffer!=this.transposer.outputBuffer&&(this.stretch.inputBuffer=this._inputBuffer,this.stretch.outputBuffer=this._intermediateBuffer,this.transposer.inputBuffer=this._intermediateBuffer,this.transposer.outputBuffer=this._outputBuffer):this._outputBuffer!=this.stretch.outputBuffer&&(this.transposer.inputBuffer=this._inputBuffer,this.transposer.outputBuffer=this._intermediateBuffer,this.stretch.inputBuffer=this._intermediateBuffer,this.stretch.outputBuffer=this._outputBuffer)}process(){this._rate>1?(this.stretch.process(),this.transposer.process()):(this.transposer.process(),this.stretch.process())}}class li{constructor(t){this.buffer=t,this._position=0}get dualChannel(){return this.buffer.numberOfChannels>1}get position(){return this._position}set position(t){this._position=t}extract(t,e=0,i=0){this.position=i;let r=this.buffer.getChannelData(0),n=this.dualChannel?this.buffer.getChannelData(1):this.buffer.getChannelData(0),o=0;for(;o=r?i:new Array(r-i.length+1).join(n)+i}`;var i,r,n},fi=function(t){const e=this.timePlayed,i=this.sampleRate;if(this.sourcePosition=t,this.timePlayed=t/i,e!==this.timePlayed){const t=new CustomEvent("play",{detail:{timePlayed:this.timePlayed,formattedTimePlayed:this.formattedTimePlayed,percentagePlayed:this.percentagePlayed}});this._node.dispatchEvent(t)}};class pi{constructor(t,e,i,r=ni){this._soundtouch=new hi;const n=new li(e);this.timePlayed=0,this.sourcePosition=0,this._filter=new oi(n,this._soundtouch,r),this._node=function(t,e,i=ni,r=4096){const n=t.createScriptProcessor(r,2,2),o=new Float32Array(2*r);return n.onaudioprocess=t=>{let n=t.outputBuffer.getChannelData(0),s=t.outputBuffer.getChannelData(1),a=e.extract(o,r);i(e.sourcePosition),0===a&&e.onEnd();let u=0;for(;ufi.call(this,t)),i),this.tempo=1,this.rate=1,this.duration=e.duration,this.sampleRate=t.sampleRate,this.listeners=[]}get formattedDuration(){return di(this.duration)}get formattedTimePlayed(){return di(this.timePlayed)}get percentagePlayed(){return 100*this._filter.sourcePosition/(this.duration*this.sampleRate)}set percentagePlayed(t){this._filter.sourcePosition=parseInt(t*this.duration*this.sampleRate),this.sourcePosition=this._filter.sourcePosition,this.timePlayed=this.sourcePosition/this.sampleRate}get node(){return this._node}set pitch(t){this._soundtouch.pitch=t}set pitchSemitones(t){this._soundtouch.pitchSemitones=t}set rate(t){this._soundtouch.rate=t}set tempo(t){this._soundtouch.tempo=t}connect(t){this._node.connect(t)}disconnect(){this._node.disconnect()}on(t,e){this.listeners.push({name:t,cb:e}),this._node.addEventListener(t,(t=>e(t.detail)))}off(t=null){let e=this.listeners;t&&(e=e.filter((e=>e.name===t))),e.forEach((t=>{this._node.removeEventListener(t.name,(e=>t.cb(e.detail)))}))}}let gi;"undefined"!=typeof window&&void 0!==window.AudioWorkletNode&&(gi=class extends AudioWorkletNode{constructor(t,e,i){super(t,e,i),this.name="",this.running=!1,this._tempo=1,this._pitch=1,this.name=this.constructor.name,this.running=!0,this.updateInterval=i.processorOptions.updateInterval}setup(t,e){return fe(this,void 0,void 0,(function*(){return new Promise((i=>{this.port&&(this.port.onmessage=t=>{t&&t.data&&"OK"===t.data.status&&"setup"===t.data.args[0]&&(this.port.onmessage=this.messageProcessor.bind(this),i())},this.port.postMessage({command:"setup",args:[t,e]}),this._tempo=t,this._pitch=e)}))}))}set updateInterval(t){this.port.postMessage({command:"updateInterval",args:[t]})}get node(){return this}set tempo(t){this.port.postMessage({command:"setTempo",args:[t]})}set pitch(t){this.port.postMessage({command:"setPitch",args:[t]})}get tempo(){return this.port.postMessage({command:"getTempo",args:[]}),this._tempo}get pitch(){return this.port.postMessage({command:"getPitch",args:[]}),this._pitch}stop(){return fe(this,void 0,void 0,(function*(){this.running&&(this.port.postMessage({command:"stop",args:[]}),this.disconnect(),this.running=!1)}))}messageProcessor(t){if(t.data.command){const{command:e}=t.data;if("End"===e)this.stop();if(t.data.status){const e=t.data.args[1];switch(t.data.args[0]){case"getTempo":this._tempo=e;break;case"getPitch":this._pitch=e}return}}}});var vi=gi;class mi{constructor(t,e,i){this.FILTER_QUALITY=6,this.FOURIER_SIZE=4096,this.WAVETABLEBOOST=40,this.SAWTOOTHBOOST=.4,this.oscillatorType=4,this.oscillatorDetuneValue=0,this.audioContext=null,this.carrierBuffer=null,this.modulatorNode=null,this.vocoding=!1,this.modulatorInput=null,this.carrierInput=null,this.modulatorGain=null,this.modulatorGainValue=1,this.noiseBuffer=null,this.noiseNode=null,this.noiseGain=null,this.noiseGainValue=.2,this.carrierSampleNode=null,this.carrierSampleGain=null,this.carrierSampleGainValue=0,this.oscillatorNode=null,this.oscillatorGain=null,this.oscillatorGainValue=1,this.wavetable=null,this.wavetableSignalGain=null,this.modFilterBands=null,this.modFilterPostGains=null,this.heterodynes=null,this.powers=null,this.lpFilters=null,this.lpFilterPostGains=null,this.carrierBands=null,this.carrierFilterPostGains=null,this.carrierBandGains=null,this.vocoderBands=null,this.numVocoderBands=0,this.hpFilterGain=null,this.outputGain=null,this.audioContext=t,this.carrierBuffer=e,this.modulatorBuffer=i}init(){this.generateVocoderBands(55,7040,28),this.setupVocoderGraph(),this.vocode()}getNodes(){return{modulatorNode:this.modulatorNode,modulatorGain:this.modulatorGain,synthLevel:this.oscillatorGain,noiseNode:this.noiseGain,oscillatorNode:this.oscillatorNode,hpFilterGain:this.hpFilterGain,outputGain:this.outputGain}}shutOffCarrier(){this.oscillatorNode&&this.noiseNode&&this.carrierSampleNode&&(this.oscillatorNode.stop(0),this.oscillatorNode=null,this.noiseNode.stop(0),this.noiseNode=null,this.carrierSampleNode.stop(0),this.carrierSampleNode=null)}selectSawtooth(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.SAWTOOTHBOOST),this.oscillatorNode&&(this.oscillatorNode.type="sawtooth")}selectWavetable(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST),this.oscillatorNode&&this.wavetable&&this.oscillatorNode.setPeriodicWave(this.wavetable),this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST)}updateModGain(t){this.modulatorGainValue=t,this.modulatorGain&&(this.modulatorGain.gain.value=t)}updateSampleLevel(t){this.carrierSampleGainValue=t,this.carrierSampleGain&&(this.carrierSampleGain.gain.value=t)}updateSynthLevel(t){this.oscillatorGainValue=t,this.oscillatorGain&&(this.oscillatorGain.gain.value=t)}updateNoiseLevel(t){this.noiseGainValue=t,this.noiseGain&&(this.noiseGain.gain.value=t)}updateDetuneValue(t){this.oscillatorDetuneValue=t,this.oscillatorNode&&(this.oscillatorNode.detune.value=t)}generateVocoderBands(t,e,i){const r=1200*Math.log(e/t)/Math.LN2/i,n=Math.pow(2,r/1200);this.vocoderBands=[];let o=t;for(let t=0;t0?t:-t)/32768;for(let e=0;e{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[]}get defaultParameterDescriptors(){return yi.parameterDescriptors}process(t,e){if(this.stopped)return!1;const i=t[0],r=e[0];if(i&&i[0]&&(this.samplesCount+=i[0].length),r){for(let t=0;t{},this.seconds=t,this.initialSeconds=t,this.interval,this.incr=e}start(){this.interval=window.setInterval((()=>this.count()),1e3)}stop(){clearInterval(this.interval)}count(){this.seconds+=this.incr,this.seconds<=0&&this.stop(),this.countCallback&&this.countCallback()}onCount(t){this.countCallback=t}}let _i=class extends be{constructor(t,e){super(),this.recorder=null,this.input=null,this.stream=null,this.alreadyInit=!1,this.timer=null,this.enableAudioFeedback=!1,this.recording=!1,this.deviceList=[],this.constraints={audio:{noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0,sampleRate:{ideal:44100}}},this.sampleRateConfigNotSupported=!1,this.contextManager=t,this.configService=e}init(){return fe(this,void 0,void 0,(function*(){var t;if(this.isRecordingAvailable()){this.sampleRateConfigNotSupported=!navigator.mediaDevices.getSupportedConstraints().sampleRate,this.contextManager&&(this.sampleRateConfigNotSupported?this.contextManager.createNewContext(0):this.contextManager.createNewContextIfNeeded()),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_INIT);try{const t=yield navigator.mediaDevices.getUserMedia(this.constraints);this.contextManager&&this.contextManager.currentContext&&this.contextManager.currentContext.resume(),yield this.setup(t,!1,!1),this.alreadyInit=!0,this.timer=new Ei(0,1),this.timer.onCount((()=>{var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_COUNT_UPDATE)})),this.successCallback()}catch(t){console.error(t);if(t)switch(t.name){case"SecurityError":case"NotAllowedError":this.errorCallback();break;case"NotFoundError":this.notFoundErrorCallback();break;case"NotSupportedError":this.sampleRateConfigNotSupported||(this.sampleRateConfigNotSupported=!0,this.init());break;default:this.unknownErrorCallback()}}navigator.mediaDevices.ondevicechange=()=>this.updateInputList()}}))}successCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_SUCCESS)}errorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_ERROR)}notFoundErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_NOT_FOUND_ERROR)}unknownErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_UNKNOWN_ERROR)}audioFeedback(t){var e;this.contextManager&&this.contextManager.currentContext&&(t?(this.input&&this.input.connect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!0):(this.input&&this.input.connect(this.contextManager.currentContext.destination)&&this.input.disconnect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!1),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.RECORDER_UPDATE_CONSTRAINTS))}getConstraints(){if(this.stream){const t=this.stream.getTracks();if(t&&t.length>0)return t[0].getSettings()}return null}updateConstraints(){var t;const e=this.getConstraints();e&&(this.constraints.audio=Object.assign(this.constraints.audio,e),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_UPDATE_CONSTRAINTS))}resetConstraints(t){return fe(this,void 0,void 0,(function*(){if(this.stream){const e=this.enableAudioFeedback,i=this.recording,r=this.stream.getTracks();if(t&&(this.updateConstraints(),this.constraints.audio=Object.assign(this.constraints.audio,t.audio)),r&&r.length>0)try{yield r[0].applyConstraints(this.constraints.audio);const n=this.getConstraints(),o=t?Object.keys(t.audio)[0]:"";if(this.audioFeedback(!1),this.pause(),!t||n&&n[o]!=t.audio[o]){this.stopStream();const t=yield navigator.mediaDevices.getUserMedia(this.constraints);yield this.setup(t,i,e)}else yield this.setup(null,i,e)}catch(t){this.errorCallback()}}}))}setup(t,e,i){return fe(this,void 0,void 0,(function*(){t&&this.contextManager&&this.contextManager.currentContext&&(this.input=this.contextManager.currentContext.createMediaStreamSource(t),this.stream=t),this.recorder&&this.input&&(yield this.recorder.setup(this.input),e&&(yield this.record())),this.audioFeedback(i),this.updateConstraints(),yield this.updateInputList()}))}setNoiseSuppression(t){this.resetConstraints({audio:{noiseSuppression:t}})}setAutoGain(t){this.resetConstraints({audio:{autoGainControl:t}})}setEchoCancellation(t){this.resetConstraints({audio:{echoCancellation:t}})}updateInputList(){return fe(this,void 0,void 0,(function*(){if(this.deviceList){const t=yield navigator.mediaDevices.enumerateDevices();this.deviceList=[],t.forEach((t=>{"audioinput"==t.kind&&this.deviceList.push(t)}))}}))}changeInput(t,e){e&&(this.constraints.audio.deviceId=t,this.constraints.audio.groupId=e,this.resetConstraints())}record(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.configService&&this.input&&(this.recorder||(this.recorder=new Fe({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"audio/wav"}),yield this.recorder.setup(this.input)),this.recorder&&this.recorder.record(),this.timer&&this.timer.start(),this.recording=!0,this.eventEmitter&&this.eventEmitter.emit(pe.RECORDER_RECORDING))}))}stop(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.recorder&&(this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,this.recorder.getBuffer((t=>{var e;if(this.contextManager&&this.contextManager.currentContext){this.contextManager.currentContext.resume();const i=this.contextManager.currentContext.createBuffer(2,t[0].length,this.contextManager.currentContext.sampleRate);i.getChannelData(0).set(t[0]),i.getChannelData(1).set(t[1]),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.RECORDER_STOPPED,i),this.reset()}})))}))}pause(){var t;this.alreadyInit&&(this.recorder&&this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_PAUSED))}stopStream(){if(this.stream){const t=this.stream.getTracks();for(let e=0,i=t.length;e{const r=e.numberOfChannels,n=t.sampleRate*e.duration+2*t.sampleRate,o=t.createBuffer(r,n,t.sampleRate);for(let t=0;tSi.get(ce.EntryPointFilter))),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.frequencyBooster=200,this.frequencyReduce=200,this.dbBooster=15,this.dbReduce=-2}getNode(t){const e=t.createBiquadFilter();e.type="lowshelf",e.frequency.value=this.frequencyBooster,e.gain.value=this.dbBooster;const i=t.createBiquadFilter();return i.type="highshelf",i.frequency.value=this.frequencyReduce,i.gain.value=this.dbReduce,i.connect(e),{input:i,output:e}}get order(){return 3}get id(){return ge.FILTERS_NAMES.BASS_BOOST}getSettings(){return{frequencyBooster:this.frequencyBooster,frequencyReduce:this.frequencyReduce,dbBooster:this.dbBooster,dbReduce:this.dbReduce}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"frequencyBooster":this.frequencyBooster=parseInt(e);break;case"frequencyReduce":this.frequencyReduce=parseInt(e);break;case"dbBooster":this.dbBooster=parseInt(e);break;case"dbReduce":this.dbReduce=parseInt(e)}}))}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.bits=16,this.normFreq=.9}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.BITCRUSHER}get workletName(){return ge.WORKLET_NAMES.BITCRUSHER}get order(){return 6}get id(){return ge.FILTERS_NAMES.BITCRUSHER}getSettings(){return{bits:this.bits,normFreq:this.normFreq}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"bits":this.bits=parseInt(e);break;case"normFreq":this.normFreq=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.delay=.2,this.gain=.75}getNode(t){const e=t.createDelay(179);e.delayTime.value=this.delay;const i=t.createGain();return i.gain.value=this.gain,i.connect(e),e.connect(i),{input:i,output:e}}get order(){return 7}get id(){return ge.FILTERS_NAMES.ECHO}getAddingTime(){return 5}getSettings(){return{delay:this.delay,gain:this.gain}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"delay":this.delay=parseFloat(e);break;case"gain":this.gain=parseFloat(e)}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.highFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="highpass",e.frequency.value=this.highFrequency,{input:e,output:e}}get order(){return 4}get id(){return ge.FILTERS_NAMES.HIGH_PASS}getSettings(){return{highFrequency:this.highFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"highFrequency"===t)this.highFrequency=parseInt(e)}))}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(),this.preGain=0,this.postGain=0,this.attackTime=0,this.releaseTime=3,this.threshold=-.05,this.lookAheadTime=.1,this.keepCurrentNodeIfPossible=!0,this.enable(),this.setDefaultEnabled(!0)}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.LIMITER}get workletName(){return ge.WORKLET_NAMES.LIMITER}get order(){return 11}get id(){return ge.FILTERS_NAMES.LIMITER}getAddingTime(){return this.lookAheadTime}getSettings(){return{preGain:this.preGain,postGain:this.postGain,attackTime:this.attackTime,releaseTime:this.releaseTime,threshold:this.threshold,lookAheadTime:this.lookAheadTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"preGain":this.preGain=parseFloat(e);break;case"postGain":this.postGain=parseFloat(e);break;case"attackTime":this.attackTime=parseFloat(e);break;case"releaseTime":this.releaseTime=parseFloat(e);break;case"threshold":this.threshold=parseFloat(e);break;case"lookAheadTime":this.lookAheadTime=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.lowFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="lowpass",e.frequency.value=this.lowFrequency,{input:e,output:e}}get order(){return 5}get id(){return ge.FILTERS_NAMES.LOW_PASS}getSettings(){return{lowFrequency:this.lowFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"lowFrequency"===t)this.lowFrequency=parseInt(e)}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT,this.reverbCustomEnvironmentAddTime=5,this.customEnvironment=null}getNode(t){const e=t.createConvolver();this.reverbEnvironment&&("custom"!=this.reverbEnvironment.url||this.customEnvironment)||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT);const i=this.getReverbBuffer(t);return i&&(e.buffer=i),{input:e,output:e}}getReverbBuffer(t){if("custom"==this.reverbEnvironment.url&&this.customEnvironment){if(this.customEnvironment.sampleRate===t.sampleRate)return this.customEnvironment;this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT}else if(this.bufferFetcherService)return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url)}get order(){return 9}get id(){return ge.FILTERS_NAMES.REVERB}getAddingTime(){const t=this.getSettings();if(t&&t.reverbEnvironment){if("custom"==t.reverbEnvironment.value)return this.reverbCustomEnvironmentAddTime;if(t.reverbEnvironment.additionalData)return t.reverbEnvironment.additionalData.addDuration}return 0}getSettings(){var t;return this.reverbEnvironment?{reverbEnvironment:{name:this.reverbEnvironment.name,value:this.reverbEnvironment.url,additionalData:{size:this.reverbEnvironment.size,link:this.reverbEnvironment.link,addDuration:this.reverbEnvironment.addDuration}},downloadedBuffers:null===(t=this.bufferFetcherService)||void 0===t?void 0:t.getDownloadedBuffersList(),hasCustomEnvironment:!!this.customEnvironment,reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}:{reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){var i;if("reverbEnvironment"==t){const t=e;if(t){const e=t.value;try{"custom"!=e&&(yield null===(i=this.bufferFetcherService)||void 0===i?void 0:i.fetchBuffer(e)),t.additionalData?this.reverbEnvironment={name:t.name,url:e,size:t.additionalData.size,addDuration:t.additionalData.addDuration,link:t.additionalData.link}:this.reverbEnvironment={name:t.name,url:e,size:0,addDuration:0,link:""}}catch(t){}}}else"reverbCustomEnvironmentAddTime"==t?Se.isSettingValueValid(e)&&(this.reverbCustomEnvironmentAddTime=parseInt(e)):"reverbCustomEnvironmentFile"==t&&this.bufferDecoderService&&e&&(this.customEnvironment=yield this.bufferDecoderService.decodeBufferFromFile(e),this.customEnvironment||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT))}))}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){var t;const e=this.getSettings();if(e){const i=null===(t=e.reverbEnvironment)||void 0===t?void 0:t.value;if(i&&"custom"!==i&&this.bufferFetcherService)return yield this.bufferFetcherService.fetchBuffer(i),!0}return!1}))}}),Si.bind(ce.Filters).to(class extends He{getNode(t){const e=t.createBiquadFilter();e.type="lowpass",e.frequency.value=2e3;const i=t.createBiquadFilter();i.type="lowpass",i.frequency.value=2e3;const r=t.createBiquadFilter();r.type="highpass",r.frequency.value=500;const n=t.createBiquadFilter();return n.type="highpass",n.frequency.value=500,e.connect(i),i.connect(r),r.connect(n),{input:e,output:n}}get order(){return 7}get id(){return ge.FILTERS_NAMES.TELEPHONIZER}getSettings(){return{}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Si.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.currentVocoder=null,this.modulatorGainValue=1,this.carrierSampleGainValue=0,this.oscillatorGainValue=1,this.noiseGainValue=.2,this.oscillatorDetuneValue=0}getNode(t){var e;const i=null===(e=this.bufferFetcherService)||void 0===e?void 0:e.getAudioBuffer(ge.VOCODER_MODULATOR);this.currentVocoder=new mi(t,i),this.currentVocoder.init(),this.applyCurrentSettingsToVocoder();const{modulatorGain:r,outputGain:n}=this.currentVocoder.getNodes();return{input:r,output:n}}getSettings(){return{modulatorGainValue:this.modulatorGainValue,carrierSampleGainValue:this.carrierSampleGainValue,oscillatorGainValue:this.oscillatorGainValue,noiseGainValue:this.noiseGainValue,oscillatorDetuneValue:this.oscillatorDetuneValue}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"modulatorGainValue":this.modulatorGainValue=parseFloat(e);break;case"carrierSampleGainValue":this.carrierSampleGainValue=parseFloat(e);break;case"oscillatorGainValue":this.oscillatorGainValue=parseFloat(e);break;case"noiseGainValue":this.noiseGainValue=parseFloat(e);break;case"oscillatorDetuneValue":this.oscillatorDetuneValue=parseFloat(e)}this.applyCurrentSettingsToVocoder()}}))}applyCurrentSettingsToVocoder(){this.currentVocoder&&(this.currentVocoder.updateModGain(this.modulatorGainValue),this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue),this.currentVocoder.updateSynthLevel(this.oscillatorGainValue),this.currentVocoder.updateNoiseLevel(this.noiseGainValue),this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue))}get order(){return 1}get id(){return ge.FILTERS_NAMES.VOCODER}}),Si.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.currentTime=0,this.lastSampleCount=0,this.samplePerSecond=0,this.currentTimeSamplesPerSecond=0}receiveEvent(t){const e=performance.now(),i=t.data.samplesCount;"update"===t.data.command&&this.calculatePercentageProcessed(e,i),this.calculateRemainingTimeProcessing(e,i)}calculatePercentageProcessed(t,e){0===this.currentTime&&(this.currentTime=t);const i=t-this.currentTime,r=e/this._totalSamples;this.eventEmitter&&i>=ge.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL&&(this.eventEmitter.emit(pe.UPDATE_AUDIO_TREATMENT_PERCENT,100*r),this.currentTime=t)}calculateRemainingTimeProcessing(t,e){0===this.currentTimeSamplesPerSecond&&(this.currentTimeSamplesPerSecond=t);const i=t-this.currentTimeSamplesPerSecond,r=this._totalSamples-e;if(this.eventEmitter&&r<=0)this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,0);else if(this.eventEmitter&&i>=1e3){this.calculateSmoothedSamplePerSecond(i,e);const n=r/this.samplePerSecond;this.currentTimeSamplesPerSecond=t,this.lastSampleCount=e,isNaN(n)||!isFinite(n)?this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,-1):this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,n)}}calculateSmoothedSamplePerSecond(t,e){if(t>0){const i=(e-this.lastSampleCount)/(t/1e3);this.samplePerSecond=ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR*i+(1-ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR)*this.samplePerSecond}}get workletName(){return ge.WORKLET_NAMES.PASSTHROUGH}get workletPath(){return ge.WORKLET_PATHS.PASSTHROUGH}get order(){return 10}get id(){return ge.FILTERS_NAMES.PASSTHROUGH}set totalSamples(t){super.totalSamples=t,this.currentTime=0,this.currentTimeSamplesPerSecond=0,this.samplePerSecond=0,this.lastSampleCount=0}getSettings(){return{}}isEnabled(){return!0}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Si.bind(ce.EventEmitter).to(me),Si.bind(ce.AudioContextManager).to(Ee),Si.bind(ce.AudioEditor).to(we),Si.bind(ce.AudioProcessor).to(Te),Si.bind(ce.BufferManager).to(Me),Si.bind(ce.FilterManager).to(Pe),Si.bind(ce.RendererManager).to(Ne),Si.bind(ce.SaveBufferManager).to(xe),Si.bind(ce.BufferPlayer).to(Ge),Si.bind(ce.BufferFetcherService).to(Ve),Si.bind(ce.BufferDecoderService).to(je),Si.bind(ce.VoiceRecorder).to(bi);let Ai=class{constructor(){this.mapConfig=new Map}getConfig(t){return this.mapConfig.get(t)}setConfig(t,e){this.mapConfig.set(t,e)}isCompatibilityModeEnabled(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED)}isCompatibilityModeChecked(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED)}isAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_AUDIO_WORKLET}isSoundtouchAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_SOUNDTOUCH_AUDIO_WORKLET}getBufferSize(){const t=this.getConfig(ge.PREFERENCES_KEYS.BUFFER_SIZE);return null!=t?parseInt(t):ge.DEFAULT_BUFFER_SIZE}getSampleRate(){const t=this.getConfig(ge.PREFERENCES_KEYS.SAMPLE_RATE);return null!=t?parseInt(t):ge.DEFAULT_SAMPLE_RATE}getBitrateMP3(){const t=this.getConfig(ge.PREFERENCES_KEYS.BITRATE_MP3);return null!=t?parseInt(t):ge.DEFAULT_MP3_BITRATE}enableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"true")}disableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"false")}getWorkletBasePath(){return""}getWorkerBasePath(){return""}getSoundBasePath(){return""}isInitialRenderingDisabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);return null!=t?"true"==t:ge.DISABLE_INITIAL_RENDERING}};Ai=he([oe()],Ai);var wi=Ai;class Ri{static createAudioEditor(t,e){return Ri.ready||(t?Si.bind(ce.ConfigService).toDynamicValue((()=>t)):(Si.bind(ce.ConfigService).to(wi),console.warn("No ConfigService provided. Using default generic implementation.")),Si.bind(ce.AudioBuffersToFetch).toConstantValue(e||[]),Ri.ready=!0),Si.get(ce.AudioEditor)}static createVoiceRecorder(){return Si.get(ce.VoiceRecorder)}static getAudioEditorInstance(){return Si.get(ce.AudioEditor)}static getAudioPlayerInstance(){return Si.get(ce.BufferPlayer)}static getAudioRecorderInstance(){return Si.get(ce.VoiceRecorder)}static getEventEmitterInstance(){return Si.get(ce.EventEmitter)}static getConfigServiceInstance(){return Si.get(ce.ConfigService)}}Ri.ready=!1;export{be as AbstractAudioElement,He as AbstractAudioFilter,Ze as AbstractAudioFilterWorklet,qe as AbstractAudioRenderer,we as AudioEditor,Ge as BufferPlayer,ge as Constants,me as EventEmitter,pe as EventType,wi as GenericConfigService,Ri as SoundStudioFactory,Se as UtilFunctions,bi as VoiceRecorder,Si as audioEditorContainer}; +***************************************************************************** */!function(t){!function(i){var r="object"==typeof globalThis?globalThis:"object"==typeof e?e:"object"==typeof self?self:"object"==typeof this?this:function(){try{return Function("return this;")()}catch(t){}}()||function(){try{return(0,eval)("(function() { return this; })()")}catch(t){}}(),n=o(t);function o(t,e){return function(i,r){Object.defineProperty(t,i,{configurable:!0,writable:!0,value:r}),e&&e(i,r)}}void 0!==r.Reflect&&(n=o(r.Reflect,n)),function(t,e){var i=Object.prototype.hasOwnProperty,r="function"==typeof Symbol,n=r&&void 0!==Symbol.toPrimitive?Symbol.toPrimitive:"@@toPrimitive",o=r&&void 0!==Symbol.iterator?Symbol.iterator:"@@iterator",s="function"==typeof Object.create,a={__proto__:[]}instanceof Array,u=!s&&!a,c={create:s?function(){return lt(Object.create(null))}:a?function(){return lt({__proto__:null})}:function(){return lt({})},has:u?function(t,e){return i.call(t,e)}:function(t,e){return e in t},get:u?function(t,e){return i.call(t,e)?t[e]:void 0}:function(t,e){return t[e]}},h=Object.getPrototypeOf(Function),l="function"==typeof Map&&"function"==typeof Map.prototype.entries?Map:ut(),d="function"==typeof Set&&"function"==typeof Set.prototype.entries?Set:ct(),f="function"==typeof WeakMap?WeakMap:ht(),p=r?Symbol.for("@reflect-metadata:registry"):void 0,g=nt(),v=ot(g);function m(t,e,i,r){if(x(i)){if(!K(t))throw new TypeError;if(!z(e))throw new TypeError;return C(t,e)}if(!K(t))throw new TypeError;if(!W(e))throw new TypeError;if(!W(r)&&!x(r)&&!L(r))throw new TypeError;return L(r)&&(r=void 0),M(t,e,i=H(i),r)}function y(t,e){function i(i,r){if(!W(i))throw new TypeError;if(!x(r)&&!Q(r))throw new TypeError;O(t,e,i,r)}return i}function E(t,e,i,r){if(!W(i))throw new TypeError;return x(r)||(r=H(r)),O(t,e,i,r)}function _(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),I(t,e,i)}function b(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),P(t,e,i)}function S(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),B(t,e,i)}function A(t,e,i){if(!W(e))throw new TypeError;return x(i)||(i=H(i)),N(t,e,i)}function w(t,e){if(!W(t))throw new TypeError;return x(e)||(e=H(e)),D(t,e)}function R(t,e){if(!W(t))throw new TypeError;return x(e)||(e=H(e)),F(t,e)}function T(t,e,i){if(!W(e))throw new TypeError;if(x(i)||(i=H(i)),!W(e))throw new TypeError;x(i)||(i=H(i));var r=at(e,i,!1);return!x(r)&&r.OrdinaryDeleteMetadata(t,e,i)}function C(t,e){for(var i=t.length-1;i>=0;--i){var r=(0,t[i])(e);if(!x(r)&&!L(r)){if(!z(r))throw new TypeError;e=r}}return e}function M(t,e,i,r){for(var n=t.length-1;n>=0;--n){var o=(0,t[n])(e,i,r);if(!x(o)&&!L(o)){if(!W(o))throw new TypeError;r=o}}return r}function I(t,e,i){if(P(t,e,i))return!0;var r=it(e);return!L(r)&&I(t,r,i)}function P(t,e,i){var r=at(e,i,!1);return!x(r)&&j(r.OrdinaryHasOwnMetadata(t,e,i))}function B(t,e,i){if(P(t,e,i))return N(t,e,i);var r=it(e);return L(r)?void 0:B(t,r,i)}function N(t,e,i){var r=at(e,i,!1);if(!x(r))return r.OrdinaryGetOwnMetadata(t,e,i)}function O(t,e,i,r){at(i,r,!0).OrdinaryDefineOwnMetadata(t,e,i,r)}function D(t,e){var i=F(t,e),r=it(t);if(null===r)return i;var n=D(r,e);if(n.length<=0)return i;if(i.length<=0)return n;for(var o=new d,s=[],a=0,u=i;a=0&&t=this._keys.length?(this._index=-1,this._keys=e,this._values=e):this._index++,{value:i,done:!1}}return{value:void 0,done:!0}},t.prototype.throw=function(t){throw this._index>=0&&(this._index=-1,this._keys=e,this._values=e),t},t.prototype.return=function(t){return this._index>=0&&(this._index=-1,this._keys=e,this._values=e),{value:t,done:!0}},t}();return function(){function e(){this._keys=[],this._values=[],this._cacheKey=t,this._cacheIndex=-2}return Object.defineProperty(e.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),e.prototype.has=function(t){return this._find(t,!1)>=0},e.prototype.get=function(t){var e=this._find(t,!1);return e>=0?this._values[e]:void 0},e.prototype.set=function(t,e){var i=this._find(t,!0);return this._values[i]=e,this},e.prototype.delete=function(e){var i=this._find(e,!1);if(i>=0){for(var r=this._keys.length,n=i+1;n= than the number of constructor arguments of its base class."},P=function(t,e){return"@postConstruct error in class "+t+": "+e},B=function(t,e){return"@preDestroy error in class "+t+": "+e},N=function(t,e){return"onDeactivation() error in class "+t+": "+e},O="Maximum call stack size exceeded",D=function(){function t(){}return t.prototype.getConstructorMetadata=function(t){return{compilerGeneratedMetadata:Reflect.getMetadata(h,t),userGeneratedMetadata:Reflect.getMetadata(u,t)||{}}},t.prototype.getPropertiesMetadata=function(t){return Reflect.getMetadata(c,t)||[]},t}(),F={MultipleBindingsAvailable:2,NoBindingsAvailable:0,OnlyOneBindingAvailable:1};function k(t){return t instanceof RangeError||t.message===O}function x(t){return"function"==typeof t?t.name:"symbol"==typeof t?t.toString():t}function L(t,e,i){var r="",n=i(t,e);return 0!==n.length&&(r="\nRegistered bindings:",n.forEach((function(t){var e="Object";null!==t.implementationType&&(e=V(t.implementationType)),r=r+"\n "+e,t.constraint.metaData&&(r=r+" - "+t.constraint.metaData)}))),r}function G(t,e){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===e||G(t.parentRequest,e))}function W(t){t.childRequests.forEach((function(t){if(G(t,t.serviceIdentifier)){var e=function(t){var e=function t(e,i){void 0===i&&(i=[]);var r=x(e.serviceIdentifier);return i.push(r),null!==e.parentRequest?t(e.parentRequest,i):i}(t);return e.reverse().join(" --\x3e ")}(t);throw new Error(C+" "+e)}W(t)}))}function V(t){if(t.name)return t.name;var e=t.toString(),i=e.match(/^function\s*([^\s(]+)/);return i?i[1]:"Anonymous function: "+e}var U=function(){function t(t){this.id=y(),this.container=t}return t.prototype.addPlan=function(t){this.plan=t},t.prototype.setCurrentRequest=function(t){this.currentRequest=t},t}(),j=function(){function t(t,e){this.key=t,this.value=e}return t.prototype.toString=function(){return this.key===i?"named: "+String(this.value).toString()+" ":"tagged: { key:"+this.key.toString()+", value: "+String(this.value)+" }"},t}(),q=function(t,e){this.parentContext=t,this.rootRequest=e},H=function(){function t(t){this._cb=t}return t.prototype.unwrap=function(){return this._cb()},t}(),K=function(){function t(t){this.str=t}return t.prototype.startsWith=function(t){return 0===this.str.indexOf(t)},t.prototype.endsWith=function(t){var e,i=t.split("").reverse().join("");return e=this.str.split("").reverse().join(""),this.startsWith.call({str:e},i)},t.prototype.contains=function(t){return-1!==this.str.indexOf(t)},t.prototype.equals=function(t){return this.str===t},t.prototype.value=function(){return this.str},t}(),Y=function(){function t(t,e,r,n){this.id=y(),this.type=t,this.serviceIdentifier=r;var o="symbol"==typeof e?e.toString().slice(7,-1):e;this.name=new K(o||""),this.identifier=e,this.metadata=new Array;var s=null;"string"==typeof n?s=new j(i,n):n instanceof j&&(s=n),null!==s&&this.metadata.push(s)}return t.prototype.hasTag=function(t){for(var e=0,i=this.metadata;e0,c=a.length>i.length,h=function(t,e,i,r,n){for(var o=[],s=0;s0?a:J(t,i)}return 0}function tt(t){var e={};return t.forEach((function(t){e[t.key.toString()]=t.value})),{inject:e[s],multiInject:e[a],targetName:e[r],unmanaged:e[n]}}var et=function(){function t(t,e,i,r,n){this.id=y(),this.serviceIdentifier=t,this.parentContext=e,this.parentRequest=i,this.target=n,this.childRequests=[],this.bindings=Array.isArray(r)?r:[r],this.requestScope=null===i?new Map:null}return t.prototype.addChildRequest=function(e,i,r){var n=new t(e,this.parentContext,this,i,r);return this.childRequests.push(n),n},t}();function it(t){return t._bindingDictionary}function rt(t,e,i,r,n){var o=ot(i.container,n.serviceIdentifier),s=[];return o.length===F.NoBindingsAvailable&&i.container.options.autoBindInjectable&&"function"==typeof n.serviceIdentifier&&t.getConstructorMetadata(n.serviceIdentifier).compilerGeneratedMetadata&&(i.container.bind(n.serviceIdentifier).toSelf(),o=ot(i.container,n.serviceIdentifier)),s=e?o:o.filter((function(t){var e=new et(t.serviceIdentifier,i,r,t,n);return t.constraint(e)})),function(t,e,i,r){switch(e.length){case F.NoBindingsAvailable:if(i.isOptional())return e;var n=x(t),o=w;throw o+=function(t,e){if(e.isTagged()||e.isNamed()){var i="",r=e.getNamedTag(),n=e.getCustomTags();return null!==r&&(i+=r.toString()+"\n"),null!==n&&n.forEach((function(t){i+=t.toString()+"\n"}))," "+t+"\n "+t+" - "+i}return" "+t}(n,i),o+=L(r,n,ot),new Error(o);case F.OnlyOneBindingAvailable:return e;case F.MultipleBindingsAvailable:default:if(i.isArray())return e;n=x(t),o=A+" "+n;throw o+=L(r,n,ot),new Error(o)}}(n.serviceIdentifier,s,n,i.container),s}function nt(t,e,i,r,n,o){var s,a;if(null===n){s=rt(t,e,r,null,o),a=new et(i,r,null,s,o);var u=new q(r,a);r.addPlan(u)}else s=rt(t,e,r,n,o),a=n.addChildRequest(o.serviceIdentifier,s,o);s.forEach((function(e){var i=null;if(o.isArray())i=a.addChildRequest(e.serviceIdentifier,e,o);else{if(e.cache)return;i=a}if(e.type===g.Instance&&null!==e.implementationType){var n=function(t,e){return Q(t,V(e),e,!1)}(t,e.implementationType);if(!r.container.options.skipBaseClassChecks){var s=J(t,e.implementationType);if(n.length0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0){var n=function(t,e){return t.reduce((function(t,i){var r=e(i);return i.target.type===v.ConstructorArgument?t.constructorInjections.push(r):(t.propertyRequests.push(i),t.propertyInjections.push(r)),t.isAsync||(t.isAsync=ut(r)),t}),{constructorInjections:[],propertyInjections:[],propertyRequests:[],isAsync:!1})}(e,i),o=gt(gt({},n),{constr:t});r=n.isAsync?function(t){return vt(this,void 0,void 0,(function(){var e,i;return mt(this,(function(r){switch(r.label){case 0:return[4,bt(t.constructorInjections)];case 1:return e=r.sent(),[4,bt(t.propertyInjections)];case 2:return i=r.sent(),[2,_t(gt(gt({},t),{constructorInjections:e,propertyInjections:i}))]}}))}))}(o):_t(o)}else r=new t;return r}function _t(t){var e,i=new((e=t.constr).bind.apply(e,yt([void 0],t.constructorInjections,!1)));return t.propertyRequests.forEach((function(e,r){var n=e.target.identifier,o=t.propertyInjections[r];e.target.isOptional()&&void 0===o||(i[n]=o)})),i}function bt(t){return vt(this,void 0,void 0,(function(){var e,i,r,n;return mt(this,(function(o){for(e=[],i=0,r=t;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]0?this._map.set(t,e):this._map.delete(t)},t}(),Qt=function(){function t(){this._map=new Map}return t.prototype.remove=function(t){if(this._map.has(t)){var e=this._map.get(t);return this._map.delete(t),e}return this._getEmptyHandlersStore()},t.prototype.addDeactivation=function(t,e,i){this._getModuleActivationHandlers(t).onDeactivations.add(e,i)},t.prototype.addActivation=function(t,e,i){this._getModuleActivationHandlers(t).onActivations.add(e,i)},t.prototype.clone=function(){var e=new t;return this._map.forEach((function(t,i){e._map.set(i,{onActivations:t.onActivations.clone(),onDeactivations:t.onDeactivations.clone()})})),e},t.prototype._getModuleActivationHandlers=function(t){var e=this._map.get(t);return void 0===e&&(e=this._getEmptyHandlersStore(),this._map.set(t,e)),e},t.prototype._getEmptyHandlersStore=function(){return{onActivations:new zt,onDeactivations:new zt}},t}(),Zt=function(){return Zt=Object.assign||function(t){for(var e,i=1,r=arguments.length;i0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]=0;a--)(n=t[a])&&(s=(o<3?n(s):o>3?n(e,i,s):n(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s}function le(t,e){return function(i,r){e(i,r,t)}}function de(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function fe(t,e,i,r){return new(i||(i=Promise))((function(n,o){function s(t){try{u(r.next(t))}catch(t){o(t)}}function a(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))}var pe;"function"==typeof SuppressedError&&SuppressedError,function(t){t.LOADING_BUFFERS="loadingBuffers",t.LOADING_BUFFERS_ERROR="loadingBuffersError",t.FETCHING_BUFFERS="fetchingBuffers",t.FETCHING_BUFFERS_ERROR="fetchingBuffersError",t.FINISHED_FETCHING_BUFFERS="finishedFetchingBuffers",t.LOADED_BUFFERS="loadedBuffers",t.COMPATIBILITY_MODE_AUTO_ENABLED="compatibilityModeAutoEnabled",t.RENDERING_AUDIO_PROBLEM_DETECTED="renderingAudioProblemDetected",t.AUDIO_RENDERING_FINISHED="audioRenderingFinished",t.OFFLINE_AUDIO_RENDERING_FINISHED="offlineAudioRenderingFinished",t.PLAYING_STOPPED="playingStopped",t.PLAYING_STARTED="playingStarted",t.PLAYING_FINISHED="playingFinished",t.PLAYING_UPDATE="playingUpdate",t.RECORDER_INIT="recorderInit",t.RECORDER_SUCCESS="recorderSuccess",t.RECORDER_ERROR="recorderError",t.RECORDER_UPDATE_CONSTRAINTS="recorderUpdateConstraints",t.RECORDER_RECORDING="recorderRecording",t.RECORDER_STOPPED="recorderStopped",t.RECORDER_PAUSED="recorderPaused",t.RECORDER_RESETED="recorderReseted",t.RECORDER_COUNT_UPDATE="recorderCountUpdate",t.SAMPLE_RATE_CHANGED="sampleRateChanged",t.DECODING_AUDIO_FILE="decodingAudioFile",t.DECODED_AUDIO_FILE="decodedAudioFile",t.ERROR_DECODING_AUDIO_FILE="errorDecodingAudioFile",t.RECORDER_NOT_FOUND_ERROR="recorderNotFoundError",t.RECORDER_UNKNOWN_ERROR="recorderUnknownError",t.UPDATE_AUDIO_TREATMENT_PERCENT="updateAudioTreatmentPercent",t.UPDATE_REMAINING_TIME_ESTIMATED="updateRemainingTimeEstimated",t.CANCELLED_AND_LOADED_INITIAL_AUDIO="cancelledAndLoadedInitialAudio",t.CANCELLING_AUDIO_PROCESSING="cancellingAudioProcessing"}(pe||(pe={}));const ge={AUDIO_EDITOR:"audioEditor",VOICE_RECORDER:"voiceRecorder",BUFFER_PLAYER:"bufferPlayer",AUDIO_CONTEXT_MANAGER:"audioContextManager",AUDIO_PROCESSOR:"audioProcessor",BUFFER_MANAGER:"bufferManager",FILTER_MANAGER:"filterManager",RENDERER_MANAGER:"rendererManager",SAVE_BUFFER_MANAGER:"saveBufferManager",EXPORT_WAV_COMMAND:"exportWAV",EXPORT_MP3_COMMAND:"exportMP3",AUDIO_WAV:"audio/wav",AUDIO_MP3:"audio/mp3",RECORD_COMMAND:"record",INIT_COMMAND:"init",FILTERS_NAMES:{REVERB:"reverb",ECHO:"echo",BASS_BOOST:"bassboost",BITCRUSHER:"bitcrusher",HIGH_PASS:"highpass",LIMITER:"limiter",LOW_PASS:"lowpass",PASSTHROUGH:"passthroughfilter",RETURN_AUDIO:"returnAudio",SOUNDTOUCH:"soundtouch",TELEPHONIZER:"telephonizer",VOCODER:"vocoder"},WORKLET_PATHS:{BITCRUSHER:"BitCrusher.worklet.js",LIMITER:"Limiter.worklet.js",SOUNDTOUCH:"Soundtouch.worklet.js",RECORDER_WORKLET:"RecorderWorklet.js",PASSTHROUGH:"Passthrough.worklet.js"},WORKLET_NAMES:{BITCRUSHER:"bitcrusher-processor",LIMITER:"limiter-processor",SOUNDTOUCH:"soundtouch-worklet",RECORDER_WORKLET:"recorder-worklet",PASSTHROUGH:"passthrough"},PREFERENCES_KEYS:{COMPATIBILITY_MODE_ENABLED:"compatibility-mode-enabled",COMPATIBILITY_MODE_CHECKED:"compatibility-mode-checked",ENABLE_AUDIO_WORKLET:"enable-audio-worklet",ENABLE_SOUNDTOUCH_AUDIO_WORKLET:"enable-soundtouch-audio-worklet",BUFFER_SIZE:"buffer-size",SAMPLE_RATE:"sample-rate",DISABLE_INITIAL_RENDERING:"disable-initial-rendering",BITRATE_MP3:"bitrate-mp3"},ENABLE_SOUNDTOUCH_AUDIO_WORKLET:!0,ENABLE_AUDIO_WORKLET:!0,ENABLE_RECORDER_AUDIO_WORKLET:!0,SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE:16384,DEFAULT_REVERB_ENVIRONMENT:{name:"Medium Damping Cave E002 M2S",url:"impulse_response.wav",size:1350278,addDuration:4,link:"http://www.cksde.com/p_6_250.htm"},VOCODER_MODULATOR:"modulator.mp3",DEFAULT_BUFFER_SIZE:0,VALID_BUFFER_SIZE:[0,256,512,1024,2048,4096,8192,16384],VALID_MP3_BITRATES:[32,64,96,128,160,256,320],DEFAULT_SAMPLE_RATE:0,VALID_SAMPLE_RATES:[0,8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,176400,192e3],TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL:100,TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR:.9,DISABLE_INITIAL_RENDERING:!0,DEFAULT_SAVE_FORMAT:"wav",DEFAULT_MP3_BITRATE:320};let ve=class{constructor(){this.listeners={},this.listeners={}}on(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)}emit(t,e){this.listeners[t]&&this.listeners[t].forEach((t=>{t(e)}))}off(t,e){this.listeners[t]&&(this.listeners[t]=this.listeners[t].filter((t=>t!==e)))}};ve=he([oe(),de("design:paramtypes",[])],ve);var me=ve;let ye=class{constructor(t,e){this.previousSampleRate=ge.DEFAULT_SAMPLE_RATE,this.eventEmitter=t||new me,this.configService=e,this.setup()}setup(){this.configService&&(this.previousSampleRate=this.configService.getSampleRate(),this.eventEmitter&&this.eventEmitter.emit(pe.SAMPLE_RATE_CHANGED,this.previousSampleRate)),this.currentContext||this.createNewContext(this.previousSampleRate)}createNewContextIfNeeded(t){if(this.configService&&this.configService.isCompatibilityModeEnabled()&&t){if(this.currentSampleRate!=t.sampleRate)return this.createNewContext(t.sampleRate),this.previousSampleRate=t.sampleRate,!0}else{let t=ge.DEFAULT_SAMPLE_RATE;if(this.configService&&(t=this.configService.getSampleRate()),t!=this.previousSampleRate)return this.createNewContext(t),this.previousSampleRate=t,!0}return!1}createNewContext(t){this._currentContext&&(this.oldAudioContext=this._currentContext,this.destroyOldContext());const e={latencyHint:"interactive"};0!=t&&(e.sampleRate=t),this._currentContext=new AudioContext(e),this.eventEmitter&&this.eventEmitter.emit(pe.SAMPLE_RATE_CHANGED,this.currentSampleRate)}destroyOldContext(){this.oldAudioContext&&(this.oldAudioContext.close(),this.oldAudioContext=null)}get currentSampleRate(){return this.currentContext?this.currentContext.sampleRate:0}get currentContext(){return this._currentContext}};ye=he([oe(),le(0,ae(ce.EventEmitter)),le(1,ae(ce.ConfigService)),de("design:paramtypes",[Object,Object])],ye);var Ee=ye;let _e=class{constructor(){this.enabled=!1,this.defaultEnabled=!1,this.bufferFetcherService=null,this.bufferDecoderService=null,this.configService=null,this.eventEmitter=null}isEnabled(){return this.enabled}isDefaultEnabled(){return this.defaultEnabled}setDefaultEnabled(t){this.defaultEnabled=t}setEnabled(t){this.enabled=t}enable(){this.setEnabled(!0)}disable(){this.setEnabled(!1)}toggle(){this.setEnabled(!this.isEnabled())}injectDependencies(t,e,i,r){this.bufferFetcherService=t,this.bufferDecoderService=e,this.configService=i,this.eventEmitter=r}};he([ae(ce.BufferFetcherService),de("design:type",Object)],_e.prototype,"bufferFetcherService",void 0),he([ae(ce.BufferDecoderService),de("design:type",Object)],_e.prototype,"bufferDecoderService",void 0),he([ae(ce.ConfigService),de("design:type",Object)],_e.prototype,"configService",void 0),he([ae(ce.EventEmitter),de("design:type",Object)],_e.prototype,"eventEmitter",void 0),_e=he([oe()],_e);var be=_e;const Se={calcAudioDuration:(t,e)=>{if(t){let i=t.duration+1;return e&&(i/=e),i}return 0},loadAudioBuffer:(t,e)=>fe(void 0,void 0,void 0,(function*(){const i=yield Se.readAsArrayBufferPromisified(e),r=yield t.decodeAudioData(i);return Se.decodeBuffer(t,r)})),readAsArrayBufferPromisified:t=>new Promise(((e,i)=>{const r=new FileReader;r.onload=t=>{var r;const n=null===(r=null==t?void 0:t.target)||void 0===r?void 0:r.result;n instanceof ArrayBuffer?e(n):i()},t&&r.readAsArrayBuffer(t)})),decodeBuffer:(t,e)=>{if(1==e.numberOfChannels){t.resume();const i=e.duration,r=t.sampleRate,n=t.createBuffer(2,r*i+2*r,r),o=e.getChannelData(0),s=n.getChannelData(0),a=n.getChannelData(1);for(let t=0;t{const e=[];for(let i=0;i{const i=new Float32Array(e);for(let r=0;rt.getChannelData(e).reduce(((t,e)=>t+e),0),sumAudioBuffer(t){let e=0;for(let i=0;ivoid 0!==t&&void 0!==t.audioWorklet,isSettingValueValid:t=>!(void 0===t||isNaN(Number(t))||"string"==typeof t&&""===t.trim()),calculateAudioDuration(t,e,i){if(t&&e){return this.calcAudioDuration(t,i)+e.getAddingTime()}return 0},resetAudioRenderingProgress(t){t&&(t.emit(pe.UPDATE_AUDIO_TREATMENT_PERCENT,0),t.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,-1))},forceDownload(t,e){const i=window.document.createElement("a"),r=URL.createObjectURL(t);window.document.body.appendChild(i),i.href=r,i.download=e||"output.wav",i.click(),URL.revokeObjectURL(r)}};let Ae=class extends be{constructor(t,e,i,r,n,o,s){super(),this.principalBuffer=null,this.filterManager=t,this.rendererManager=e,this.contextManager=i,this.saveBufferManager=r,this.audioProcessor=n,this.bufferManager=o,this.bufferPlayer=s,this.setup()}setup(){this.bufferPlayer&&(this.bufferPlayer.onBeforePlaying((()=>fe(this,void 0,void 0,(function*(){this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager&&this.contextManager.currentContext&&this.audioProcessor&&(yield this.audioProcessor.setupOutput(this.principalBuffer,this.contextManager.currentContext))})))),this.bufferPlayer.on(pe.PLAYING_FINISHED,(()=>{this.bufferPlayer&&this.bufferPlayer.loop&&this.bufferPlayer.start()})))}addFilters(...t){this.filterManager&&this.filterManager.addFilters(...t)}addRenderers(...t){this.rendererManager&&this.rendererManager.addRenderers(...t)}get currentSampleRate(){return this.contextManager?this.contextManager.currentSampleRate:0}get defaultDeviceSampleRate(){const t=new AudioContext;let e=0;return t&&(e=t.sampleRate,t.close()),e}loadBufferFromFile(t){return fe(this,void 0,void 0,(function*(){if(this.principalBuffer=null,this.audioProcessor&&(yield this.audioProcessor.prepareContext(this.principalBuffer)),!(this.contextManager&&this.contextManager.currentContext&&this.bufferDecoderService&&this.audioProcessor))throw new Error("Audio Context is not ready!");if(this.principalBuffer=yield this.bufferDecoderService.decodeBufferFromFile(t),this.audioProcessor.initialRenderingDone=!1,!this.principalBuffer)throw new Error("Error decoding audio file");this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),Se.resetAudioRenderingProgress(this.eventEmitter)}))}loadBuffer(t){this.principalBuffer=t,this.audioProcessor&&(this.audioProcessor.sumInputBuffer=Se.sumAudioBuffer(this.principalBuffer),this.audioProcessor.initialRenderingDone=!1)}getOutputBuffer(){return this.audioProcessor?this.audioProcessor.renderedBuffer:null}renderAudio(){return fe(this,void 0,void 0,(function*(){return!!this.audioProcessor&&(yield this.audioProcessor.renderAudio(this.principalBuffer))}))}isAudioWorkletAvailable(){return!(!this.contextManager||!this.contextManager.currentContext)&&Se.isAudioWorkletCompatible(this.contextManager.currentContext)}getFiltersState(){return this.filterManager&&this.rendererManager?Object.assign(Object.assign({},this.filterManager.getFiltersState()),this.rendererManager.getRenderersState()):{}}getFiltersSettings(){return this.filterManager?this.filterManager.getFiltersSettings():new Map}reconnectNodesIfNeeded(){return fe(this,void 0,void 0,(function*(){if(this.contextManager&&this.bufferPlayer&&this.bufferPlayer.compatibilityMode&&this.contextManager.currentContext&&this.principalBuffer&&this.filterManager&&this.filterManager.entrypointFilter){yield this.filterManager.connectNodes(this.contextManager.currentContext,this.principalBuffer,!0,this.bufferPlayer.compatibilityMode);const t=this.filterManager.entrypointFilter.getSpeed();this.bufferPlayer.speedAudio=t,this.bufferPlayer.duration=Se.calculateAudioDuration(this.principalBuffer,this.filterManager,t)*t}}))}toggleFilter(t){this.rendererManager&&this.rendererManager.toggleRenderer(t),this.filterManager&&(this.filterManager.toggleFilter(t),this.reconnectNodesIfNeeded())}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.changeFilterSettings(t,e),yield this.reconnectNodesIfNeeded())}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){this.filterManager&&(yield this.filterManager.resetFilterSettings(t),yield this.reconnectNodesIfNeeded())}))}resetAllFiltersState(){this.rendererManager&&this.rendererManager.resetAllRenderersState(),this.filterManager&&(this.filterManager.resetAllFiltersState(),this.reconnectNodesIfNeeded())}exit(){this.bufferPlayer&&(this.bufferPlayer.stop(),this.bufferPlayer.reset()),this.cancelAudioRendering(),this.principalBuffer=null}cancelAudioRendering(){this.audioProcessor&&this.audioProcessor.cancelAudioRendering()}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}off(t,e){this.eventEmitter&&this.eventEmitter.off(t,e)}saveBuffer(t){return fe(this,void 0,void 0,(function*(){var e;return!(!this.saveBufferManager||!this.audioProcessor)&&(yield null===(e=this.saveBufferManager)||void 0===e?void 0:e.saveBuffer(this.audioProcessor.renderedBuffer,t))}))}set downloadingInitialData(t){this.bufferManager&&(this.bufferManager.downloadingInitialData=t)}get downloadingInitialData(){return!!this.bufferManager&&this.bufferManager.downloadingInitialData}get order(){return-1}get id(){return ge.AUDIO_EDITOR}};Ae=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.SaveBufferManager)),le(4,ae(ce.AudioProcessor)),le(5,ae(ce.BufferManager)),le(6,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object,Object,Object,Object,Object])],Ae);var we=Ae;let Re=class extends be{constructor(t,e,i,r,n){super(),this._renderedBuffer=null,this.audioRenderingLastCanceled=!1,this.initialRenderingDone=!1,this.sumInputBuffer=0,this.contextManager=i,this.bufferPlayer=r,this.filterManager=t,this.rendererManager=e,this.bufferManager=n}prepareContext(t){return fe(this,void 0,void 0,(function*(){if(this.contextManager){this.contextManager.createNewContextIfNeeded(t)&&this.bufferManager&&(yield this.bufferManager.resetBufferFetcher()),this.contextManager.currentContext&&this.contextManager.currentContext.resume()}}))}renderAudio(t){return fe(this,void 0,void 0,(function*(){if(yield this.prepareContext(t),!this.contextManager||!this.contextManager.currentContext)throw new Error("AudioContext is not yet available");if(!this.filterManager)throw new Error("Filter manager is not available");if(!this.rendererManager)throw new Error("Renderer manager is not available");if(!this.filterManager.entrypointFilter)throw new Error("Entrypoint filter is not available");if(!t)throw new Error("No principal buffer available");if(!this.initialRenderingDone&&this.configService&&this.configService.isInitialRenderingDisabled()&&!this.configService.isCompatibilityModeEnabled())return this.loadInitialBuffer(t),this.initialRenderingDone=!0,!0;this.configService&&this.bufferPlayer&&!this.configService.isCompatibilityModeEnabled()&&this.bufferPlayer.compatibilityMode&&this.bufferPlayer.stop();const e=this.filterManager.entrypointFilter.getSpeed(),i=Se.calculateAudioDuration(t,this.filterManager,e),r=new OfflineAudioContext(2,this.contextManager.currentContext.sampleRate*i,this.contextManager.currentContext.sampleRate),n=this.configService&&this.configService.isCompatibilityModeEnabled()?this.contextManager.currentContext:r;return this._renderedBuffer=yield this.rendererManager.executeAudioRenderers(t,n),this.currentOfflineContext=null,this.audioRenderingLastCanceled=!1,Se.resetAudioRenderingProgress(this.eventEmitter),this.filterManager.setupTotalSamples(i,this.contextManager.currentContext),yield this.setupOutput(t,n,i,r)}))}setupPlayerSpeed(t){if(this.filterManager&&this.filterManager.entrypointFilter){const e=this.filterManager.entrypointFilter.getSpeed();t.speedAudio=e}}setupOutput(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(this._renderedBuffer&&this.configService&&this.eventEmitter&&this.bufferPlayer&&this.filterManager){if(yield this.filterManager.initializeWorklets(e),yield this.filterManager.connectNodes(e,this._renderedBuffer,!1,this.configService.isCompatibilityModeEnabled()),this.setupPlayerSpeed(this.bufferPlayer),!this.configService.isCompatibilityModeEnabled()&&r&&this.filterManager.currentNodes){this.currentOfflineContext=r,this.filterManager.currentNodes.output.connect(e.destination);const n=yield r.startRendering();if(this.contextManager&&!this.loadRenderedAudio(t,n))return yield this.setupOutput(t,this.contextManager.currentContext,i);if(this.audioRenderingLastCanceled)return!1;this.eventEmitter.emit(pe.OFFLINE_AUDIO_RENDERING_FINISHED)}else this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes.output,i),this.initialRenderingDone=!0;return this.eventEmitter.emit(pe.AUDIO_RENDERING_FINISHED),!0}return!1}))}loadRenderedAudio(t,e){if(this.eventEmitter&&this.bufferPlayer){if(this.audioRenderingLastCanceled)this.initialRenderingDone||(this.loadInitialBuffer(t),this.eventEmitter.emit(pe.CANCELLED_AND_LOADED_INITIAL_AUDIO));else{if(0==Se.sumAudioBuffer(e)&&0!==this.sumInputBuffer){if(this.configService&&!this.configService.isCompatibilityModeChecked())return this.setCompatibilityModeChecked(!0),this.configService.enableCompatibilityMode(),this.eventEmitter.emit(pe.COMPATIBILITY_MODE_AUTO_ENABLED),!1;this.eventEmitter.emit(pe.RENDERING_AUDIO_PROBLEM_DETECTED)}this._renderedBuffer=e,this.bufferPlayer.loadBuffer(this._renderedBuffer)}this.initialRenderingDone=!0}return!0}loadInitialBuffer(t){this.bufferPlayer&&(this._renderedBuffer=t,this.bufferPlayer.loadBuffer(t))}cancelAudioRendering(){this.currentOfflineContext&&!this.audioRenderingLastCanceled&&this.filterManager&&(this.audioRenderingLastCanceled=!0,this.filterManager.disconnectOldNodes(!1),this.eventEmitter&&this.eventEmitter.emit(pe.CANCELLING_AUDIO_PROCESSING))}setCompatibilityModeChecked(t){this.configService&&this.configService.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED,""+t)}get renderedBuffer(){return this._renderedBuffer}get order(){return-1}get id(){return ge.AUDIO_PROCESSOR}};Re=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.RendererManager)),le(2,ae(ce.AudioContextManager)),le(3,ae(ce.BufferPlayer)),le(4,ae(ce.BufferManager)),de("design:paramtypes",[Object,Object,Object,Object,Object])],Re);var Te=Re;let Ce=class extends be{constructor(t,e,i,r){super(),this.downloadingInitialData=!1,this.audioBuffersToFetch=[],this.bufferFetcherService=e,this.eventEmitter=i||new me,this.filterManager=t,this.filterManager=t,this.audioBuffersToFetch=r,this.setup()}setup(){this.audioBuffersToFetch.length>0&&this.fetchBuffers(!1)}fetchBuffers(t){return fe(this,void 0,void 0,(function*(){if(!this.downloadingInitialData&&this.bufferFetcherService){this.downloadingInitialData=!0,this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADING_BUFFERS);try{yield this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch),this.downloadingInitialData=!1,this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADED_BUFFERS)}catch(e){this.eventEmitter&&!t&&this.eventEmitter.emit(pe.LOADING_BUFFERS_ERROR)}}}))}resetBufferFetcher(){return fe(this,void 0,void 0,(function*(){this.bufferFetcherService&&(this.bufferFetcherService.reset(),yield this.fetchBuffers(!0),this.filterManager&&(yield this.filterManager.resetFilterBuffers()))}))}get order(){return-1}get id(){return ge.BUFFER_MANAGER}};Ce=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.BufferFetcherService)),le(2,ae(ce.EventEmitter)),le(3,ae(ce.AudioBuffersToFetch)),de("design:paramtypes",[Object,Object,Object,Array])],Ce);var Me=Ce;let Ie=class extends be{constructor(t,e){super(),this.filters=[],this._entryPointFilter=null,this._currentNodes=null,this.filters=t,this._entryPointFilter=e,this.setup()}setup(){for(const t of this.filters)t.initializeDefaultSettings()}addFilters(...t){for(const e of t)e.initializeDefaultSettings(),e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.filters.push(...t)}getFiltersState(){const t={};return this.filters.forEach((e=>{t[e.id]=e.isEnabled()})),t}getFiltersSettings(){const t=new Map;for(const e of this.filters)t.set(e.id,e.getSettings());return t}toggleFilter(t){const e=this.filters.find((e=>e.id===t));e&&e.toggle()}changeFilterSettings(t,e){return fe(this,void 0,void 0,(function*(){const i=this.filters.find((e=>e.id===t));if(i)for(const t of Object.keys(e))yield i.setSetting(t,e[t])}))}resetFilterSettings(t){return fe(this,void 0,void 0,(function*(){const e=this.filters.find((e=>e.id===t));e&&(yield e.resetSettings())}))}resetAllFiltersState(){this.filters.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}connectNodes(t,e,i,r){return fe(this,void 0,void 0,(function*(){if(!this._entryPointFilter)return;let n=null;if(i&&this._currentNodes)n=this._currentNodes.input;else{const i=yield this._entryPointFilter.getEntrypointNode(t,e,!r);n=i.input}const o=[];let s=n;this.disconnectOldNodes(i);const a=this.filters.sort(((t,e)=>t.order-e.order)).filter(((t,e)=>t!==this._entryPointFilter&&(t.isEnabled()||e>=this.filters.length-1)));for(const e of a){const i=e.getNode(t);s&&s.connect(i.input),s=i.output,o.push(i)}this._entryPointFilter&&this._entryPointFilter.updateState(),this._currentNodes={input:n,output:s,intermediateNodes:o.filter((t=>t.input!=s&&t.output!=s&&t.input!=n&&t.output!=n))}}))}disconnectOldNodes(t){if(this._currentNodes&&(this._currentNodes.input.disconnect(),t||this._currentNodes.output.disconnect(),this._currentNodes.intermediateNodes))for(const t of this._currentNodes.intermediateNodes)t.input.disconnect(),t.output.disconnect()}initializeWorklets(t){return fe(this,void 0,void 0,(function*(){for(const e of this.filters)e.isWorklet()&&(yield e.initializeWorklet(t))}))}getAddingTime(){let t=0;for(const e of this.filters)e.isEnabled()&&(t+=e.getAddingTime());return t}setupTotalSamples(t,e){if(e){const i=t*e.sampleRate;for(const t of this.filters)t.totalSamples=i}}resetFilterBuffers(){return fe(this,void 0,void 0,(function*(){for(const t of this.filters)yield t.bufferFetcherReseted()}))}get entrypointFilter(){return this._entryPointFilter}get currentNodes(){return this._currentNodes}get order(){return-1}get id(){return ge.FILTER_MANAGER}};Ie=he([oe(),le(0,ue(ce.Filters)),le(1,ae(ce.EntryPointFilter)),de("design:paramtypes",[Array,Object])],Ie);var Pe=Ie;let Be=class extends be{constructor(t=[]){super(),this.renderers=[],this.renderers=t}addRenderers(...t){for(const e of t)e.injectDependencies(this.bufferFetcherService,this.bufferDecoderService,this.configService,this.eventEmitter);this.renderers.push(...t)}getRenderersState(){const t={};return this.renderers.forEach((e=>{t[e.id]=e.isEnabled()})),t}toggleRenderer(t){const e=this.renderers.find((e=>e.id===t));e&&e.toggle()}resetAllRenderersState(){this.renderers.forEach((t=>{t.isDefaultEnabled()?t.enable():t.disable()}))}executeAudioRenderers(t,e){return fe(this,void 0,void 0,(function*(){let i=t;for(const t of this.renderers.sort(((t,e)=>t.order-e.order)))t.isEnabled()&&(i=yield t.renderAudio(e,i));return i}))}get order(){return-1}get id(){return ge.RENDERER_MANAGER}};Be=he([oe(),le(0,ue(ce.Renderers)),de("design:paramtypes",[Array])],Be);var Ne=Be;function Oe(t){return new Worker((t||"")+"RecorderWorker.js")}let De=class{constructor(t){this.worker=null,this.node=null,this.context=null,this.config={bufferLen:4096,sampleRate:44100,numChannels:2,mimeType:"audio/wav",workletBasePath:"worklets/",workerBasePath:"workers/",bitrate:ge.DEFAULT_MP3_BITRATE,callback:()=>{}},this.callbacks={getBuffer:[],exportWAV:[],exportMP3:[]},this.recording=!1,Object.assign(this.config,t)}setup(t){return fe(this,void 0,void 0,(function*(){this.node&&(this.node instanceof AudioWorkletNode&&this.node.port.postMessage("stop"),this.node.disconnect()),t&&(this.context=t.context,yield this.createRecorderNode(),this.node&&this.context&&(t.connect(this.node),this.node.connect(this.context.destination))),this.context&&!this.worker&&(this.worker=Oe(this.config.workerBasePath),this.worker&&(this.worker.postMessage({command:"init",config:{sampleRate:this.context.sampleRate,numChannels:this.config.numChannels,bitrate:this.config.bitrate}}),this.worker.onmessage=t=>{let e=null;switch(t.data.command){case"getBuffer":e=this.callbacks.getBuffer;break;case ge.EXPORT_WAV_COMMAND:e=this.callbacks.exportWAV;break;case ge.EXPORT_MP3_COMMAND:e=this.callbacks.exportMP3}if(e){const i=e.pop();"function"==typeof i&&i(t.data.data)}}))}))}createRecorderNode(){return fe(this,void 0,void 0,(function*(){if(this.context)if(Se.isAudioWorkletCompatible(this.context)&&ge.ENABLE_RECORDER_AUDIO_WORKLET)try{yield this.createRecorderWorklet()}catch(t){this.createRecorderScriptProcessorNode()}else this.createRecorderScriptProcessorNode()}))}createRecorderWorklet(){return fe(this,void 0,void 0,(function*(){if(this.context&&(yield this.context.audioWorklet.addModule(this.config.workletBasePath+ge.WORKLET_PATHS.RECORDER_WORKLET),this.node=new AudioWorkletNode(this.context,ge.WORKLET_NAMES.RECORDER_WORKLET),this.node&&this.node.port)){const t=this.node.parameters.get("numChannels");t&&(t.value=this.config.numChannels,t.setValueAtTime(this.config.numChannels,0)),this.node.port.onmessage=t=>{this.worker&&"record"==t.data.command&&t.data.buffer.length>0&&this.worker.postMessage({command:"record",buffer:t.data.buffer})}}}))}createRecorderScriptProcessorNode(){this.context&&(this.node=this.context.createScriptProcessor.call(this.context,this.config.bufferLen,this.config.numChannels,this.config.numChannels),this.node.onaudioprocess=t=>{if(!this.recording)return;const e=[];for(let i=0;i{this.savingBuffer&&this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback)}))}saveBuffer(t,e){return fe(this,void 0,void 0,(function*(){if(this.savingBuffer)throw new Error("The buffer is currently saving");if(!this.bufferPlayer)throw new Error("No buffer player was found");this.savingBuffer=!0;let i=!1;return i=this.bufferPlayer.compatibilityMode?yield this.saveBufferCompatibilityMode(e):yield this.saveBufferDirect(t,e),this.savingBuffer=!1,i}))}saveBufferDirect(t,e){return new Promise(((i,r)=>{var n;if(!t||this.contextManager&&!this.contextManager.currentContext)return r("No rendered buffer or AudioContext not initialized");const o=Oe(null===(n=this.configService)||void 0===n?void 0:n.getWorkerBasePath());if(o){const r=[];for(let e=0;e{t.data.command!=ge.EXPORT_WAV_COMMAND&&t.data.command!=ge.EXPORT_MP3_COMMAND||this.downloadAudioBlob(t.data.data,e),o.terminate(),this.savingBuffer=!1,i(!0)},o.postMessage({command:ge.INIT_COMMAND,config:{sampleRate:t.sampleRate,numChannels:2,bitrate:(null==e?void 0:e.bitrate)||ge.DEFAULT_MP3_BITRATE}}),o.postMessage({command:ge.RECORD_COMMAND,buffer:r}),o.postMessage({command:"mp3"===(null==e?void 0:e.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?ge.EXPORT_MP3_COMMAND:ge.EXPORT_WAV_COMMAND,type:ge.AUDIO_WAV})}}))}saveBufferCompatibilityMode(t){return new Promise(((e,i)=>{if(!this.bufferPlayer)return i("No buffer player found");this.bufferPlayer.start().then((()=>{if(!this.configService)return i("No config service found");if(!this.filterManager)return i("No filter manager found");const r=new De({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"mp3"==(null==t?void 0:t.format)?ge.AUDIO_MP3:ge.AUDIO_WAV,bitrate:(null==t?void 0:t.bitrate)||ge.DEFAULT_MP3_BITRATE});r.setup(this.filterManager.currentNodes.output).then((()=>{r.record(),this.playingStoppedCallback=()=>{r.kill(),this.savingBuffer=!1,this.eventEmitter&&(this.eventEmitter.off(pe.PLAYING_FINISHED,i),this.playingStoppedCallback&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback)),e(!0)};const i=()=>{this.playingStoppedCallback&&this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_STOPPED,this.playingStoppedCallback),r.stop();const n=n=>{this.downloadAudioBlob(n,t),this.savingBuffer=!1,this.eventEmitter&&this.eventEmitter.off(pe.PLAYING_FINISHED,i),r.kill(),e(!0)};"mp3"===(null==t?void 0:t.format)||"mp3"===ge.DEFAULT_SAVE_FORMAT?r.exportMP3(n):r.exportWAV(n)};this.eventEmitter&&(this.eventEmitter.on(pe.PLAYING_FINISHED,i),this.eventEmitter.on(pe.PLAYING_STOPPED,this.playingStoppedCallback))}))}))}))}downloadAudioBlob(t,e){Se.forceDownload(t,"audio-"+(new Date).toISOString()+"."+((null==e?void 0:e.format)||ge.DEFAULT_SAVE_FORMAT))}get order(){return-1}get id(){return ge.SAVE_BUFFER_MANAGER}};ke=he([oe(),le(0,ae(ce.FilterManager)),le(1,ae(ce.AudioContextManager)),le(2,ae(ce.BufferPlayer)),de("design:paramtypes",[Object,Object,Object])],ke);var xe=ke;let Le=class extends be{constructor(t){super(),this.buffer=null,this.source=null,this.currentTime=0,this.displayTime=0,this.duration=0,this.intervals=[],this.playing=!1,this.loop=!1,this.speedAudio=1,this.onBeforePlayingCallback=()=>fe(this,void 0,void 0,(function*(){})),this.compatibilityMode=!1,this.currentNode=null,this._contextManager=t}init(t){this.playing=!1,this._contextManager&&this._contextManager.currentContext&&(this._contextManager.currentContext.resume(),!this.compatibilityMode&&this.buffer&&(null==this.source||t||this.source.disconnect(),this.source=this._contextManager.currentContext.createBufferSource(),this.source.buffer=this.buffer,this.duration=this.buffer.duration*this.speedAudio,this.source.connect(this._contextManager.currentContext.destination))),this.updateInfos()}loadBuffer(t){this.compatibilityMode=!1,this.reset(),this.buffer=t,this.init()}setCompatibilityMode(t,e){this.compatibilityMode=!0,this.reset(),this.init(),null!=e&&(this.duration=e*this.speedAudio),this.currentNode=t,this.updateInfos()}reset(t){this.clearIntervals(),this.currentTime=0,this.displayTime=0,t||this.stop()}stop(){var t;this.clearIntervals(),null!=this.source&&null!=this.source&&this.playing&&(this.source.stop(0),this.playing=!1),this.currentNode&&(this.currentNode.disconnect(),this.compatibilityMode&&(this.currentTime=0,this.displayTime=0)),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.PLAYING_STOPPED),this.updateInfos()}clearIntervals(){for(const t of this.intervals)clearInterval(t);this.intervals=[]}start(t){return fe(this,void 0,void 0,(function*(){var e;if(this.source||this.compatibilityMode){if(t||this.stop(),this.init(t),yield this.onBeforePlayingCallback(),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.PLAYING_STARTED),this.compatibilityMode){if(!(this.currentNode&&this._contextManager&&this._contextManager.currentContext))return;this.currentNode.connect(this._contextManager.currentContext.destination)}else{if(!this.source)return;this.source.start(0,t?0:this.currentTime/this.speedAudio),this.playing=!0}let i=performance.now();this.intervals.push(window.setInterval((()=>{var e,r;const n=performance.now(),o=n-i;i=n,this.currentTime+=o/1e3*this.speedAudio,this.displayTime=this.currentTime,this.currentTime>this.duration?this.loop?this.compatibilityMode?null===(e=this.eventEmitter)||void 0===e||e.emit(pe.PLAYING_FINISHED):(this.reset(t),this.start()):(null===(r=this.eventEmitter)||void 0===r||r.emit(pe.PLAYING_FINISHED),this.reset(t)):this.updateInfos()}),100))}}))}playDirect(){return fe(this,void 0,void 0,(function*(){this.compatibilityMode?this.start(!1):this.start(!0)}))}pause(){this.stop()}updateInfos(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.PLAYING_UPDATE)}setTimePercent(t){this.compatibilityMode||(this.currentTime=Math.round(this.duration*(t/100)),this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}setTime(t){this.compatibilityMode||(this.currentTime=t,this.displayTime=this.currentTime,this.playing?(this.pause(),this.start()):this.updateInfos())}onBeforePlaying(t){this.onBeforePlayingCallback=t}toggleLoop(){this.loop=!this.loop}on(t,e){this.eventEmitter&&this.eventEmitter.on(t,e)}get currentTimeDisplay(){return("0"+Math.trunc(this.displayTime/60)).slice(-2)+":"+("0"+Math.trunc(this.displayTime%60)).slice(-2)}get maxTimeDisplay(){return("0"+Math.trunc(this.duration/60)).slice(-2)+":"+("0"+Math.trunc(this.duration%60)).slice(-2)}get percent(){return 100-Math.round((this.duration-this.displayTime)/this.duration*100)}get remainingTimeDisplay(){return("0"+Math.trunc((this.duration-this.displayTime)/60)).slice(-2)+":"+("0"+Math.trunc((this.duration-this.displayTime)%60)).slice(-2)}get order(){return-1}get id(){return ge.BUFFER_PLAYER}};Le=he([oe(),le(0,ae(ce.AudioContextManager)),de("design:paramtypes",[Object])],Le);var Ge=Le;let We=class{constructor(t,e,i){this.buffers=new Map,this.bufferErrors=[],this.configService=null,this.contextManager=t,this.eventEmitter=i||new me,this.configService=e}fetchBuffer(t,e){return fe(this,void 0,void 0,(function*(){var i,r,n,o;const s=(this.configService?this.configService.getSoundBasePath():"")+t;if(null==this.buffers.get(this.getKeyFromLocation(s))||e){null===(i=this.eventEmitter)||void 0===i||i.emit(pe.FETCHING_BUFFERS,s);try{const t=yield fetch(s);if(!t.ok)throw this.bufferErrors.push(s),null===(r=this.eventEmitter)||void 0===r||r.emit(pe.FETCHING_BUFFERS_ERROR,s),pe.FETCHING_BUFFERS_ERROR;{const e=yield t.arrayBuffer();if(this.contextManager&&this.contextManager.currentContext){const t=yield this.contextManager.currentContext.decodeAudioData(e);this.buffers.set(this.getKeyFromLocation(s),Se.decodeBuffer(this.contextManager.currentContext,t))}}null===(n=this.eventEmitter)||void 0===n||n.emit(pe.FINISHED_FETCHING_BUFFERS,s)}catch(t){throw this.bufferErrors.push(s),null===(o=this.eventEmitter)||void 0===o||o.emit(pe.FETCHING_BUFFERS_ERROR,s),pe.FETCHING_BUFFERS_ERROR}}}))}fetchAllBuffers(t){return fe(this,void 0,void 0,(function*(){for(const e of t)yield this.fetchBuffer(e)}))}getAudioBuffer(t){return this.buffers.get(this.getKeyFromLocation(t))}getOrFetchAudioBuffer(t){return fe(this,void 0,void 0,(function*(){return null==this.getAudioBuffer(t)&&(yield this.fetchBuffer(t)),this.getAudioBuffer(t)}))}getDownloadedBuffersList(){return Array.from(this.buffers.keys())}getKeyFromLocation(t){return t.substring(t.lastIndexOf("/")+1)}reset(){this.buffers.clear()}};We=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.ConfigService)),le(2,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object,Object])],We);var Ve=We;let Ue=class{constructor(t,e){this.contextManager=t,this.eventEmitter=e||new me}decodeBufferFromFile(t){return fe(this,void 0,void 0,(function*(){this.eventEmitter&&this.eventEmitter.emit(pe.DECODING_AUDIO_FILE);try{if(this.contextManager&&this.contextManager.currentContext){const e=yield Se.loadAudioBuffer(this.contextManager.currentContext,t);return this.eventEmitter&&this.eventEmitter.emit(pe.DECODED_AUDIO_FILE),e}}catch(t){console.error(t),this.eventEmitter&&(this.eventEmitter.emit(pe.DECODED_AUDIO_FILE),this.eventEmitter.emit(pe.ERROR_DECODING_AUDIO_FILE))}return null}))}};Ue=he([oe(),le(0,ae(ce.AudioContextManager)),le(1,ae(ce.EventEmitter)),de("design:paramtypes",[Object,Object])],Ue);var je=Ue;class qe extends be{}class He extends be{constructor(){super(...arguments),this.defaultSettings=null,this._totalSamples=0}getAddingTime(){return 0}initializeDefaultSettings(){this.defaultSettings=this.getSettings()}getDefaultSettings(){return this.defaultSettings}resetSettings(){return fe(this,void 0,void 0,(function*(){if(this.defaultSettings)for(const t in this.defaultSettings)this.defaultSettings&&void 0!==this.defaultSettings[t]&&(yield this.setSetting(t,this.defaultSettings[t]))}))}isWorklet(){return!1}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){return!1}))}set totalSamples(t){this._totalSamples=t}}class Ke{constructor(t,e){this._value=0,this._minValue=0,this._maxValue=Number.MAX_SAFE_INTEGER,this._defaultValue=0,this.context=null,this.automationRate="a-rate",this._defaultValue=void 0!==e?e:0,this._value=this._defaultValue,this.context=t}get value(){return this._value}set value(t){this._value=Math.max(this._minValue,Math.min(this._maxValue,t))}get minValue(){return this._minValue}get maxValue(){return this._maxValue}get defaultValue(){return this._defaultValue}setValueAtTime(t,e){return console.warn("setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}linearRampToValueAtTime(t,e){return console.warn("linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}exponentialRampToValueAtTime(t,e){return console.warn("exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam"),this.value=t,new Ke(this.context,t)}cancelAndHoldAtTime(t){throw new Error("Method not implemented.")}cancelScheduledValues(t){throw new Error("Method not implemented.")}setTargetAtTime(t,e,i){throw new Error("Method not implemented.")}setValueCurveAtTime(t,e,i){throw new Error("Method not implemented.")}}class Ye{constructor(t,e,i){this._parameters=new Map,this._port=null,this.currentContext=null,this.workletProcessor=e,this.currentContext=t,this._scriptProcessorNode=t.createScriptProcessor(i,2,2),this.setupPort(),this.setupProcessor(),this.setupWorkletScope(t)}setupPort(){const t=new MessageChannel;t.port1.onmessage=t=>{this.workletProcessor&&this.workletProcessor.port2&&this.workletProcessor.port2.postMessage(t.data)},this.workletProcessor&&this.workletProcessor.port2&&(this.workletProcessor.port2.onmessage=e=>{t.port1.postMessage(e.data)}),this._port=t.port2}setupProcessor(){if(!this._scriptProcessorNode)return;this._scriptProcessorNode.onaudioprocess=t=>{if(this.workletProcessor){const e=[Se.convertAudioBufferToFloat32Array(t.inputBuffer)],i=[Se.convertAudioBufferToFloat32Array(t.outputBuffer)],r=[];for(const[t,e]of this._parameters.entries())r.push([t,Se.convertAudioParamToFloat32Array(e,1)]);const n=Object.fromEntries(r);this.workletProcessor.process(e,i,n)}};const t=this.workletProcessor.defaultParameterDescriptors;t&&t.forEach((t=>{this.currentContext&&this._parameters.set(t.name,new Ke(this.currentContext,t.defaultValue))}))}setupWorkletScope(t){"undefined"!=typeof window&&(window.sampleRate=t.sampleRate)}get port(){return this._port}get parameters(){return this._parameters}get node(){return this._scriptProcessorNode}get context(){var t;return null===(t=this._scriptProcessorNode)||void 0===t?void 0:t.context}}class ze{static registerProcessor(t,e){ze.processorsMap.set(t,e)}static getProcessor(t){const e=ze.processorsMap.get(t);return e?new e:null}}ze.processorsMap=new Map;class Qe{constructor(){this.messageChannel=null,this.messageChannel=new MessageChannel}process(t,e,i){return!0}get port(){return this.messageChannel&&this.messageChannel.port1}get port2(){return this.messageChannel&&this.messageChannel.port2}get parameters(){throw new Error("Method not implemented.")}get parameterDescriptors(){throw new Error("Method not implemented.")}get defaultParameterDescriptors(){return[]}}"undefined"==typeof window||"AudioWorkletProcessor"in window||(window.AudioWorkletProcessor=Qe,window.registerProcessor=ze.registerProcessor),"undefined"==typeof global||"AudioWorkletProcessor"in global||(global.AudioWorkletProcessor=Qe,global.registerProcessor=ze.registerProcessor);class Ze extends He{constructor(){super(...arguments),this.currentWorkletNode=null,this.fallbackToScriptProcessor=!1,this.keepCurrentNodeIfPossible=!1}initializeWorklet(t){return fe(this,void 0,void 0,(function*(){if(this.stop(),!Se.isAudioWorkletCompatible(t))return console.error("Audio Worklets not supported on this browser. Fallback to ScriptProcessor"),void(this.fallbackToScriptProcessor=!0);const e=(this.configService?this.configService.getWorkletBasePath():"")+this.workletPath;yield t.audioWorklet.addModule(e).catch((t=>{console.error(`Error when loading Worklet (${e}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`,t),this.fallbackToScriptProcessor=!0}))}))}isAudioWorkletEnabled(){return this.configService?this.configService.isAudioWorkletEnabled():ge.ENABLE_AUDIO_WORKLET}initializeNode(t,e){if(this.isAudioWorkletEnabled()&&!this.fallbackToScriptProcessor)this.currentWorkletNode=new AudioWorkletNode(t,e);else{const i=ze.getProcessor(e);if(!i)throw new Error(`No processor registered with name ${e} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);this.currentWorkletNode=new Ye(t,i,this.configService.getBufferSize())}this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.onmessage=t=>this.receiveEvent(t))}applyCurrentSettingsToWorklet(){if(this.currentWorkletNode&&this.currentWorkletNode.parameters){const t=this.getSettings();for(const e of Object.keys(t)){const i=this.currentWorkletNode.parameters.get(e);i&&(i.value=t[e],i.setValueAtTime(t[e],0))}}}getNode(t){if(this.keepCurrentNodeIfPossible&&this.currentWorkletNode&&this.currentWorkletNode.context==t||(this.stop(),this.initializeNode(t,this.workletName)),this.applyCurrentSettingsToWorklet(),this.setEnabled(this.isEnabled()),this.currentWorkletNode)return this.currentWorkletNode instanceof Ye?{input:this.currentWorkletNode.node,output:this.currentWorkletNode.node}:{input:this.currentWorkletNode,output:this.currentWorkletNode};throw new Error("Worklet node has not yet been created")}stop(){this.currentWorkletNode&&this.currentWorkletNode.port&&(this.currentWorkletNode.port.postMessage("stop"),this.currentWorkletNode.port.onmessage=null),this.currentWorkletNode=null}setEnabled(t){this.currentWorkletNode&&this.currentWorkletNode.port&&this.currentWorkletNode.port.postMessage(t?"enable":"disable"),super.setEnabled(t)}isWorklet(){return!0}}class Xe extends AudioWorkletProcessor{constructor(){super(),this.stopped=!1,this.phaser=null,this.last=null,this.port.onmessage=t=>{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[{name:"bits",defaultValue:16},{name:"normFreq",defaultValue:.9}]}get defaultParameterDescriptors(){return Xe.parameterDescriptors}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=2*Math.pow(.5,i.bits[0]),s=(1-i.normFreq[0])/(sampleRate/48e3);if(null==this.last&&(this.last=new Array(r.length).fill(0)),null==this.phaser&&(this.phaser=new Array(r.length).fill(0)),r&&r[0]){const t=r[0].length;for(let e=0;e=1&&(this.phaser[e]-=1,this.last[e]=o*Math.floor(i[r]*(1/o)+.5)),a[r]=this.last[e]}}return!0}stop(){this.stopped=!0,this.phaser=null,this.last=null}}registerProcessor(ge.WORKLET_NAMES.BITCRUSHER,Xe);class $e{constructor(t){this._array=new Float32Array,this.n=0,this.length=0,this.readPointer=0,this.writePointer=0,this.n=Math.floor(t),this.init()}init(){this._array=new Float32Array(2*this.n),this.length=this._array.length,this.readPointer=0,this.writePointer=this.n-1,this._array.fill(0)}read(){const t=this._array[this.readPointer%this.length];return this.readPointer=(this.readPointer+1)%this.length,t}push(t){this._array[this.writePointer%this.length]=t,this.writePointer=(this.writePointer+1)%this.length}reset(){this.init()}clear(){this._array=new Float32Array,this.length=0,this.readPointer=0,this.writePointer=0}sum(){return this._array.reduce(((t,e)=>t+e),0)}}class Je extends AudioWorkletProcessor{constructor(){super(),this.delayBuffer=[],this.envelopeSample=0,this.stopped=!1,this.disabled=!1,this.port.onmessage=t=>{"reset"==t.data?this.reset():"stop"==t.data?this.stop():"disable"==t.data?this.disabled=!0:"enable"==t.data&&(this.disabled=!1)}}static get parameterDescriptors(){return[{name:"preGain",defaultValue:0},{name:"postGain",defaultValue:0},{name:"attackTime",defaultValue:0},{name:"releaseTime",defaultValue:3},{name:"threshold",defaultValue:-.05},{name:"lookAheadTime",defaultValue:0}]}get defaultParameterDescriptors(){return Je.parameterDescriptors}getEnvelope(t,e,i,r){const n=Math.exp(-1/(r*e)),o=Math.exp(-1/(r*i)),s=new Float32Array(t.length);for(let e=0;er&&(r=t[n][i]);return r}ampToDB(t){return 20*Math.log10(t)}dBToAmp(t){return Math.pow(10,t/20)}process(t,e,i){if(this.stopped)return!1;const r=t[0],n=e[0],o=[],s=this.dBToAmp(i.postGain[0]),a=this.dBToAmp(i.preGain[0]);for(let t=0;t0&&a)for(let e=0;e=0||(i=(t.length-r)/2);const n=2*i;this.ensureCapacity(i+this._frameCount);const o=this.endIndex;this.vector.set(t.subarray(r,r+n),o),this._frameCount+=i}putBuffer(t,e,i=0){e=e||0,i>=0||(i=t.frameCount-e),this.putSamples(t.vector,t.position+e,i)}receive(t){t>=0&&!(t>this._frameCount)||(t=this.frameCount),this._frameCount-=t,this._position+=t}receiveSamples(t,e=0){const i=2*e,r=this.startIndex;t.set(this._vector.subarray(r,r+i)),this.receive(e)}extract(t,e=0,i=0){const r=this.startIndex+2*e,n=2*i;t.set(this._vector.subarray(r,r+n))}ensureCapacity(t=0){const e=parseInt(2*t);if(this._vector.length0&&(this._vector.set(this._vector.subarray(this.startIndex,this.endIndex)),this._position=0)}}class ii{constructor(t){t?(this._inputBuffer=new ei,this._outputBuffer=new ei):this._inputBuffer=this._outputBuffer=null}get inputBuffer(){return this._inputBuffer}set inputBuffer(t){this._inputBuffer=t}get outputBuffer(){return this._outputBuffer}set outputBuffer(t){this._outputBuffer=t}clear(){this._inputBuffer.clear(),this._outputBuffer.clear()}}class ri extends ii{constructor(t){super(t),this.reset(),this._rate=1}set rate(t){this._rate=t}reset(){this.slopeCount=0,this.prevSampleL=0,this.prevSampleR=0}clone(){const t=new ri;return t.rate=this._rate,t}process(){const t=this._inputBuffer.frameCount;this._outputBuffer.ensureAdditionalCapacity(t/this._rate+1);const e=this.transpose(t);this._inputBuffer.receive(),this._outputBuffer.put(e)}transpose(t=0){if(0===t)return 0;const e=this._inputBuffer.vector,i=this._inputBuffer.startIndex,r=this._outputBuffer.vector,n=this._outputBuffer.endIndex;let o=0,s=0;for(;this.slopeCount<1;)r[n+2*s]=(1-this.slopeCount)*this.prevSampleL+this.slopeCount*e[i],r[n+2*s+1]=(1-this.slopeCount)*this.prevSampleR+this.slopeCount*e[i+1],s+=1,this.slopeCount+=this._rate;if(this.slopeCount-=1,1!==t)t:for(;;){for(;this.slopeCount>1;)if(this.slopeCount-=1,o+=1,o>=t-1)break t;const a=i+2*o;r[n+2*s]=(1-this.slopeCount)*e[a]+this.slopeCount*e[a+2],r[n+2*s+1]=(1-this.slopeCount)*e[a+1]+this.slopeCount*e[a+3],s+=1,this.slopeCount+=this._rate}return this.prevSampleL=e[i+2*t-2],this.prevSampleR=e[i+2*t-1],s}}class ni{constructor(t){this._pipe=t}get pipe(){return this._pipe}get inputBuffer(){return this._pipe.inputBuffer}get outputBuffer(){return this._pipe.outputBuffer}fillInputBuffer(){throw new Error("fillInputBuffer() not overridden")}fillOutputBuffer(t=0){for(;this.outputBuffer.frameCountthis._position)throw new RangeError("New position may not be greater than current position");const e=this.outputBufferPosition-(this._position-t);if(e<0)throw new RangeError("New position falls outside of history buffer");this.outputBufferPosition=e,this._position=t}get sourcePosition(){return this._sourcePosition}set sourcePosition(t){this.clear(),this._sourcePosition=t}onEnd(){this.callback()}fillInputBuffer(t=0){const e=new Float32Array(2*t),i=this.sourceSound.extract(e,t,this._sourcePosition);this._sourcePosition+=i,this.inputBuffer.putSamples(e,0,i)}extract(t,e=0){this.fillOutputBuffer(this.outputBufferPosition+e);const i=Math.min(e,this.outputBuffer.frameCount-this.outputBufferPosition);this.outputBuffer.extract(t,this.outputBufferPosition,i);const r=this.outputBufferPosition+i;return this.outputBufferPosition=Math.min(this.historyBufferSize,r),this.outputBuffer.receive(Math.max(r-this.historyBufferSize,0)),this._position+=i,i}handleSampleData(t){this.extract(t.data,4096)}clear(){super.clear(),this.outputBufferPosition=0}}const ai=[[124,186,248,310,372,434,496,558,620,682,744,806,868,930,992,1054,1116,1178,1240,1302,1364,1426,1488,0],[-100,-75,-50,-25,25,50,75,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-20,-15,-10,-5,5,10,15,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-4,-3,-2,-1,1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],ui=-10/1.5;class ci extends ii{constructor(t){super(t),this._quickSeek=!0,this.midBufferDirty=!1,this.midBuffer=null,this.overlapLength=0,this.autoSeqSetting=!0,this.autoSeekSetting=!0,this._tempo=1,this.setParameters(44100,0,0,8)}clear(){super.clear(),this.clearMidBuffer()}clearMidBuffer(){this.midBufferDirty&&(this.midBufferDirty=!1,this.midBuffer=null)}setParameters(t,e,i,r){t>0&&(this.sampleRate=t),r>0&&(this.overlapMs=r),e>0?(this.sequenceMs=e,this.autoSeqSetting=!1):this.autoSeqSetting=!0,i>0?(this.seekWindowMs=i,this.autoSeekSetting=!1):this.autoSeekSetting=!0,this.calculateSequenceParameters(),this.calculateOverlapLength(this.overlapMs),this.tempo=this._tempo}set tempo(t){let e;this._tempo=t,this.calculateSequenceParameters(),this.nominalSkip=this._tempo*(this.seekWindowLength-this.overlapLength),this.skipFract=0,e=Math.floor(this.nominalSkip+.5),this.sampleReq=Math.max(e+this.overlapLength,this.seekWindowLength)+this.seekLength}get tempo(){return this._tempo}get inputChunkSize(){return this.sampleReq}get outputChunkSize(){return this.overlapLength+Math.max(0,this.seekWindowLength-2*this.overlapLength)}calculateOverlapLength(t=0){let e;e=this.sampleRate*t/1e3,e=e<16?16:e,e-=e%8,this.overlapLength=e,this.refMidBuffer=new Float32Array(2*this.overlapLength),this.midBuffer=new Float32Array(2*this.overlapLength)}checkLimits(t,e,i){return ti?i:t}calculateSequenceParameters(){let t,e;this.autoSeqSetting&&(t=150+-50*this._tempo,t=this.checkLimits(t,50,125),this.sequenceMs=Math.floor(t+.5)),this.autoSeekSetting&&(e=28.333333333333332+ui*this._tempo,e=this.checkLimits(e,15,25),this.seekWindowMs=Math.floor(e+.5)),this.seekWindowLength=Math.floor(this.sampleRate*this.sequenceMs/1e3),this.seekLength=Math.floor(this.sampleRate*this.seekWindowMs/1e3)}set quickSeek(t){this._quickSeek=t}clone(){const t=new ci;return t.tempo=this._tempo,t.setParameters(this.sampleRate,this.sequenceMs,this.seekWindowMs,this.overlapMs),t}seekBestOverlapPosition(){return this._quickSeek?this.seekBestOverlapPositionStereoQuick():this.seekBestOverlapPositionStereo()}seekBestOverlapPositionStereo(){let t,e,i,r=0;for(this.preCalculateCorrelationReferenceStereo(),t=0,e=Number.MIN_VALUE;re&&(e=i,t=r);return t}seekBestOverlapPositionStereoQuick(){let t,e,i,r,n,o=0;for(this.preCalculateCorrelationReferenceStereo(),e=Number.MIN_VALUE,t=0,r=0,n=0;o<4;o+=1){let s=0;for(;ai[o][s]&&(n=r+ai[o][s],!(n>=this.seekLength));)i=this.calculateCrossCorrelationStereo(2*n,this.refMidBuffer),i>e&&(e=i,t=n),s+=1;r=t}return t}preCalculateCorrelationReferenceStereo(){let t,e,i=0;for(;i=this.sampleReq;){t=this.seekBestOverlapPosition(),this._outputBuffer.ensureAdditionalCapacity(this.overlapLength),this.overlap(Math.floor(t)),this._outputBuffer.put(this.overlapLength),e=this.seekWindowLength-2*this.overlapLength,e>0&&this._outputBuffer.putBuffer(this._inputBuffer,t+this.overlapLength,e);const r=this._inputBuffer.startIndex+2*(t+this.seekWindowLength-this.overlapLength);this.midBuffer.set(this._inputBuffer.vector.subarray(r,r+2*this.overlapLength)),this.skipFract+=this.nominalSkip,i=Math.floor(this.skipFract),this.skipFract-=i,this._inputBuffer.receive(i)}}}const hi=function(t,e){return(t>e?t-e:e-t)>1e-10};class li{constructor(){this.transposer=new ri(!1),this.stretch=new ci(!1),this._inputBuffer=new ei,this._intermediateBuffer=new ei,this._outputBuffer=new ei,this._rate=0,this._tempo=0,this.virtualPitch=1,this.virtualRate=1,this.virtualTempo=1,this.calculateEffectiveRateAndTempo()}clear(){this.transposer.clear(),this.stretch.clear()}clone(){const t=new li;return t.rate=this.rate,t.tempo=this.tempo,t}get rate(){return this._rate}set rate(t){this.virtualRate=t,this.calculateEffectiveRateAndTempo()}set rateChange(t){this._rate=1+.01*t}get tempo(){return this._tempo}set tempo(t){this.virtualTempo=t,this.calculateEffectiveRateAndTempo()}set tempoChange(t){this.tempo=1+.01*t}set pitch(t){this.virtualPitch=t,this.calculateEffectiveRateAndTempo()}set pitchOctaves(t){this.pitch=Math.exp(.69314718056*t),this.calculateEffectiveRateAndTempo()}set pitchSemitones(t){this.pitchOctaves=t/12}get inputBuffer(){return this._inputBuffer}get outputBuffer(){return this._outputBuffer}calculateEffectiveRateAndTempo(){const t=this._tempo,e=this._rate;this._tempo=this.virtualTempo/this.virtualPitch,this._rate=this.virtualRate*this.virtualPitch,hi(this._tempo,t)&&(this.stretch.tempo=this._tempo),hi(this._rate,e)&&(this.transposer.rate=this._rate),this._rate>1?this._outputBuffer!=this.transposer.outputBuffer&&(this.stretch.inputBuffer=this._inputBuffer,this.stretch.outputBuffer=this._intermediateBuffer,this.transposer.inputBuffer=this._intermediateBuffer,this.transposer.outputBuffer=this._outputBuffer):this._outputBuffer!=this.stretch.outputBuffer&&(this.transposer.inputBuffer=this._inputBuffer,this.transposer.outputBuffer=this._intermediateBuffer,this.stretch.inputBuffer=this._intermediateBuffer,this.stretch.outputBuffer=this._outputBuffer)}process(){this._rate>1?(this.stretch.process(),this.transposer.process()):(this.transposer.process(),this.stretch.process())}}class di{constructor(t){this.buffer=t,this._position=0}get dualChannel(){return this.buffer.numberOfChannels>1}get position(){return this._position}set position(t){this._position=t}extract(t,e=0,i=0){this.position=i;let r=this.buffer.getChannelData(0),n=this.dualChannel?this.buffer.getChannelData(1):this.buffer.getChannelData(0),o=0;for(;o=r?i:new Array(r-i.length+1).join(n)+i}`;var i,r,n},pi=function(t){const e=this.timePlayed,i=this.sampleRate;if(this.sourcePosition=t,this.timePlayed=t/i,e!==this.timePlayed){const t=new CustomEvent("play",{detail:{timePlayed:this.timePlayed,formattedTimePlayed:this.formattedTimePlayed,percentagePlayed:this.percentagePlayed}});this._node.dispatchEvent(t)}};class gi{constructor(t,e,i,r=oi){this._soundtouch=new li;const n=new di(e);this.timePlayed=0,this.sourcePosition=0,this._filter=new si(n,this._soundtouch,r),this._node=function(t,e,i=oi,r=4096){const n=t.createScriptProcessor(r,2,2),o=new Float32Array(2*r);return n.onaudioprocess=t=>{let n=t.outputBuffer.getChannelData(0),s=t.outputBuffer.getChannelData(1),a=e.extract(o,r);i(e.sourcePosition),0===a&&e.onEnd();let u=0;for(;upi.call(this,t)),i),this.tempo=1,this.rate=1,this.duration=e.duration,this.sampleRate=t.sampleRate,this.listeners=[]}get formattedDuration(){return fi(this.duration)}get formattedTimePlayed(){return fi(this.timePlayed)}get percentagePlayed(){return 100*this._filter.sourcePosition/(this.duration*this.sampleRate)}set percentagePlayed(t){this._filter.sourcePosition=parseInt(t*this.duration*this.sampleRate),this.sourcePosition=this._filter.sourcePosition,this.timePlayed=this.sourcePosition/this.sampleRate}get node(){return this._node}set pitch(t){this._soundtouch.pitch=t}set pitchSemitones(t){this._soundtouch.pitchSemitones=t}set rate(t){this._soundtouch.rate=t}set tempo(t){this._soundtouch.tempo=t}connect(t){this._node.connect(t)}disconnect(){this._node.disconnect()}on(t,e){this.listeners.push({name:t,cb:e}),this._node.addEventListener(t,(t=>e(t.detail)))}off(t=null){let e=this.listeners;t&&(e=e.filter((e=>e.name===t))),e.forEach((t=>{this._node.removeEventListener(t.name,(e=>t.cb(e.detail)))}))}}let vi;"undefined"!=typeof window&&void 0!==window.AudioWorkletNode&&(vi=class extends AudioWorkletNode{constructor(t,e,i){super(t,e,i),this.name="",this.running=!1,this._tempo=1,this._pitch=1,this.name=this.constructor.name,this.running=!0,this.updateInterval=i.processorOptions.updateInterval}setup(t,e){return fe(this,void 0,void 0,(function*(){return new Promise((i=>{this.port&&(this.port.onmessage=t=>{t&&t.data&&"OK"===t.data.status&&"setup"===t.data.args[0]&&(this.port.onmessage=this.messageProcessor.bind(this),i())},this.port.postMessage({command:"setup",args:[t,e]}),this._tempo=t,this._pitch=e)}))}))}set updateInterval(t){this.port.postMessage({command:"updateInterval",args:[t]})}get node(){return this}set tempo(t){this.port.postMessage({command:"setTempo",args:[t]})}set pitch(t){this.port.postMessage({command:"setPitch",args:[t]})}get tempo(){return this.port.postMessage({command:"getTempo",args:[]}),this._tempo}get pitch(){return this.port.postMessage({command:"getPitch",args:[]}),this._pitch}stop(){return fe(this,void 0,void 0,(function*(){this.running&&(this.port.postMessage({command:"stop",args:[]}),this.disconnect(),this.running=!1)}))}messageProcessor(t){if(t.data.command){const{command:e}=t.data;if("End"===e)this.stop();if(t.data.status){const e=t.data.args[1];switch(t.data.args[0]){case"getTempo":this._tempo=e;break;case"getPitch":this._pitch=e}return}}}});var mi=vi;class yi{constructor(t,e,i){this.FILTER_QUALITY=6,this.FOURIER_SIZE=4096,this.WAVETABLEBOOST=40,this.SAWTOOTHBOOST=.4,this.oscillatorType=4,this.oscillatorDetuneValue=0,this.audioContext=null,this.carrierBuffer=null,this.modulatorNode=null,this.vocoding=!1,this.modulatorInput=null,this.carrierInput=null,this.modulatorGain=null,this.modulatorGainValue=1,this.noiseBuffer=null,this.noiseNode=null,this.noiseGain=null,this.noiseGainValue=.2,this.carrierSampleNode=null,this.carrierSampleGain=null,this.carrierSampleGainValue=0,this.oscillatorNode=null,this.oscillatorGain=null,this.oscillatorGainValue=1,this.wavetable=null,this.wavetableSignalGain=null,this.modFilterBands=null,this.modFilterPostGains=null,this.heterodynes=null,this.powers=null,this.lpFilters=null,this.lpFilterPostGains=null,this.carrierBands=null,this.carrierFilterPostGains=null,this.carrierBandGains=null,this.vocoderBands=null,this.numVocoderBands=0,this.hpFilterGain=null,this.outputGain=null,this.audioContext=t,this.carrierBuffer=e,this.modulatorBuffer=i}init(){this.generateVocoderBands(55,7040,28),this.setupVocoderGraph(),this.vocode()}getNodes(){return{modulatorNode:this.modulatorNode,modulatorGain:this.modulatorGain,synthLevel:this.oscillatorGain,noiseNode:this.noiseGain,oscillatorNode:this.oscillatorNode,hpFilterGain:this.hpFilterGain,outputGain:this.outputGain}}shutOffCarrier(){this.oscillatorNode&&this.noiseNode&&this.carrierSampleNode&&(this.oscillatorNode.stop(0),this.oscillatorNode=null,this.noiseNode.stop(0),this.noiseNode=null,this.carrierSampleNode.stop(0),this.carrierSampleNode=null)}selectSawtooth(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.SAWTOOTHBOOST),this.oscillatorNode&&(this.oscillatorNode.type="sawtooth")}selectWavetable(){this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST),this.oscillatorNode&&this.wavetable&&this.oscillatorNode.setPeriodicWave(this.wavetable),this.wavetableSignalGain&&(this.wavetableSignalGain.gain.value=this.WAVETABLEBOOST)}updateModGain(t){this.modulatorGainValue=t,this.modulatorGain&&(this.modulatorGain.gain.value=t)}updateSampleLevel(t){this.carrierSampleGainValue=t,this.carrierSampleGain&&(this.carrierSampleGain.gain.value=t)}updateSynthLevel(t){this.oscillatorGainValue=t,this.oscillatorGain&&(this.oscillatorGain.gain.value=t)}updateNoiseLevel(t){this.noiseGainValue=t,this.noiseGain&&(this.noiseGain.gain.value=t)}updateDetuneValue(t){this.oscillatorDetuneValue=t,this.oscillatorNode&&(this.oscillatorNode.detune.value=t)}generateVocoderBands(t,e,i){const r=1200*Math.log(e/t)/Math.LN2/i,n=Math.pow(2,r/1200);this.vocoderBands=[];let o=t;for(let t=0;t0?t:-t)/32768;for(let e=0;e{"stop"==t.data&&this.stop()}}static get parameterDescriptors(){return[]}get defaultParameterDescriptors(){return Ei.parameterDescriptors}process(t,e){if(this.stopped)return!1;const i=t[0],r=e[0];if(i&&i[0]&&(this.samplesCount+=i[0].length),r){for(let t=0;t{},this.seconds=t,this.initialSeconds=t,this.interval,this.incr=e}start(){this.interval=window.setInterval((()=>this.count()),1e3)}stop(){clearInterval(this.interval)}count(){this.seconds+=this.incr,this.seconds<=0&&this.stop(),this.countCallback&&this.countCallback()}onCount(t){this.countCallback=t}}let bi=class extends be{constructor(t,e){super(),this.recorder=null,this.input=null,this.stream=null,this.alreadyInit=!1,this.timer=null,this.enableAudioFeedback=!1,this.recording=!1,this.deviceList=[],this.constraints={audio:{noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0,sampleRate:{ideal:44100}}},this.sampleRateConfigNotSupported=!1,this.contextManager=t,this.configService=e}init(){return fe(this,void 0,void 0,(function*(){var t;if(this.isRecordingAvailable()){this.sampleRateConfigNotSupported=!navigator.mediaDevices.getSupportedConstraints().sampleRate,this.contextManager&&(this.sampleRateConfigNotSupported?this.contextManager.createNewContext(0):this.contextManager.createNewContextIfNeeded()),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_INIT);try{const t=yield navigator.mediaDevices.getUserMedia(this.constraints);this.contextManager&&this.contextManager.currentContext&&this.contextManager.currentContext.resume(),yield this.setup(t,!1,!1),this.alreadyInit=!0,this.timer=new _i(0,1),this.timer.onCount((()=>{var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_COUNT_UPDATE)})),this.successCallback()}catch(t){console.error(t);if(t)switch(t.name){case"SecurityError":case"NotAllowedError":this.errorCallback();break;case"NotFoundError":this.notFoundErrorCallback();break;case"NotSupportedError":this.sampleRateConfigNotSupported||(this.sampleRateConfigNotSupported=!0,this.init());break;default:this.unknownErrorCallback()}}navigator.mediaDevices.ondevicechange=()=>this.updateInputList()}}))}successCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_SUCCESS)}errorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_ERROR)}notFoundErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_NOT_FOUND_ERROR)}unknownErrorCallback(){var t;null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_UNKNOWN_ERROR)}audioFeedback(t){var e;this.contextManager&&this.contextManager.currentContext&&(t?(this.input&&this.input.connect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!0):(this.input&&this.input.connect(this.contextManager.currentContext.destination)&&this.input.disconnect(this.contextManager.currentContext.destination),this.enableAudioFeedback=!1),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.RECORDER_UPDATE_CONSTRAINTS))}getConstraints(){if(this.stream){const t=this.stream.getTracks();if(t&&t.length>0)return t[0].getSettings()}return null}updateConstraints(){var t;const e=this.getConstraints();e&&(this.constraints.audio=Object.assign(this.constraints.audio,e),null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_UPDATE_CONSTRAINTS))}resetConstraints(t){return fe(this,void 0,void 0,(function*(){if(this.stream){const e=this.enableAudioFeedback,i=this.recording,r=this.stream.getTracks();if(t&&(this.updateConstraints(),this.constraints.audio=Object.assign(this.constraints.audio,t.audio)),r&&r.length>0)try{yield r[0].applyConstraints(this.constraints.audio);const n=this.getConstraints(),o=t?Object.keys(t.audio)[0]:"";if(this.audioFeedback(!1),this.pause(),!t||n&&n[o]!=t.audio[o]){this.stopStream();const t=yield navigator.mediaDevices.getUserMedia(this.constraints);yield this.setup(t,i,e)}else yield this.setup(null,i,e)}catch(t){this.errorCallback()}}}))}setup(t,e,i){return fe(this,void 0,void 0,(function*(){t&&this.contextManager&&this.contextManager.currentContext&&(this.input=this.contextManager.currentContext.createMediaStreamSource(t),this.stream=t),this.recorder&&this.input&&(yield this.recorder.setup(this.input),e&&(yield this.record())),this.audioFeedback(i),this.updateConstraints(),yield this.updateInputList()}))}setNoiseSuppression(t){this.resetConstraints({audio:{noiseSuppression:t}})}setAutoGain(t){this.resetConstraints({audio:{autoGainControl:t}})}setEchoCancellation(t){this.resetConstraints({audio:{echoCancellation:t}})}updateInputList(){return fe(this,void 0,void 0,(function*(){if(this.deviceList){const t=yield navigator.mediaDevices.enumerateDevices();this.deviceList=[],t.forEach((t=>{"audioinput"==t.kind&&this.deviceList.push(t)}))}}))}changeInput(t,e){e&&(this.constraints.audio.deviceId=t,this.constraints.audio.groupId=e,this.resetConstraints())}record(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.configService&&this.input&&(this.recorder||(this.recorder=new Fe({bufferLen:this.configService.getBufferSize(),sampleRate:this.configService.getSampleRate(),numChannels:2,workletBasePath:this.configService.getWorkletBasePath(),workerBasePath:this.configService.getWorkerBasePath(),mimeType:"audio/wav"}),yield this.recorder.setup(this.input)),this.recorder&&this.recorder.record(),this.timer&&this.timer.start(),this.recording=!0,this.eventEmitter&&this.eventEmitter.emit(pe.RECORDER_RECORDING))}))}stop(){return fe(this,void 0,void 0,(function*(){this.alreadyInit&&this.recorder&&(this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,this.recorder.getBuffer((t=>{var e;if(this.contextManager&&this.contextManager.currentContext){this.contextManager.currentContext.resume();const i=this.contextManager.currentContext.createBuffer(2,t[0].length,this.contextManager.currentContext.sampleRate);i.getChannelData(0).set(t[0]),i.getChannelData(1).set(t[1]),null===(e=this.eventEmitter)||void 0===e||e.emit(pe.RECORDER_STOPPED,i),this.reset()}})))}))}pause(){var t;this.alreadyInit&&(this.recorder&&this.recorder.stop(),this.timer&&this.timer.stop(),this.recording=!1,null===(t=this.eventEmitter)||void 0===t||t.emit(pe.RECORDER_PAUSED))}stopStream(){if(this.stream){const t=this.stream.getTracks();for(let e=0,i=t.length;e{const r=e.numberOfChannels,n=t.sampleRate*e.duration+2*t.sampleRate,o=t.createBuffer(r,n,t.sampleRate);for(let t=0;tAi.get(ce.EntryPointFilter))),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.frequencyBooster=200,this.frequencyReduce=200,this.dbBooster=15,this.dbReduce=-2}getNode(t){const e=t.createBiquadFilter();e.type="lowshelf",e.frequency.value=this.frequencyBooster,e.gain.value=this.dbBooster;const i=t.createBiquadFilter();return i.type="highshelf",i.frequency.value=this.frequencyReduce,i.gain.value=this.dbReduce,i.connect(e),{input:i,output:e}}get order(){return 3}get id(){return ge.FILTERS_NAMES.BASS_BOOST}getSettings(){return{frequencyBooster:this.frequencyBooster,frequencyReduce:this.frequencyReduce,dbBooster:this.dbBooster,dbReduce:this.dbReduce}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"frequencyBooster":this.frequencyBooster=parseInt(e);break;case"frequencyReduce":this.frequencyReduce=parseInt(e);break;case"dbBooster":this.dbBooster=parseInt(e);break;case"dbReduce":this.dbReduce=parseInt(e)}}))}}),Ai.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.bits=16,this.normFreq=.9}receiveEvent(t){}get workletPath(){return ge.WORKLET_PATHS.BITCRUSHER}get workletName(){return ge.WORKLET_NAMES.BITCRUSHER}get order(){return 6}get id(){return ge.FILTERS_NAMES.BITCRUSHER}getSettings(){return{bits:this.bits,normFreq:this.normFreq}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"bits":this.bits=parseInt(e);break;case"normFreq":this.normFreq=parseFloat(e)}this.applyCurrentSettingsToWorklet()}}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.delay=.2,this.gain=.75}getNode(t){const e=t.createDelay(179);e.delayTime.value=this.delay;const i=t.createGain();return i.gain.value=this.gain,i.connect(e),e.connect(i),{input:i,output:e}}get order(){return 7}get id(){return ge.FILTERS_NAMES.ECHO}getAddingTime(){return 5}getSettings(){return{delay:this.delay,gain:this.gain}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e))switch(t){case"delay":this.delay=parseFloat(e);break;case"gain":this.gain=parseFloat(e)}}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.highFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="highpass",e.frequency.value=this.highFrequency,{input:e,output:e}}get order(){return 4}get id(){return ge.FILTERS_NAMES.HIGH_PASS}getSettings(){return{highFrequency:this.highFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"highFrequency"===t)this.highFrequency=parseInt(e)}))}}),Ai.bind(ce.Filters).to(ti),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.lowFrequency=3500}getNode(t){const e=t.createBiquadFilter();return e.type="lowpass",e.frequency.value=this.lowFrequency,{input:e,output:e}}get order(){return 5}get id(){return ge.FILTERS_NAMES.LOW_PASS}getSettings(){return{lowFrequency:this.lowFrequency}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)&&"lowFrequency"===t)this.lowFrequency=parseInt(e)}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT,this.reverbCustomEnvironmentAddTime=5,this.customEnvironment=null}getNode(t){const e=t.createConvolver();this.reverbEnvironment&&("custom"!=this.reverbEnvironment.url||this.customEnvironment)||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT);const i=this.getReverbBuffer(t);return i&&(e.buffer=i),{input:e,output:e}}getReverbBuffer(t){if("custom"==this.reverbEnvironment.url&&this.customEnvironment){if(this.customEnvironment.sampleRate===t.sampleRate)return this.customEnvironment;this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT}else if(this.bufferFetcherService)return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url)}get order(){return 9}get id(){return ge.FILTERS_NAMES.REVERB}getAddingTime(){const t=this.getSettings();if(t&&t.reverbEnvironment){if("custom"==t.reverbEnvironment.value)return this.reverbCustomEnvironmentAddTime;if(t.reverbEnvironment.additionalData)return t.reverbEnvironment.additionalData.addDuration}return 0}getSettings(){var t;return this.reverbEnvironment?{reverbEnvironment:{name:this.reverbEnvironment.name,value:this.reverbEnvironment.url,additionalData:{size:this.reverbEnvironment.size,link:this.reverbEnvironment.link,addDuration:this.reverbEnvironment.addDuration}},downloadedBuffers:null===(t=this.bufferFetcherService)||void 0===t?void 0:t.getDownloadedBuffersList(),hasCustomEnvironment:!!this.customEnvironment,reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}:{reverbCustomEnvironmentAddTime:this.reverbCustomEnvironmentAddTime}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){var i;if("reverbEnvironment"==t){const t=e;if(t){const e=t.value;try{"custom"!=e&&(yield null===(i=this.bufferFetcherService)||void 0===i?void 0:i.fetchBuffer(e)),t.additionalData?this.reverbEnvironment={name:t.name,url:e,size:t.additionalData.size,addDuration:t.additionalData.addDuration,link:t.additionalData.link}:this.reverbEnvironment={name:t.name,url:e,size:0,addDuration:0,link:""}}catch(t){}}}else"reverbCustomEnvironmentAddTime"==t?Se.isSettingValueValid(e)&&(this.reverbCustomEnvironmentAddTime=parseInt(e)):"reverbCustomEnvironmentFile"==t&&this.bufferDecoderService&&e&&(this.customEnvironment=yield this.bufferDecoderService.decodeBufferFromFile(e),this.customEnvironment||(this.reverbEnvironment=ge.DEFAULT_REVERB_ENVIRONMENT))}))}bufferFetcherReseted(){return fe(this,void 0,void 0,(function*(){var t;const e=this.getSettings();if(e){const i=null===(t=e.reverbEnvironment)||void 0===t?void 0:t.value;if(i&&"custom"!==i&&this.bufferFetcherService)return yield this.bufferFetcherService.fetchBuffer(i),!0}return!1}))}}),Ai.bind(ce.Filters).to(class extends He{getNode(t){const e=t.createBiquadFilter();e.type="lowpass",e.frequency.value=2e3;const i=t.createBiquadFilter();i.type="lowpass",i.frequency.value=2e3;const r=t.createBiquadFilter();r.type="highpass",r.frequency.value=500;const n=t.createBiquadFilter();return n.type="highpass",n.frequency.value=500,e.connect(i),i.connect(r),r.connect(n),{input:e,output:n}}get order(){return 7}get id(){return ge.FILTERS_NAMES.TELEPHONIZER}getSettings(){return{}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Ai.bind(ce.Filters).to(class extends He{constructor(){super(...arguments),this.currentVocoder=null,this.modulatorGainValue=1,this.carrierSampleGainValue=0,this.oscillatorGainValue=1,this.noiseGainValue=.2,this.oscillatorDetuneValue=0}getNode(t){var e;const i=null===(e=this.bufferFetcherService)||void 0===e?void 0:e.getAudioBuffer(ge.VOCODER_MODULATOR);this.currentVocoder=new yi(t,i),this.currentVocoder.init(),this.applyCurrentSettingsToVocoder();const{modulatorGain:r,outputGain:n}=this.currentVocoder.getNodes();return{input:r,output:n}}getSettings(){return{modulatorGainValue:this.modulatorGainValue,carrierSampleGainValue:this.carrierSampleGainValue,oscillatorGainValue:this.oscillatorGainValue,noiseGainValue:this.noiseGainValue,oscillatorDetuneValue:this.oscillatorDetuneValue}}setSetting(t,e){return fe(this,void 0,void 0,(function*(){if(Se.isSettingValueValid(e)){switch(t){case"modulatorGainValue":this.modulatorGainValue=parseFloat(e);break;case"carrierSampleGainValue":this.carrierSampleGainValue=parseFloat(e);break;case"oscillatorGainValue":this.oscillatorGainValue=parseFloat(e);break;case"noiseGainValue":this.noiseGainValue=parseFloat(e);break;case"oscillatorDetuneValue":this.oscillatorDetuneValue=parseFloat(e)}this.applyCurrentSettingsToVocoder()}}))}applyCurrentSettingsToVocoder(){this.currentVocoder&&(this.currentVocoder.updateModGain(this.modulatorGainValue),this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue),this.currentVocoder.updateSynthLevel(this.oscillatorGainValue),this.currentVocoder.updateNoiseLevel(this.noiseGainValue),this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue))}get order(){return 1}get id(){return ge.FILTERS_NAMES.VOCODER}}),Ai.bind(ce.Filters).to(class extends Ze{constructor(){super(...arguments),this.currentTime=0,this.lastSampleCount=0,this.samplePerSecond=0,this.currentTimeSamplesPerSecond=0}receiveEvent(t){const e=performance.now(),i=t.data.samplesCount;"update"===t.data.command&&this.calculatePercentageProcessed(e,i),this.calculateRemainingTimeProcessing(e,i)}calculatePercentageProcessed(t,e){0===this.currentTime&&(this.currentTime=t);const i=t-this.currentTime,r=e/this._totalSamples;this.eventEmitter&&i>=ge.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL&&(this.eventEmitter.emit(pe.UPDATE_AUDIO_TREATMENT_PERCENT,100*r),this.currentTime=t)}calculateRemainingTimeProcessing(t,e){0===this.currentTimeSamplesPerSecond&&(this.currentTimeSamplesPerSecond=t);const i=t-this.currentTimeSamplesPerSecond,r=this._totalSamples-e;if(this.eventEmitter&&r<=0)this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,0);else if(this.eventEmitter&&i>=1e3){this.calculateSmoothedSamplePerSecond(i,e);const n=r/this.samplePerSecond;this.currentTimeSamplesPerSecond=t,this.lastSampleCount=e,isNaN(n)||!isFinite(n)?this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,-1):this.eventEmitter.emit(pe.UPDATE_REMAINING_TIME_ESTIMATED,n)}}calculateSmoothedSamplePerSecond(t,e){if(t>0){const i=(e-this.lastSampleCount)/(t/1e3);this.samplePerSecond=ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR*i+(1-ge.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR)*this.samplePerSecond}}get workletName(){return ge.WORKLET_NAMES.PASSTHROUGH}get workletPath(){return ge.WORKLET_PATHS.PASSTHROUGH}get order(){return 10}get id(){return ge.FILTERS_NAMES.PASSTHROUGH}set totalSamples(t){super.totalSamples=t,this.currentTime=0,this.currentTimeSamplesPerSecond=0,this.samplePerSecond=0,this.lastSampleCount=0}getSettings(){return{}}isEnabled(){return!0}setSetting(t,e){return fe(this,void 0,void 0,(function*(){}))}}),Ai.bind(ce.EventEmitter).to(me),Ai.bind(ce.AudioContextManager).to(Ee),Ai.bind(ce.AudioEditor).to(we),Ai.bind(ce.AudioProcessor).to(Te),Ai.bind(ce.BufferManager).to(Me),Ai.bind(ce.FilterManager).to(Pe),Ai.bind(ce.RendererManager).to(Ne),Ai.bind(ce.SaveBufferManager).to(xe),Ai.bind(ce.BufferPlayer).to(Ge),Ai.bind(ce.BufferFetcherService).to(Ve),Ai.bind(ce.BufferDecoderService).to(je),Ai.bind(ce.VoiceRecorder).to(Si);let wi=class{constructor(){this.mapConfig=new Map}getConfig(t){return this.mapConfig.get(t)}setConfig(t,e){this.mapConfig.set(t,e)}isCompatibilityModeEnabled(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED)}isCompatibilityModeChecked(){return"true"==this.getConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED)}isAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_AUDIO_WORKLET}isSoundtouchAudioWorkletEnabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);return null!=t?"true"==t:ge.ENABLE_SOUNDTOUCH_AUDIO_WORKLET}getBufferSize(){const t=this.getConfig(ge.PREFERENCES_KEYS.BUFFER_SIZE);return null!=t?parseInt(t):ge.DEFAULT_BUFFER_SIZE}getSampleRate(){const t=this.getConfig(ge.PREFERENCES_KEYS.SAMPLE_RATE);return null!=t?parseInt(t):ge.DEFAULT_SAMPLE_RATE}getBitrateMP3(){const t=this.getConfig(ge.PREFERENCES_KEYS.BITRATE_MP3);return null!=t?parseInt(t):ge.DEFAULT_MP3_BITRATE}enableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"true")}disableCompatibilityMode(){this.setConfig(ge.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED,"false")}getWorkletBasePath(){return""}getWorkerBasePath(){return""}getSoundBasePath(){return""}isInitialRenderingDisabled(){const t=this.getConfig(ge.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);return null!=t?"true"==t:ge.DISABLE_INITIAL_RENDERING}};wi=he([oe()],wi);var Ri=wi;class Ti{static createAudioEditor(t,e){return Ti.ready||(t?Ai.bind(ce.ConfigService).toDynamicValue((()=>t)):(Ai.bind(ce.ConfigService).to(Ri),console.warn("No ConfigService provided. Using default generic implementation.")),Ai.bind(ce.AudioBuffersToFetch).toConstantValue(e||[]),Ti.ready=!0),Ai.get(ce.AudioEditor)}static createVoiceRecorder(){return Ai.get(ce.VoiceRecorder)}static getAudioEditorInstance(){return Ai.get(ce.AudioEditor)}static getAudioPlayerInstance(){return Ai.get(ce.BufferPlayer)}static getAudioRecorderInstance(){return Ai.get(ce.VoiceRecorder)}static getEventEmitterInstance(){return Ai.get(ce.EventEmitter)}static getConfigServiceInstance(){return Ai.get(ce.ConfigService)}}Ti.ready=!1;export{be as AbstractAudioElement,He as AbstractAudioFilter,Ze as AbstractAudioFilterWorklet,qe as AbstractAudioRenderer,we as AudioEditor,Ge as BufferPlayer,ge as Constants,me as EventEmitter,pe as EventType,Pe as FilterManager,Ri as GenericConfigService,ti as LimiterFilter,Ti as SoundStudioFactory,Se as UtilFunctions,Si as VoiceRecorder,Ai as audioEditorContainer}; //# sourceMappingURL=SimpleSoundStudioLibrary.js.map diff --git a/dist/esm/SimpleSoundStudioLibrary.js.map b/dist/esm/SimpleSoundStudioLibrary.js.map index 85cc1a5..e6c7a51 100644 --- a/dist/esm/SimpleSoundStudioLibrary.js.map +++ b/dist/esm/SimpleSoundStudioLibrary.js.map @@ -1 +1 @@ -{"version":3,"file":"SimpleSoundStudioLibrary.js","sources":["../../node_modules/reflect-metadata/Reflect.js","../../node_modules/inversify/es/constants/metadata_keys.js","../../node_modules/inversify/es/constants/literal_types.js","../../node_modules/inversify/es/utils/id.js","../../node_modules/inversify/es/bindings/binding.js","../../node_modules/inversify/es/constants/error_msgs.js","../../node_modules/inversify/es/planning/metadata_reader.js","../../node_modules/inversify/es/bindings/binding_count.js","../../node_modules/inversify/es/utils/exceptions.js","../../node_modules/inversify/es/utils/serialization.js","../../node_modules/inversify/es/planning/context.js","../../node_modules/inversify/es/planning/metadata.js","../../node_modules/inversify/es/planning/plan.js","../../node_modules/inversify/es/annotation/lazy_service_identifier.js","../../node_modules/inversify/es/planning/queryable_string.js","../../node_modules/inversify/es/planning/target.js","../../node_modules/inversify/es/planning/reflection_utils.js","../../node_modules/inversify/es/planning/request.js","../../node_modules/inversify/es/planning/planner.js","../../node_modules/inversify/es/utils/async.js","../../node_modules/inversify/es/scope/scope.js","../../node_modules/inversify/es/utils/factory_type.js","../../node_modules/inversify/es/utils/binding_utils.js","../../node_modules/inversify/es/resolution/instantiation.js","../../node_modules/inversify/es/resolution/resolver.js","../../node_modules/inversify/es/syntax/constraint_helpers.js","../../node_modules/inversify/es/syntax/binding_when_syntax.js","../../node_modules/inversify/es/syntax/binding_on_syntax.js","../../node_modules/inversify/es/syntax/binding_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_in_syntax.js","../../node_modules/inversify/es/syntax/binding_in_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_to_syntax.js","../../node_modules/inversify/es/container/container_snapshot.js","../../node_modules/inversify/es/container/lookup.js","../../node_modules/inversify/es/utils/clonable.js","../../node_modules/inversify/es/container/module_activation_store.js","../../node_modules/inversify/es/container/container.js","../../node_modules/inversify/es/annotation/decorator_utils.js","../../node_modules/inversify/es/utils/js.js","../../node_modules/inversify/es/annotation/injectable.js","../../node_modules/inversify/es/annotation/inject_base.js","../../node_modules/inversify/es/annotation/inject.js","../../node_modules/inversify/es/annotation/multi_inject.js","../../lib/inversify.types.ts","../../node_modules/tslib/tslib.es6.js","../../lib/model/EventTypeEnum.ts","../../lib/model/Constants.ts","../../lib/utils/EventEmitter.ts","../../lib/audioEditor/AudioContextManager.ts","../../lib/filters/interfaces/AbstractAudioElement.ts","../../lib/utils/Functions.ts","../../lib/audioEditor/AudioEditor.ts","../../lib/audioEditor/AudioProcessor.ts","../../lib/audioEditor/BufferManager.ts","../../lib/audioEditor/FilterManager.ts","../../lib/audioEditor/RendererManager.ts","../../lib/recorder/getRecorderWorker.ts","../../lib/recorder/Recorder.ts","../../lib/audioEditor/SaveBufferManager.ts","../../lib/bufferPlayer/BufferPlayer.ts","../../lib/services/BufferFetcherService.ts","../../lib/services/BufferDecoderService.ts","../../lib/filters/interfaces/AbstractAudioRenderer.ts","../../lib/filters/interfaces/AbstractAudioFilter.ts","../../lib/workletPolyfill/AudioParamPolyfill.ts","../../lib/workletPolyfill/WorkletScriptProcessorNodeAdapter.ts","../../lib/workletPolyfill/RegisterProcessorPolyfill.ts","../../lib/workletPolyfill/SimpleAudioWorkletProcessor.ts","../../lib/workletPolyfill/AudioWorkletProcessorPolyfill.ts","../../lib/filters/interfaces/AbstractAudioFilterWorklet.ts","../../lib/filters/worklets/BitCrusher.worklet.ts","../../lib/utils/DelayBuffer.ts","../../lib/filters/worklets/Limiter.worklet.ts","../../node_modules/soundtouchjs/dist/soundtouch.js","../../lib/filters/worklets/SoundtouchWrapperFilterWorkletNode.ts","../../lib/utils/Vocoder.ts","../../lib/filters/worklets/Passthrough.worklet.ts","../../lib/utils/TimerSaveTime.ts","../../lib/voiceRecorder/VoiceRecorder.ts","../../lib/inversify.config.ts","../../lib/filters/SountouchWrapperFilter.ts","../../lib/filters/ReturnAudioRenderer.ts","../../lib/filters/BassBoosterFilter.ts","../../lib/filters/BitCrusherFilter.ts","../../lib/filters/EchoFilter.ts","../../lib/filters/HighPassFilter.ts","../../lib/filters/LimiterFilter.ts","../../lib/filters/LowPassFilter.ts","../../lib/filters/ReverbFilter.ts","../../lib/filters/TelephonizerFilter.ts","../../lib/filters/VocoderFilter.ts","../../lib/filters/PassThroughFilter.ts","../../lib/services/GenericConfigService.ts","../../lib/utils/SoundStudioFactory.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","export var NAMED_TAG = 'named';\r\nexport var NAME_TAG = 'name';\r\nexport var UNMANAGED_TAG = 'unmanaged';\r\nexport var OPTIONAL_TAG = 'optional';\r\nexport var INJECT_TAG = 'inject';\r\nexport var MULTI_INJECT_TAG = 'multi_inject';\r\nexport var TAGGED = 'inversify:tagged';\r\nexport var TAGGED_PROP = 'inversify:tagged_props';\r\nexport var PARAM_TYPES = 'inversify:paramtypes';\r\nexport var DESIGN_PARAM_TYPES = 'design:paramtypes';\r\nexport var POST_CONSTRUCT = 'post_construct';\r\nexport var PRE_DESTROY = 'pre_destroy';\r\nfunction getNonCustomTagKeys() {\r\n return [\r\n INJECT_TAG,\r\n MULTI_INJECT_TAG,\r\n NAME_TAG,\r\n UNMANAGED_TAG,\r\n NAMED_TAG,\r\n OPTIONAL_TAG,\r\n ];\r\n}\r\nexport var NON_CUSTOM_TAG_KEYS = getNonCustomTagKeys();\r\n","var BindingScopeEnum = {\r\n Request: 'Request',\r\n Singleton: 'Singleton',\r\n Transient: 'Transient'\r\n};\r\nvar BindingTypeEnum = {\r\n ConstantValue: 'ConstantValue',\r\n Constructor: 'Constructor',\r\n DynamicValue: 'DynamicValue',\r\n Factory: 'Factory',\r\n Function: 'Function',\r\n Instance: 'Instance',\r\n Invalid: 'Invalid',\r\n Provider: 'Provider'\r\n};\r\nvar TargetTypeEnum = {\r\n ClassProperty: 'ClassProperty',\r\n ConstructorArgument: 'ConstructorArgument',\r\n Variable: 'Variable'\r\n};\r\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\r\n","var idCounter = 0;\r\nfunction id() {\r\n return idCounter++;\r\n}\r\nexport { id };\r\n","import { BindingScopeEnum, BindingTypeEnum } from '../constants/literal_types';\r\nimport { id } from '../utils/id';\r\nvar Binding = (function () {\r\n function Binding(serviceIdentifier, scope) {\r\n this.id = id();\r\n this.activated = false;\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.scope = scope;\r\n this.type = BindingTypeEnum.Invalid;\r\n this.constraint = function (request) { return true; };\r\n this.implementationType = null;\r\n this.cache = null;\r\n this.factory = null;\r\n this.provider = null;\r\n this.onActivation = null;\r\n this.onDeactivation = null;\r\n this.dynamicValue = null;\r\n }\r\n Binding.prototype.clone = function () {\r\n var clone = new Binding(this.serviceIdentifier, this.scope);\r\n clone.activated = (clone.scope === BindingScopeEnum.Singleton) ? this.activated : false;\r\n clone.implementationType = this.implementationType;\r\n clone.dynamicValue = this.dynamicValue;\r\n clone.scope = this.scope;\r\n clone.type = this.type;\r\n clone.factory = this.factory;\r\n clone.provider = this.provider;\r\n clone.constraint = this.constraint;\r\n clone.onActivation = this.onActivation;\r\n clone.onDeactivation = this.onDeactivation;\r\n clone.cache = this.cache;\r\n return clone;\r\n };\r\n return Binding;\r\n}());\r\nexport { Binding };\r\n","export var DUPLICATED_INJECTABLE_DECORATOR = 'Cannot apply @injectable decorator multiple times.';\r\nexport var DUPLICATED_METADATA = 'Metadata key was used more than once in a parameter:';\r\nexport var NULL_ARGUMENT = 'NULL argument';\r\nexport var KEY_NOT_FOUND = 'Key Not Found';\r\nexport var AMBIGUOUS_MATCH = 'Ambiguous match found for serviceIdentifier:';\r\nexport var CANNOT_UNBIND = 'Could not unbind serviceIdentifier:';\r\nexport var NOT_REGISTERED = 'No matching bindings found for serviceIdentifier:';\r\nexport var MISSING_INJECTABLE_ANNOTATION = 'Missing required @injectable annotation in:';\r\nexport var MISSING_INJECT_ANNOTATION = 'Missing required @inject or @multiInject annotation in:';\r\nexport var UNDEFINED_INJECT_ANNOTATION = function (name) {\r\n return \"@inject called with undefined this could mean that the class \" + name + \" has \" +\r\n 'a circular dependency problem. You can use a LazyServiceIdentifier to ' +\r\n 'overcome this limitation.';\r\n};\r\nexport var CIRCULAR_DEPENDENCY = 'Circular dependency found:';\r\nexport var NOT_IMPLEMENTED = 'Sorry, this feature is not fully implemented yet.';\r\nexport var INVALID_BINDING_TYPE = 'Invalid binding type:';\r\nexport var NO_MORE_SNAPSHOTS_AVAILABLE = 'No snapshot available to restore.';\r\nexport var INVALID_MIDDLEWARE_RETURN = 'Invalid return type in middleware. Middleware must return!';\r\nexport var INVALID_FUNCTION_BINDING = 'Value provided to function binding must be a function!';\r\nexport var LAZY_IN_SYNC = function (key) { return \"You are attempting to construct '\" + key + \"' in a synchronous way\\n but it has asynchronous dependencies.\"; };\r\nexport var INVALID_TO_SELF_VALUE = 'The toSelf function can only be applied when a constructor is ' +\r\n 'used as service identifier';\r\nexport var INVALID_DECORATOR_OPERATION = 'The @inject @multiInject @tagged and @named decorators ' +\r\n 'must be applied to the parameters of a class constructor or a class property.';\r\nexport var ARGUMENTS_LENGTH_MISMATCH = function () {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n return 'The number of constructor arguments in the derived class ' +\r\n (values[0] + \" must be >= than the number of constructor arguments of its base class.\");\r\n};\r\nexport var CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = 'Invalid Container constructor argument. Container options ' +\r\n 'must be an object.';\r\nexport var CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = 'Invalid Container option. Default scope must ' +\r\n 'be a string (\"singleton\" or \"transient\").';\r\nexport var CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = 'Invalid Container option. Auto bind injectable must ' +\r\n 'be a boolean';\r\nexport var CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = 'Invalid Container option. Skip base check must ' +\r\n 'be a boolean';\r\nexport var MULTIPLE_PRE_DESTROY_METHODS = 'Cannot apply @preDestroy decorator multiple times in the same class';\r\nexport var MULTIPLE_POST_CONSTRUCT_METHODS = 'Cannot apply @postConstruct decorator multiple times in the same class';\r\nexport var ASYNC_UNBIND_REQUIRED = 'Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)';\r\nexport var POST_CONSTRUCT_ERROR = function (clazz, errorMessage) { return \"@postConstruct error in class \" + clazz + \": \" + errorMessage; };\r\nexport var PRE_DESTROY_ERROR = function (clazz, errorMessage) { return \"@preDestroy error in class \" + clazz + \": \" + errorMessage; };\r\nexport var ON_DEACTIVATION_ERROR = function (clazz, errorMessage) { return \"onDeactivation() error in class \" + clazz + \": \" + errorMessage; };\r\nexport var CIRCULAR_DEPENDENCY_IN_FACTORY = function (factoryType, serviceIdentifier) {\r\n return \"It looks like there is a circular dependency in one of the '\" + factoryType + \"' bindings. Please investigate bindings with \" +\r\n (\"service identifier '\" + serviceIdentifier + \"'.\");\r\n};\r\nexport var STACK_OVERFLOW = 'Maximum call stack size exceeded';\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar MetadataReader = (function () {\r\n function MetadataReader() {\r\n }\r\n MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) {\r\n var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc);\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);\r\n return {\r\n compilerGeneratedMetadata: compilerGeneratedMetadata,\r\n userGeneratedMetadata: userGeneratedMetadata || {}\r\n };\r\n };\r\n MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) {\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || [];\r\n return userGeneratedMetadata;\r\n };\r\n return MetadataReader;\r\n}());\r\nexport { MetadataReader };\r\n","export var BindingCount = {\r\n MultipleBindingsAvailable: 2,\r\n NoBindingsAvailable: 0,\r\n OnlyOneBindingAvailable: 1\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nexport function isStackOverflowExeption(error) {\r\n return (error instanceof RangeError ||\r\n error.message === ERROR_MSGS.STACK_OVERFLOW);\r\n}\r\nexport var tryAndThrowErrorIfStackOverflow = function (fn, errorCallback) {\r\n try {\r\n return fn();\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n error = errorCallback();\r\n }\r\n throw error;\r\n }\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nfunction getServiceIdentifierAsString(serviceIdentifier) {\r\n if (typeof serviceIdentifier === 'function') {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier.name;\r\n }\r\n else if (typeof serviceIdentifier === 'symbol') {\r\n return serviceIdentifier.toString();\r\n }\r\n else {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier;\r\n }\r\n}\r\nfunction listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) {\r\n var registeredBindingsList = '';\r\n var registeredBindings = getBindings(container, serviceIdentifier);\r\n if (registeredBindings.length !== 0) {\r\n registeredBindingsList = '\\nRegistered bindings:';\r\n registeredBindings.forEach(function (binding) {\r\n var name = 'Object';\r\n if (binding.implementationType !== null) {\r\n name = getFunctionName(binding.implementationType);\r\n }\r\n registeredBindingsList = registeredBindingsList + \"\\n \" + name;\r\n if (binding.constraint.metaData) {\r\n registeredBindingsList = registeredBindingsList + \" - \" + binding.constraint.metaData;\r\n }\r\n });\r\n }\r\n return registeredBindingsList;\r\n}\r\nfunction alreadyDependencyChain(request, serviceIdentifier) {\r\n if (request.parentRequest === null) {\r\n return false;\r\n }\r\n else if (request.parentRequest.serviceIdentifier === serviceIdentifier) {\r\n return true;\r\n }\r\n else {\r\n return alreadyDependencyChain(request.parentRequest, serviceIdentifier);\r\n }\r\n}\r\nfunction dependencyChainToString(request) {\r\n function _createStringArr(req, result) {\r\n if (result === void 0) { result = []; }\r\n var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier);\r\n result.push(serviceIdentifier);\r\n if (req.parentRequest !== null) {\r\n return _createStringArr(req.parentRequest, result);\r\n }\r\n return result;\r\n }\r\n var stringArr = _createStringArr(request);\r\n return stringArr.reverse().join(' --> ');\r\n}\r\nfunction circularDependencyToException(request) {\r\n request.childRequests.forEach(function (childRequest) {\r\n if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) {\r\n var services = dependencyChainToString(childRequest);\r\n throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + \" \" + services);\r\n }\r\n else {\r\n circularDependencyToException(childRequest);\r\n }\r\n });\r\n}\r\nfunction listMetadataForTarget(serviceIdentifierString, target) {\r\n if (target.isTagged() || target.isNamed()) {\r\n var m_1 = '';\r\n var namedTag = target.getNamedTag();\r\n var otherTags = target.getCustomTags();\r\n if (namedTag !== null) {\r\n m_1 += namedTag.toString() + '\\n';\r\n }\r\n if (otherTags !== null) {\r\n otherTags.forEach(function (tag) {\r\n m_1 += tag.toString() + '\\n';\r\n });\r\n }\r\n return \" \" + serviceIdentifierString + \"\\n \" + serviceIdentifierString + \" - \" + m_1;\r\n }\r\n else {\r\n return \" \" + serviceIdentifierString;\r\n }\r\n}\r\nfunction getFunctionName(func) {\r\n if (func.name) {\r\n return func.name;\r\n }\r\n else {\r\n var name_1 = func.toString();\r\n var match = name_1.match(/^function\\s*([^\\s(]+)/);\r\n return match ? match[1] : \"Anonymous function: \" + name_1;\r\n }\r\n}\r\nfunction getSymbolDescription(symbol) {\r\n return symbol.toString().slice(7, -1);\r\n}\r\nexport { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription };\r\n","import { id } from '../utils/id';\r\nvar Context = (function () {\r\n function Context(container) {\r\n this.id = id();\r\n this.container = container;\r\n }\r\n Context.prototype.addPlan = function (plan) {\r\n this.plan = plan;\r\n };\r\n Context.prototype.setCurrentRequest = function (currentRequest) {\r\n this.currentRequest = currentRequest;\r\n };\r\n return Context;\r\n}());\r\nexport { Context };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar Metadata = (function () {\r\n function Metadata(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n Metadata.prototype.toString = function () {\r\n if (this.key === METADATA_KEY.NAMED_TAG) {\r\n return \"named: \" + String(this.value).toString() + \" \";\r\n }\r\n else {\r\n return \"tagged: { key:\" + this.key.toString() + \", value: \" + String(this.value) + \" }\";\r\n }\r\n };\r\n return Metadata;\r\n}());\r\nexport { Metadata };\r\n","var Plan = (function () {\r\n function Plan(parentContext, rootRequest) {\r\n this.parentContext = parentContext;\r\n this.rootRequest = rootRequest;\r\n }\r\n return Plan;\r\n}());\r\nexport { Plan };\r\n","var LazyServiceIdentifier = (function () {\r\n function LazyServiceIdentifier(cb) {\r\n this._cb = cb;\r\n }\r\n LazyServiceIdentifier.prototype.unwrap = function () {\r\n return this._cb();\r\n };\r\n return LazyServiceIdentifier;\r\n}());\r\nexport { LazyServiceIdentifier };\r\n","var QueryableString = (function () {\r\n function QueryableString(str) {\r\n this.str = str;\r\n }\r\n QueryableString.prototype.startsWith = function (searchString) {\r\n return this.str.indexOf(searchString) === 0;\r\n };\r\n QueryableString.prototype.endsWith = function (searchString) {\r\n var reverseString = '';\r\n var reverseSearchString = searchString.split('').reverse().join('');\r\n reverseString = this.str.split('').reverse().join('');\r\n return this.startsWith.call({ str: reverseString }, reverseSearchString);\r\n };\r\n QueryableString.prototype.contains = function (searchString) {\r\n return (this.str.indexOf(searchString) !== -1);\r\n };\r\n QueryableString.prototype.equals = function (compareString) {\r\n return this.str === compareString;\r\n };\r\n QueryableString.prototype.value = function () {\r\n return this.str;\r\n };\r\n return QueryableString;\r\n}());\r\nexport { QueryableString };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { id } from '../utils/id';\r\nimport { getSymbolDescription } from '../utils/serialization';\r\nimport { Metadata } from './metadata';\r\nimport { QueryableString } from './queryable_string';\r\nvar Target = (function () {\r\n function Target(type, identifier, serviceIdentifier, namedOrTagged) {\r\n this.id = id();\r\n this.type = type;\r\n this.serviceIdentifier = serviceIdentifier;\r\n var queryableName = typeof identifier === 'symbol' ? getSymbolDescription(identifier) : identifier;\r\n this.name = new QueryableString(queryableName || '');\r\n this.identifier = identifier;\r\n this.metadata = new Array();\r\n var metadataItem = null;\r\n if (typeof namedOrTagged === 'string') {\r\n metadataItem = new Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged);\r\n }\r\n else if (namedOrTagged instanceof Metadata) {\r\n metadataItem = namedOrTagged;\r\n }\r\n if (metadataItem !== null) {\r\n this.metadata.push(metadataItem);\r\n }\r\n }\r\n Target.prototype.hasTag = function (key) {\r\n for (var _i = 0, _a = this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Target.prototype.isArray = function () {\r\n return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG);\r\n };\r\n Target.prototype.matchesArray = function (name) {\r\n return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name);\r\n };\r\n Target.prototype.isNamed = function () {\r\n return this.hasTag(METADATA_KEY.NAMED_TAG);\r\n };\r\n Target.prototype.isTagged = function () {\r\n return this.metadata.some(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n };\r\n Target.prototype.isOptional = function () {\r\n return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true);\r\n };\r\n Target.prototype.getNamedTag = function () {\r\n if (this.isNamed()) {\r\n return this.metadata.filter(function (m) { return m.key === METADATA_KEY.NAMED_TAG; })[0];\r\n }\r\n return null;\r\n };\r\n Target.prototype.getCustomTags = function () {\r\n if (this.isTagged()) {\r\n return this.metadata.filter(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n Target.prototype.matchesNamedTag = function (name) {\r\n return this.matchesTag(METADATA_KEY.NAMED_TAG)(name);\r\n };\r\n Target.prototype.matchesTag = function (key) {\r\n var _this = this;\r\n return function (value) {\r\n for (var _i = 0, _a = _this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key && m.value === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n };\r\n return Target;\r\n}());\r\nexport { Target };\r\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { LazyServiceIdentifier } from '../annotation/lazy_service_identifier';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFunctionName } from '../utils/serialization';\r\nimport { Target } from './target';\r\nfunction getDependencies(metadataReader, func) {\r\n var constructorName = getFunctionName(func);\r\n return getTargets(metadataReader, constructorName, func, false);\r\n}\r\nfunction getTargets(metadataReader, constructorName, func, isBaseClass) {\r\n var metadata = metadataReader.getConstructorMetadata(func);\r\n var serviceIdentifiers = metadata.compilerGeneratedMetadata;\r\n if (serviceIdentifiers === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var constructorArgsMetadata = metadata.userGeneratedMetadata;\r\n var keys = Object.keys(constructorArgsMetadata);\r\n var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);\r\n var hasOptionalParameters = keys.length > func.length;\r\n var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;\r\n var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);\r\n var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);\r\n var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);\r\n return targets;\r\n}\r\nfunction getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {\r\n var targetMetadata = constructorArgsMetadata[index.toString()] || [];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var isManaged = metadata.unmanaged !== true;\r\n var serviceIdentifier = serviceIdentifiers[index];\r\n var injectIdentifier = metadata.inject || metadata.multiInject;\r\n serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);\r\n if (serviceIdentifier instanceof LazyServiceIdentifier) {\r\n serviceIdentifier = serviceIdentifier.unwrap();\r\n }\r\n if (isManaged) {\r\n var isObject = serviceIdentifier === Object;\r\n var isFunction = serviceIdentifier === Function;\r\n var isUndefined = serviceIdentifier === undefined;\r\n var isUnknownType = isObject || isFunction || isUndefined;\r\n if (!isBaseClass && isUnknownType) {\r\n var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + \" argument \" + index + \" in class \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var target = new Target(TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n return target;\r\n }\r\n return null;\r\n}\r\nfunction getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {\r\n var targets = [];\r\n for (var i = 0; i < iterations; i++) {\r\n var index = i;\r\n var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);\r\n if (target !== null) {\r\n targets.push(target);\r\n }\r\n }\r\n return targets;\r\n}\r\nfunction _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {\r\n var serviceIdentifier = (inject || multiInject);\r\n if (serviceIdentifier === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" for property \" + String(propertyName) + \" in class \" + className + \".\";\r\n throw new Error(msg);\r\n }\r\n return serviceIdentifier;\r\n}\r\nfunction getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {\r\n var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);\r\n var targets = [];\r\n var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);\r\n var stringKeys = Object.keys(classPropsMetadata);\r\n var keys = stringKeys.concat(symbolKeys);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var key = keys_1[_i];\r\n var targetMetadata = classPropsMetadata[key];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var identifier = metadata.targetName || key;\r\n var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);\r\n var target = new Target(TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n targets.push(target);\r\n }\r\n var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);\r\n targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);\r\n }\r\n return targets;\r\n}\r\nfunction getBaseClassDependencyCount(metadataReader, func) {\r\n var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseConstructorName = getFunctionName(baseConstructor);\r\n var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);\r\n var metadata = targets.map(function (t) { return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; }); });\r\n var unmanagedCount = [].concat.apply([], metadata).length;\r\n var dependencyCount = targets.length - unmanagedCount;\r\n if (dependencyCount > 0) {\r\n return dependencyCount;\r\n }\r\n else {\r\n return getBaseClassDependencyCount(metadataReader, baseConstructor);\r\n }\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nfunction formatTargetMetadata(targetMetadata) {\r\n var targetMetadataMap = {};\r\n targetMetadata.forEach(function (m) {\r\n targetMetadataMap[m.key.toString()] = m.value;\r\n });\r\n return {\r\n inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],\r\n multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],\r\n targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],\r\n unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]\r\n };\r\n}\r\nexport { getDependencies, getBaseClassDependencyCount, getFunctionName };\r\n","import { id } from '../utils/id';\r\nvar Request = (function () {\r\n function Request(serviceIdentifier, parentContext, parentRequest, bindings, target) {\r\n this.id = id();\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.parentContext = parentContext;\r\n this.parentRequest = parentRequest;\r\n this.target = target;\r\n this.childRequests = [];\r\n this.bindings = (Array.isArray(bindings) ? bindings : [bindings]);\r\n this.requestScope = parentRequest === null\r\n ? new Map()\r\n : null;\r\n }\r\n Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) {\r\n var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);\r\n this.childRequests.push(child);\r\n return child;\r\n };\r\n return Request;\r\n}());\r\nexport { Request };\r\n","import { BindingCount } from '../bindings/binding_count';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isStackOverflowExeption } from '../utils/exceptions';\r\nimport { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier } from '../utils/serialization';\r\nimport { Context } from './context';\r\nimport { Metadata } from './metadata';\r\nimport { Plan } from './plan';\r\nimport { getBaseClassDependencyCount, getDependencies, getFunctionName } from './reflection_utils';\r\nimport { Request } from './request';\r\nimport { Target } from './target';\r\nfunction getBindingDictionary(cntnr) {\r\n return cntnr._bindingDictionary;\r\n}\r\nfunction _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {\r\n var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;\r\n var injectMetadata = new Metadata(metadataKey, serviceIdentifier);\r\n var target = new Target(targetType, name, serviceIdentifier, injectMetadata);\r\n if (key !== undefined) {\r\n var tagMetadata = new Metadata(key, value);\r\n target.metadata.push(tagMetadata);\r\n }\r\n return target;\r\n}\r\nfunction _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {\r\n var bindings = getBindings(context.container, target.serviceIdentifier);\r\n var activeBindings = [];\r\n if (bindings.length === BindingCount.NoBindingsAvailable &&\r\n context.container.options.autoBindInjectable &&\r\n typeof target.serviceIdentifier === 'function' &&\r\n metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {\r\n context.container.bind(target.serviceIdentifier).toSelf();\r\n bindings = getBindings(context.container, target.serviceIdentifier);\r\n }\r\n if (!avoidConstraints) {\r\n activeBindings = bindings.filter(function (binding) {\r\n var request = new Request(binding.serviceIdentifier, context, parentRequest, binding, target);\r\n return binding.constraint(request);\r\n });\r\n }\r\n else {\r\n activeBindings = bindings;\r\n }\r\n _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);\r\n return activeBindings;\r\n}\r\nfunction _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {\r\n switch (bindings.length) {\r\n case BindingCount.NoBindingsAvailable:\r\n if (target.isOptional()) {\r\n return bindings;\r\n }\r\n else {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.NOT_REGISTERED;\r\n msg += listMetadataForTarget(serviceIdentifierString, target);\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n case BindingCount.OnlyOneBindingAvailable:\r\n return bindings;\r\n case BindingCount.MultipleBindingsAvailable:\r\n default:\r\n if (!target.isArray()) {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.AMBIGUOUS_MATCH + \" \" + serviceIdentifierString;\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n else {\r\n return bindings;\r\n }\r\n }\r\n}\r\nfunction _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {\r\n var activeBindings;\r\n var childRequest;\r\n if (parentRequest === null) {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);\r\n childRequest = new Request(serviceIdentifier, context, null, activeBindings, target);\r\n var thePlan = new Plan(context, childRequest);\r\n context.addPlan(thePlan);\r\n }\r\n else {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);\r\n childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);\r\n }\r\n activeBindings.forEach(function (binding) {\r\n var subChildRequest = null;\r\n if (target.isArray()) {\r\n subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);\r\n }\r\n else {\r\n if (binding.cache) {\r\n return;\r\n }\r\n subChildRequest = childRequest;\r\n }\r\n if (binding.type === BindingTypeEnum.Instance && binding.implementationType !== null) {\r\n var dependencies = getDependencies(metadataReader, binding.implementationType);\r\n if (!context.container.options.skipBaseClassChecks) {\r\n var baseClassDependencyCount = getBaseClassDependencyCount(metadataReader, binding.implementationType);\r\n if (dependencies.length < baseClassDependencyCount) {\r\n var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(getFunctionName(binding.implementationType));\r\n throw new Error(error);\r\n }\r\n }\r\n dependencies.forEach(function (dependency) {\r\n _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);\r\n });\r\n }\r\n });\r\n}\r\nfunction getBindings(container, serviceIdentifier) {\r\n var bindings = [];\r\n var bindingDictionary = getBindingDictionary(container);\r\n if (bindingDictionary.hasKey(serviceIdentifier)) {\r\n bindings = bindingDictionary.get(serviceIdentifier);\r\n }\r\n else if (container.parent !== null) {\r\n bindings = getBindings(container.parent, serviceIdentifier);\r\n }\r\n return bindings;\r\n}\r\nfunction plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {\r\n if (avoidConstraints === void 0) { avoidConstraints = false; }\r\n var context = new Context(container);\r\n var target = _createTarget(isMultiInject, targetType, serviceIdentifier, '', key, value);\r\n try {\r\n _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);\r\n return context;\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n circularDependencyToException(context.plan.rootRequest);\r\n }\r\n throw error;\r\n }\r\n}\r\nfunction createMockRequest(container, serviceIdentifier, key, value) {\r\n var target = new Target(TargetTypeEnum.Variable, '', serviceIdentifier, new Metadata(key, value));\r\n var context = new Context(container);\r\n var request = new Request(serviceIdentifier, context, null, [], target);\r\n return request;\r\n}\r\nexport { plan, createMockRequest, getBindingDictionary };\r\n","function isPromise(object) {\r\n var isObjectOrFunction = (typeof object === 'object' && object !== null) || typeof object === 'function';\r\n return isObjectOrFunction && typeof object.then === \"function\";\r\n}\r\nfunction isPromiseOrContainsPromise(object) {\r\n if (isPromise(object)) {\r\n return true;\r\n }\r\n return Array.isArray(object) && object.some(isPromise);\r\n}\r\nexport { isPromise, isPromiseOrContainsPromise };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { BindingScopeEnum } from '../constants/literal_types';\r\nimport { isPromise } from '../utils/async';\r\nexport var tryGetFromScope = function (requestScope, binding) {\r\n if ((binding.scope === BindingScopeEnum.Singleton) && binding.activated) {\r\n return binding.cache;\r\n }\r\n if (binding.scope === BindingScopeEnum.Request &&\r\n requestScope.has(binding.id)) {\r\n return requestScope.get(binding.id);\r\n }\r\n return null;\r\n};\r\nexport var saveToScope = function (requestScope, binding, result) {\r\n if (binding.scope === BindingScopeEnum.Singleton) {\r\n _saveToSingletonScope(binding, result);\r\n }\r\n if (binding.scope === BindingScopeEnum.Request) {\r\n _saveToRequestScope(requestScope, binding, result);\r\n }\r\n};\r\nvar _saveToRequestScope = function (requestScope, binding, result) {\r\n if (!requestScope.has(binding.id)) {\r\n requestScope.set(binding.id, result);\r\n }\r\n};\r\nvar _saveToSingletonScope = function (binding, result) {\r\n binding.cache = result;\r\n binding.activated = true;\r\n if (isPromise(result)) {\r\n void _saveAsyncResultToSingletonScope(binding, result);\r\n }\r\n};\r\nvar _saveAsyncResultToSingletonScope = function (binding, asyncResult) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n result = _a.sent();\r\n binding.cache = result;\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n binding.cache = null;\r\n binding.activated = false;\r\n throw ex_1;\r\n case 3: return [2];\r\n }\r\n });\r\n}); };\r\n","export var FactoryType;\r\n(function (FactoryType) {\r\n FactoryType[\"DynamicValue\"] = \"toDynamicValue\";\r\n FactoryType[\"Factory\"] = \"toFactory\";\r\n FactoryType[\"Provider\"] = \"toProvider\";\r\n})(FactoryType || (FactoryType = {}));\r\n","import { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { FactoryType } from './factory_type';\r\nexport var multiBindToService = function (container) {\r\n return function (service) {\r\n return function () {\r\n var types = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n types[_i] = arguments[_i];\r\n }\r\n return types.forEach(function (t) { return container.bind(t).toService(service); });\r\n };\r\n };\r\n};\r\nexport var ensureFullyBound = function (binding) {\r\n var boundValue = null;\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n boundValue = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n case BindingTypeEnum.Instance:\r\n boundValue = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.DynamicValue:\r\n boundValue = binding.dynamicValue;\r\n break;\r\n case BindingTypeEnum.Provider:\r\n boundValue = binding.provider;\r\n break;\r\n case BindingTypeEnum.Factory:\r\n boundValue = binding.factory;\r\n break;\r\n }\r\n if (boundValue === null) {\r\n var serviceIdentifierAsString = getServiceIdentifierAsString(binding.serviceIdentifier);\r\n throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + \" \" + serviceIdentifierAsString);\r\n }\r\n};\r\nexport var getFactoryDetails = function (binding) {\r\n switch (binding.type) {\r\n case BindingTypeEnum.Factory:\r\n return { factory: binding.factory, factoryType: FactoryType.Factory };\r\n case BindingTypeEnum.Provider:\r\n return { factory: binding.provider, factoryType: FactoryType.Provider };\r\n case BindingTypeEnum.DynamicValue:\r\n return { factory: binding.dynamicValue, factoryType: FactoryType.DynamicValue };\r\n default:\r\n throw new Error(\"Unexpected factory type \" + binding.type);\r\n }\r\n};\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR } from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nfunction _resolveRequests(childRequests, resolveRequest) {\r\n return childRequests.reduce(function (resolvedRequests, childRequest) {\r\n var injection = resolveRequest(childRequest);\r\n var targetType = childRequest.target.type;\r\n if (targetType === TargetTypeEnum.ConstructorArgument) {\r\n resolvedRequests.constructorInjections.push(injection);\r\n }\r\n else {\r\n resolvedRequests.propertyRequests.push(childRequest);\r\n resolvedRequests.propertyInjections.push(injection);\r\n }\r\n if (!resolvedRequests.isAsync) {\r\n resolvedRequests.isAsync = isPromiseOrContainsPromise(injection);\r\n }\r\n return resolvedRequests;\r\n }, { constructorInjections: [], propertyInjections: [], propertyRequests: [], isAsync: false });\r\n}\r\nfunction _createInstance(constr, childRequests, resolveRequest) {\r\n var result;\r\n if (childRequests.length > 0) {\r\n var resolved = _resolveRequests(childRequests, resolveRequest);\r\n var createInstanceWithInjectionsArg = __assign(__assign({}, resolved), { constr: constr });\r\n if (resolved.isAsync) {\r\n result = createInstanceWithInjectionsAsync(createInstanceWithInjectionsArg);\r\n }\r\n else {\r\n result = createInstanceWithInjections(createInstanceWithInjectionsArg);\r\n }\r\n }\r\n else {\r\n result = new constr();\r\n }\r\n return result;\r\n}\r\nfunction createInstanceWithInjections(args) {\r\n var _a;\r\n var instance = new ((_a = args.constr).bind.apply(_a, __spreadArray([void 0], args.constructorInjections, false)))();\r\n args.propertyRequests.forEach(function (r, index) {\r\n var property = r.target.identifier;\r\n var injection = args.propertyInjections[index];\r\n if (!r.target.isOptional() || injection !== undefined) {\r\n instance[property] = injection;\r\n }\r\n });\r\n return instance;\r\n}\r\nfunction createInstanceWithInjectionsAsync(args) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var constructorInjections, propertyInjections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, possiblyWaitInjections(args.constructorInjections)];\r\n case 1:\r\n constructorInjections = _a.sent();\r\n return [4, possiblyWaitInjections(args.propertyInjections)];\r\n case 2:\r\n propertyInjections = _a.sent();\r\n return [2, createInstanceWithInjections(__assign(__assign({}, args), { constructorInjections: constructorInjections, propertyInjections: propertyInjections }))];\r\n }\r\n });\r\n });\r\n}\r\nfunction possiblyWaitInjections(possiblePromiseinjections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var injections, _i, possiblePromiseinjections_1, injection;\r\n return __generator(this, function (_a) {\r\n injections = [];\r\n for (_i = 0, possiblePromiseinjections_1 = possiblePromiseinjections; _i < possiblePromiseinjections_1.length; _i++) {\r\n injection = possiblePromiseinjections_1[_i];\r\n if (Array.isArray(injection)) {\r\n injections.push(Promise.all(injection));\r\n }\r\n else {\r\n injections.push(injection);\r\n }\r\n }\r\n return [2, Promise.all(injections)];\r\n });\r\n });\r\n}\r\nfunction _getInstanceAfterPostConstruct(constr, result) {\r\n var postConstructResult = _postConstruct(constr, result);\r\n if (isPromise(postConstructResult)) {\r\n return postConstructResult.then(function () { return result; });\r\n }\r\n else {\r\n return result;\r\n }\r\n}\r\nfunction _postConstruct(constr, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr);\r\n try {\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error(POST_CONSTRUCT_ERROR(constr.name, e.message));\r\n }\r\n }\r\n }\r\n}\r\nfunction _validateInstanceResolution(binding, constr) {\r\n if (binding.scope !== BindingScopeEnum.Singleton) {\r\n _throwIfHandlingDeactivation(binding, constr);\r\n }\r\n}\r\nfunction _throwIfHandlingDeactivation(binding, constr) {\r\n var scopeErrorMessage = \"Class cannot be instantiated in \" + (binding.scope === BindingScopeEnum.Request ?\r\n 'request' :\r\n 'transient') + \" scope.\";\r\n if (typeof binding.onDeactivation === 'function') {\r\n throw new Error(ON_DEACTIVATION_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constr)) {\r\n throw new Error(PRE_DESTROY_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n}\r\nfunction resolveInstance(binding, constr, childRequests, resolveRequest) {\r\n _validateInstanceResolution(binding, constr);\r\n var result = _createInstance(constr, childRequests, resolveRequest);\r\n if (isPromise(result)) {\r\n return result.then(function (resolvedResult) { return _getInstanceAfterPostConstruct(constr, resolvedResult); });\r\n }\r\n else {\r\n return _getInstanceAfterPostConstruct(constr, result);\r\n }\r\n}\r\nexport { resolveInstance };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { getBindingDictionary } from '../planning/planner';\r\nimport { saveToScope, tryGetFromScope } from '../scope/scope';\r\nimport { isPromise } from '../utils/async';\r\nimport { getFactoryDetails, ensureFullyBound } from '../utils/binding_utils';\r\nimport { tryAndThrowErrorIfStackOverflow } from '../utils/exceptions';\r\nimport { resolveInstance } from './instantiation';\r\nvar _resolveRequest = function (requestScope) {\r\n return function (request) {\r\n request.parentContext.setCurrentRequest(request);\r\n var bindings = request.bindings;\r\n var childRequests = request.childRequests;\r\n var targetIsAnArray = request.target && request.target.isArray();\r\n var targetParentIsNotAnArray = !request.parentRequest ||\r\n !request.parentRequest.target ||\r\n !request.target ||\r\n !request.parentRequest.target.matchesArray(request.target.serviceIdentifier);\r\n if (targetIsAnArray && targetParentIsNotAnArray) {\r\n return childRequests.map(function (childRequest) {\r\n var _f = _resolveRequest(requestScope);\r\n return _f(childRequest);\r\n });\r\n }\r\n else {\r\n if (request.target.isOptional() && bindings.length === 0) {\r\n return undefined;\r\n }\r\n var binding = bindings[0];\r\n return _resolveBinding(requestScope, request, binding);\r\n }\r\n };\r\n};\r\nvar _resolveFactoryFromBinding = function (binding, context) {\r\n var factoryDetails = getFactoryDetails(binding);\r\n return tryAndThrowErrorIfStackOverflow(function () { return factoryDetails.factory.bind(binding)(context); }, function () { return new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryDetails.factoryType, context.currentRequest.serviceIdentifier.toString())); });\r\n};\r\nvar _getResolvedFromBinding = function (requestScope, request, binding) {\r\n var result;\r\n var childRequests = request.childRequests;\r\n ensureFullyBound(binding);\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n result = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n result = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.Instance:\r\n result = resolveInstance(binding, binding.implementationType, childRequests, _resolveRequest(requestScope));\r\n break;\r\n default:\r\n result = _resolveFactoryFromBinding(binding, request.parentContext);\r\n }\r\n return result;\r\n};\r\nvar _resolveInScope = function (requestScope, binding, resolveFromBinding) {\r\n var result = tryGetFromScope(requestScope, binding);\r\n if (result !== null) {\r\n return result;\r\n }\r\n result = resolveFromBinding();\r\n saveToScope(requestScope, binding, result);\r\n return result;\r\n};\r\nvar _resolveBinding = function (requestScope, request, binding) {\r\n return _resolveInScope(requestScope, binding, function () {\r\n var result = _getResolvedFromBinding(requestScope, request, binding);\r\n if (isPromise(result)) {\r\n result = result.then(function (resolved) { return _onActivation(request, binding, resolved); });\r\n }\r\n else {\r\n result = _onActivation(request, binding, result);\r\n }\r\n return result;\r\n });\r\n};\r\nfunction _onActivation(request, binding, resolved) {\r\n var result = _bindingActivation(request.parentContext, binding, resolved);\r\n var containersIterator = _getContainersIterator(request.parentContext.container);\r\n var container;\r\n var containersIteratorResult = containersIterator.next();\r\n do {\r\n container = containersIteratorResult.value;\r\n var context_1 = request.parentContext;\r\n var serviceIdentifier = request.serviceIdentifier;\r\n var activationsIterator = _getContainerActivationsForService(container, serviceIdentifier);\r\n if (isPromise(result)) {\r\n result = _activateContainerAsync(activationsIterator, context_1, result);\r\n }\r\n else {\r\n result = _activateContainer(activationsIterator, context_1, result);\r\n }\r\n containersIteratorResult = containersIterator.next();\r\n } while (containersIteratorResult.done !== true && !getBindingDictionary(container).hasKey(request.serviceIdentifier));\r\n return result;\r\n}\r\nvar _bindingActivation = function (context, binding, previousResult) {\r\n var result;\r\n if (typeof binding.onActivation === 'function') {\r\n result = binding.onActivation(context, previousResult);\r\n }\r\n else {\r\n result = previousResult;\r\n }\r\n return result;\r\n};\r\nvar _activateContainer = function (activationsIterator, context, result) {\r\n var activation = activationsIterator.next();\r\n while (!activation.done) {\r\n result = activation.value(context, result);\r\n if (isPromise(result)) {\r\n return _activateContainerAsync(activationsIterator, context, result);\r\n }\r\n activation = activationsIterator.next();\r\n }\r\n return result;\r\n};\r\nvar _activateContainerAsync = function (activationsIterator, context, resultPromise) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, activation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, resultPromise];\r\n case 1:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n _a.label = 2;\r\n case 2:\r\n if (!!activation.done) return [3, 4];\r\n return [4, activation.value(context, result)];\r\n case 3:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n return [3, 2];\r\n case 4: return [2, result];\r\n }\r\n });\r\n}); };\r\nvar _getContainerActivationsForService = function (container, serviceIdentifier) {\r\n var activations = container._activations;\r\n return activations.hasKey(serviceIdentifier) ? activations.get(serviceIdentifier).values() : [].values();\r\n};\r\nvar _getContainersIterator = function (container) {\r\n var containersStack = [container];\r\n var parent = container.parent;\r\n while (parent !== null) {\r\n containersStack.push(parent);\r\n parent = parent.parent;\r\n }\r\n var getNextContainer = function () {\r\n var nextContainer = containersStack.pop();\r\n if (nextContainer !== undefined) {\r\n return { done: false, value: nextContainer };\r\n }\r\n else {\r\n return { done: true, value: undefined };\r\n }\r\n };\r\n var containersIterator = {\r\n next: getNextContainer,\r\n };\r\n return containersIterator;\r\n};\r\nfunction resolve(context) {\r\n var _f = _resolveRequest(context.plan.rootRequest.requestScope);\r\n return _f(context.plan.rootRequest);\r\n}\r\nexport { resolve };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { Metadata } from '../planning/metadata';\r\nvar traverseAncerstors = function (request, constraint) {\r\n var parent = request.parentRequest;\r\n if (parent !== null) {\r\n return constraint(parent) ? true : traverseAncerstors(parent, constraint);\r\n }\r\n else {\r\n return false;\r\n }\r\n};\r\nvar taggedConstraint = function (key) { return function (value) {\r\n var constraint = function (request) {\r\n return request !== null && request.target !== null && request.target.matchesTag(key)(value);\r\n };\r\n constraint.metaData = new Metadata(key, value);\r\n return constraint;\r\n}; };\r\nvar namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG);\r\nvar typeConstraint = function (type) { return function (request) {\r\n var binding = null;\r\n if (request !== null) {\r\n binding = request.bindings[0];\r\n if (typeof type === 'string') {\r\n var serviceIdentifier = binding.serviceIdentifier;\r\n return serviceIdentifier === type;\r\n }\r\n else {\r\n var constructor = request.bindings[0].implementationType;\r\n return type === constructor;\r\n }\r\n }\r\n return false;\r\n}; };\r\nexport { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { namedConstraint, taggedConstraint, traverseAncerstors, typeConstraint } from './constraint_helpers';\r\nvar BindingWhenSyntax = (function () {\r\n function BindingWhenSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingWhenSyntax.prototype.when = function (constraint) {\r\n this._binding.constraint = constraint;\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetNamed = function (name) {\r\n this._binding.constraint = namedConstraint(name);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetIsDefault = function () {\r\n this._binding.constraint = function (request) {\r\n if (request === null) {\r\n return false;\r\n }\r\n var targetIsDefault = (request.target !== null) &&\r\n (!request.target.isNamed()) &&\r\n (!request.target.isTagged());\r\n return targetIsDefault;\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n this._binding.constraint = taggedConstraint(tag)(value);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenInjectedInto = function (parent) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && typeConstraint(parent)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && namedConstraint(name)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && taggedConstraint(tag)(value)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n return BindingWhenSyntax;\r\n}());\r\nexport { BindingWhenSyntax };\r\n","import { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingOnSyntax = (function () {\r\n function BindingOnSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingOnSyntax.prototype.onActivation = function (handler) {\r\n this._binding.onActivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n BindingOnSyntax.prototype.onDeactivation = function (handler) {\r\n this._binding.onDeactivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n return BindingOnSyntax;\r\n}());\r\nexport { BindingOnSyntax };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingWhenOnSyntax = (function () {\r\n function BindingWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n }\r\n BindingWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingWhenOnSyntax;\r\n}());\r\nexport { BindingWhenOnSyntax };\r\n","import { BindingScopeEnum } from '../constants/literal_types';\r\nimport { BindingWhenOnSyntax } from './binding_when_on_syntax';\r\nvar BindingInSyntax = (function () {\r\n function BindingInSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingInSyntax.prototype.inRequestScope = function () {\r\n this._binding.scope = BindingScopeEnum.Request;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inSingletonScope = function () {\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inTransientScope = function () {\r\n this._binding.scope = BindingScopeEnum.Transient;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n return BindingInSyntax;\r\n}());\r\nexport { BindingInSyntax };\r\n","import { BindingInSyntax } from './binding_in_syntax';\r\nimport { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingInWhenOnSyntax = (function () {\r\n function BindingInWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n this._bindingInSyntax = new BindingInSyntax(binding);\r\n }\r\n BindingInWhenOnSyntax.prototype.inRequestScope = function () {\r\n return this._bindingInSyntax.inRequestScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inSingletonScope = function () {\r\n return this._bindingInSyntax.inSingletonScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inTransientScope = function () {\r\n return this._bindingInSyntax.inTransientScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingInWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingInWhenOnSyntax;\r\n}());\r\nexport { BindingInWhenOnSyntax };\r\n","import * as ERROR_MSGS from \"../constants/error_msgs\";\r\nimport { BindingScopeEnum, BindingTypeEnum } from \"../constants/literal_types\";\r\nimport { BindingInWhenOnSyntax } from \"./binding_in_when_on_syntax\";\r\nimport { BindingWhenOnSyntax } from \"./binding_when_on_syntax\";\r\nvar BindingToSyntax = (function () {\r\n function BindingToSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingToSyntax.prototype.to = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Instance;\r\n this._binding.implementationType = constructor;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toSelf = function () {\r\n if (typeof this._binding.serviceIdentifier !== \"function\") {\r\n throw new Error(\"\" + ERROR_MSGS.INVALID_TO_SELF_VALUE);\r\n }\r\n var self = this._binding.serviceIdentifier;\r\n return this.to(self);\r\n };\r\n BindingToSyntax.prototype.toConstantValue = function (value) {\r\n this._binding.type = BindingTypeEnum.ConstantValue;\r\n this._binding.cache = value;\r\n this._binding.dynamicValue = null;\r\n this._binding.implementationType = null;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toDynamicValue = function (func) {\r\n this._binding.type = BindingTypeEnum.DynamicValue;\r\n this._binding.cache = null;\r\n this._binding.dynamicValue = func;\r\n this._binding.implementationType = null;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toConstructor = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Constructor;\r\n this._binding.implementationType = constructor;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFactory = function (factory) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = factory;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFunction = function (func) {\r\n if (typeof func !== \"function\") {\r\n throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);\r\n }\r\n var bindingWhenOnSyntax = this.toConstantValue(func);\r\n this._binding.type = BindingTypeEnum.Function;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return bindingWhenOnSyntax;\r\n };\r\n BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n var autofactory = function () { return context.container.get(serviceIdentifier); };\r\n return autofactory;\r\n };\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toAutoNamedFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n return function (named) { return context.container.getNamed(serviceIdentifier, named); };\r\n };\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toProvider = function (provider) {\r\n this._binding.type = BindingTypeEnum.Provider;\r\n this._binding.provider = provider;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toService = function (service) {\r\n this.toDynamicValue(function (context) { return context.container.get(service); });\r\n };\r\n return BindingToSyntax;\r\n}());\r\nexport { BindingToSyntax };\r\n","var ContainerSnapshot = (function () {\r\n function ContainerSnapshot() {\r\n }\r\n ContainerSnapshot.of = function (bindings, middleware, activations, deactivations, moduleActivationStore) {\r\n var snapshot = new ContainerSnapshot();\r\n snapshot.bindings = bindings;\r\n snapshot.middleware = middleware;\r\n snapshot.deactivations = deactivations;\r\n snapshot.activations = activations;\r\n snapshot.moduleActivationStore = moduleActivationStore;\r\n return snapshot;\r\n };\r\n return ContainerSnapshot;\r\n}());\r\nexport { ContainerSnapshot };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { isClonable } from '../utils/clonable';\r\nvar Lookup = (function () {\r\n function Lookup() {\r\n this._map = new Map();\r\n }\r\n Lookup.prototype.getMap = function () {\r\n return this._map;\r\n };\r\n Lookup.prototype.add = function (serviceIdentifier, value) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (value === null || value === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n entry.push(value);\r\n }\r\n else {\r\n this._map.set(serviceIdentifier, [value]);\r\n }\r\n };\r\n Lookup.prototype.get = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n return entry;\r\n }\r\n else {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.remove = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (!this._map.delete(serviceIdentifier)) {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.removeIntersection = function (lookup) {\r\n var _this = this;\r\n this.traverse(function (serviceIdentifier, value) {\r\n var lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;\r\n if (lookupActivations !== undefined) {\r\n var filteredValues = value.filter(function (lookupValue) {\r\n return !lookupActivations.some(function (moduleActivation) { return lookupValue === moduleActivation; });\r\n });\r\n _this._setValue(serviceIdentifier, filteredValues);\r\n }\r\n });\r\n };\r\n Lookup.prototype.removeByCondition = function (condition) {\r\n var _this = this;\r\n var removals = [];\r\n this._map.forEach(function (entries, key) {\r\n var updatedEntries = [];\r\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n var entry = entries_1[_i];\r\n var remove = condition(entry);\r\n if (remove) {\r\n removals.push(entry);\r\n }\r\n else {\r\n updatedEntries.push(entry);\r\n }\r\n }\r\n _this._setValue(key, updatedEntries);\r\n });\r\n return removals;\r\n };\r\n Lookup.prototype.hasKey = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n return this._map.has(serviceIdentifier);\r\n };\r\n Lookup.prototype.clone = function () {\r\n var copy = new Lookup();\r\n this._map.forEach(function (value, key) {\r\n value.forEach(function (b) { return copy.add(key, isClonable(b) ? b.clone() : b); });\r\n });\r\n return copy;\r\n };\r\n Lookup.prototype.traverse = function (func) {\r\n this._map.forEach(function (value, key) {\r\n func(key, value);\r\n });\r\n };\r\n Lookup.prototype._setValue = function (serviceIdentifier, value) {\r\n if (value.length > 0) {\r\n this._map.set(serviceIdentifier, value);\r\n }\r\n else {\r\n this._map.delete(serviceIdentifier);\r\n }\r\n };\r\n return Lookup;\r\n}());\r\nexport { Lookup };\r\n","function isClonable(obj) {\r\n return (typeof obj === 'object')\r\n && (obj !== null)\r\n && ('clone' in obj)\r\n && typeof obj.clone === 'function';\r\n}\r\nexport { isClonable };\r\n","import { Lookup } from './lookup';\r\nvar ModuleActivationStore = (function () {\r\n function ModuleActivationStore() {\r\n this._map = new Map();\r\n }\r\n ModuleActivationStore.prototype.remove = function (moduleId) {\r\n if (this._map.has(moduleId)) {\r\n var handlers = this._map.get(moduleId);\r\n this._map.delete(moduleId);\r\n return handlers;\r\n }\r\n return this._getEmptyHandlersStore();\r\n };\r\n ModuleActivationStore.prototype.addDeactivation = function (moduleId, serviceIdentifier, onDeactivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onDeactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n ModuleActivationStore.prototype.addActivation = function (moduleId, serviceIdentifier, onActivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onActivations.add(serviceIdentifier, onActivation);\r\n };\r\n ModuleActivationStore.prototype.clone = function () {\r\n var clone = new ModuleActivationStore();\r\n this._map.forEach(function (handlersStore, moduleId) {\r\n clone._map.set(moduleId, {\r\n onActivations: handlersStore.onActivations.clone(),\r\n onDeactivations: handlersStore.onDeactivations.clone(),\r\n });\r\n });\r\n return clone;\r\n };\r\n ModuleActivationStore.prototype._getModuleActivationHandlers = function (moduleId) {\r\n var moduleActivationHandlers = this._map.get(moduleId);\r\n if (moduleActivationHandlers === undefined) {\r\n moduleActivationHandlers = this._getEmptyHandlersStore();\r\n this._map.set(moduleId, moduleActivationHandlers);\r\n }\r\n return moduleActivationHandlers;\r\n };\r\n ModuleActivationStore.prototype._getEmptyHandlersStore = function () {\r\n var handlersStore = {\r\n onActivations: new Lookup(),\r\n onDeactivations: new Lookup()\r\n };\r\n return handlersStore;\r\n };\r\n return ModuleActivationStore;\r\n}());\r\nexport { ModuleActivationStore };\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { Binding } from '../bindings/binding';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { MetadataReader } from '../planning/metadata_reader';\r\nimport { createMockRequest, getBindingDictionary, plan } from '../planning/planner';\r\nimport { resolve } from '../resolution/resolver';\r\nimport { BindingToSyntax } from '../syntax/binding_to_syntax';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nimport { id } from '../utils/id';\r\nimport { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport { ContainerSnapshot } from './container_snapshot';\r\nimport { Lookup } from './lookup';\r\nimport { ModuleActivationStore } from './module_activation_store';\r\nvar Container = (function () {\r\n function Container(containerOptions) {\r\n var options = containerOptions || {};\r\n if (typeof options !== 'object') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);\r\n }\r\n if (options.defaultScope === undefined) {\r\n options.defaultScope = BindingScopeEnum.Transient;\r\n }\r\n else if (options.defaultScope !== BindingScopeEnum.Singleton &&\r\n options.defaultScope !== BindingScopeEnum.Transient &&\r\n options.defaultScope !== BindingScopeEnum.Request) {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);\r\n }\r\n if (options.autoBindInjectable === undefined) {\r\n options.autoBindInjectable = false;\r\n }\r\n else if (typeof options.autoBindInjectable !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);\r\n }\r\n if (options.skipBaseClassChecks === undefined) {\r\n options.skipBaseClassChecks = false;\r\n }\r\n else if (typeof options.skipBaseClassChecks !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);\r\n }\r\n this.options = {\r\n autoBindInjectable: options.autoBindInjectable,\r\n defaultScope: options.defaultScope,\r\n skipBaseClassChecks: options.skipBaseClassChecks\r\n };\r\n this.id = id();\r\n this._bindingDictionary = new Lookup();\r\n this._snapshots = [];\r\n this._middleware = null;\r\n this._activations = new Lookup();\r\n this._deactivations = new Lookup();\r\n this.parent = null;\r\n this._metadataReader = new MetadataReader();\r\n this._moduleActivationStore = new ModuleActivationStore();\r\n }\r\n Container.merge = function (container1, container2) {\r\n var containers = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n containers[_i - 2] = arguments[_i];\r\n }\r\n var container = new Container();\r\n var targetContainers = __spreadArray([container1, container2], containers, true).map(function (targetContainer) { return getBindingDictionary(targetContainer); });\r\n var bindingDictionary = getBindingDictionary(container);\r\n function copyDictionary(origin, destination) {\r\n origin.traverse(function (_key, value) {\r\n value.forEach(function (binding) {\r\n destination.add(binding.serviceIdentifier, binding.clone());\r\n });\r\n });\r\n }\r\n targetContainers.forEach(function (targetBindingDictionary) {\r\n copyDictionary(targetBindingDictionary, bindingDictionary);\r\n });\r\n return container;\r\n };\r\n Container.prototype.load = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n var getHelpers = this._getContainerModuleHelpersFactory();\r\n for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {\r\n var currentModule = modules_1[_a];\r\n var containerModuleHelpers = getHelpers(currentModule.id);\r\n currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);\r\n }\r\n };\r\n Container.prototype.loadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n getHelpers = this._getContainerModuleHelpersFactory();\r\n _a = 0, modules_2 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_2.length)) return [3, 4];\r\n currentModule = modules_2[_a];\r\n containerModuleHelpers = getHelpers(currentModule.id);\r\n return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unload = function () {\r\n var _this = this;\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n modules.forEach(function (module) {\r\n var deactivations = _this._removeModuleBindings(module.id);\r\n _this._deactivateSingletons(deactivations);\r\n _this._removeModuleHandlers(module.id);\r\n });\r\n };\r\n Container.prototype.unloadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, modules_3, module_1, deactivations;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = 0, modules_3 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_3.length)) return [3, 4];\r\n module_1 = modules_3[_a];\r\n deactivations = this._removeModuleBindings(module_1.id);\r\n return [4, this._deactivateSingletonsAsync(deactivations)];\r\n case 2:\r\n _b.sent();\r\n this._removeModuleHandlers(module_1.id);\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.bind = function (serviceIdentifier) {\r\n var scope = this.options.defaultScope || BindingScopeEnum.Transient;\r\n var binding = new Binding(serviceIdentifier, scope);\r\n this._bindingDictionary.add(serviceIdentifier, binding);\r\n return new BindingToSyntax(binding);\r\n };\r\n Container.prototype.rebind = function (serviceIdentifier) {\r\n this.unbind(serviceIdentifier);\r\n return this.bind(serviceIdentifier);\r\n };\r\n Container.prototype.rebindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, this.unbindAsync(serviceIdentifier)];\r\n case 1:\r\n _a.sent();\r\n return [2, this.bind(serviceIdentifier)];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbind = function (serviceIdentifier) {\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n this._deactivateSingletons(bindings);\r\n }\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n };\r\n Container.prototype.unbindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var bindings;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];\r\n bindings = this._bindingDictionary.get(serviceIdentifier);\r\n return [4, this._deactivateSingletonsAsync(bindings)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbindAll = function () {\r\n var _this = this;\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n _this._deactivateSingletons(value);\r\n });\r\n this._bindingDictionary = new Lookup();\r\n };\r\n Container.prototype.unbindAllAsync = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var promises;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n promises = [];\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n promises.push(_this._deactivateSingletonsAsync(value));\r\n });\r\n return [4, Promise.all(promises)];\r\n case 1:\r\n _a.sent();\r\n this._bindingDictionary = new Lookup();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.onActivation = function (serviceIdentifier, onActivation) {\r\n this._activations.add(serviceIdentifier, onActivation);\r\n };\r\n Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {\r\n this._deactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n Container.prototype.isBound = function (serviceIdentifier) {\r\n var bound = this._bindingDictionary.hasKey(serviceIdentifier);\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBound(serviceIdentifier);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.isCurrentBound = function (serviceIdentifier) {\r\n return this._bindingDictionary.hasKey(serviceIdentifier);\r\n };\r\n Container.prototype.isBoundNamed = function (serviceIdentifier, named) {\r\n return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {\r\n var bound = false;\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n var request_1 = createMockRequest(this, serviceIdentifier, key, value);\r\n bound = bindings.some(function (b) { return b.constraint(request_1); });\r\n }\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBoundTagged(serviceIdentifier, key, value);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.snapshot = function () {\r\n this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));\r\n };\r\n Container.prototype.restore = function () {\r\n var snapshot = this._snapshots.pop();\r\n if (snapshot === undefined) {\r\n throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);\r\n }\r\n this._bindingDictionary = snapshot.bindings;\r\n this._activations = snapshot.activations;\r\n this._deactivations = snapshot.deactivations;\r\n this._middleware = snapshot.middleware;\r\n this._moduleActivationStore = snapshot.moduleActivationStore;\r\n };\r\n Container.prototype.createChild = function (containerOptions) {\r\n var child = new Container(containerOptions || this.options);\r\n child.parent = this;\r\n return child;\r\n };\r\n Container.prototype.applyMiddleware = function () {\r\n var middlewares = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n middlewares[_i] = arguments[_i];\r\n }\r\n var initial = (this._middleware) ? this._middleware : this._planAndResolve();\r\n this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);\r\n };\r\n Container.prototype.applyCustomMetadataReader = function (metadataReader) {\r\n this._metadataReader = metadataReader;\r\n };\r\n Container.prototype.get = function (serviceIdentifier) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getNamed = function (serviceIdentifier, named) {\r\n return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getNamedAsync = function (serviceIdentifier, named) {\r\n return this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAll = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllAsync = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllNamed = function (serviceIdentifier, named) {\r\n return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {\r\n return this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.resolve = function (constructorFunction) {\r\n var isBound = this.isBound(constructorFunction);\r\n if (!isBound) {\r\n this.bind(constructorFunction).toSelf();\r\n }\r\n var resolved = this.get(constructorFunction);\r\n if (!isBound) {\r\n this.unbind(constructorFunction);\r\n }\r\n return resolved;\r\n };\r\n Container.prototype._preDestroy = function (constructor, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n };\r\n Container.prototype._removeModuleHandlers = function (moduleId) {\r\n var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);\r\n this._activations.removeIntersection(moduleActivationsHandlers.onActivations);\r\n this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);\r\n };\r\n Container.prototype._removeModuleBindings = function (moduleId) {\r\n return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });\r\n };\r\n Container.prototype._deactivate = function (binding, instance) {\r\n var _this = this;\r\n var constructor = Object.getPrototypeOf(instance).constructor;\r\n try {\r\n if (this._deactivations.hasKey(binding.serviceIdentifier)) {\r\n var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());\r\n if (isPromise(result)) {\r\n return this._handleDeactivationError(result.then(function () { return _this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor); }), constructor);\r\n }\r\n }\r\n var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);\r\n if (isPromise(propagateDeactivationResult)) {\r\n return this._handleDeactivationError(propagateDeactivationResult, constructor);\r\n }\r\n }\r\n catch (ex) {\r\n if (ex instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));\r\n }\r\n }\r\n };\r\n Container.prototype._handleDeactivationError = function (asyncResult, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n _a.sent();\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n if (ex_1 instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));\r\n }\r\n return [3, 3];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {\r\n var _this = this;\r\n var deactivation = deactivationsIterator.next();\r\n while (deactivation.value) {\r\n var result = deactivation.value(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () {\r\n return _this._deactivateContainerAsync(instance, deactivationsIterator);\r\n });\r\n }\r\n deactivation = deactivationsIterator.next();\r\n }\r\n };\r\n Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var deactivation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n deactivation = deactivationsIterator.next();\r\n _a.label = 1;\r\n case 1:\r\n if (!deactivation.value) return [3, 3];\r\n return [4, deactivation.value(instance)];\r\n case 2:\r\n _a.sent();\r\n deactivation = deactivationsIterator.next();\r\n return [3, 1];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._getContainerModuleHelpersFactory = function () {\r\n var _this = this;\r\n var setModuleId = function (bindingToSyntax, moduleId) {\r\n bindingToSyntax._binding.moduleId = moduleId;\r\n };\r\n var getBindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.bind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getUnbindFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbind(serviceIdentifier);\r\n };\r\n };\r\n var getUnbindAsyncFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbindAsync(serviceIdentifier);\r\n };\r\n };\r\n var getIsboundFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.isBound(serviceIdentifier);\r\n };\r\n };\r\n var getRebindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.rebind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getOnActivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onActivation) {\r\n _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);\r\n _this.onActivation(serviceIdentifier, onActivation);\r\n };\r\n };\r\n var getOnDeactivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onDeactivation) {\r\n _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);\r\n _this.onDeactivation(serviceIdentifier, onDeactivation);\r\n };\r\n };\r\n return function (mId) { return ({\r\n bindFunction: getBindFunction(mId),\r\n isboundFunction: getIsboundFunction(),\r\n onActivationFunction: getOnActivationFunction(mId),\r\n onDeactivationFunction: getOnDeactivationFunction(mId),\r\n rebindFunction: getRebindFunction(mId),\r\n unbindFunction: getUnbindFunction(),\r\n unbindAsyncFunction: getUnbindAsyncFunction()\r\n }); };\r\n };\r\n Container.prototype._getAll = function (getArgs) {\r\n return Promise.all(this._get(getArgs));\r\n };\r\n Container.prototype._get = function (getArgs) {\r\n var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });\r\n if (this._middleware) {\r\n var middlewareResult = this._middleware(planAndResolveArgs);\r\n if (middlewareResult === undefined || middlewareResult === null) {\r\n throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);\r\n }\r\n return middlewareResult;\r\n }\r\n return this._planAndResolve()(planAndResolveArgs);\r\n };\r\n Container.prototype._getButThrowIfAsync = function (getArgs) {\r\n var result = this._get(getArgs);\r\n if (isPromiseOrContainsPromise(result)) {\r\n throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));\r\n }\r\n return result;\r\n };\r\n Container.prototype._getAllArgs = function (serviceIdentifier) {\r\n var getAllArgs = {\r\n avoidConstraints: true,\r\n isMultiInject: true,\r\n serviceIdentifier: serviceIdentifier,\r\n };\r\n return getAllArgs;\r\n };\r\n Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {\r\n var getNotAllArgs = {\r\n avoidConstraints: false,\r\n isMultiInject: isMultiInject,\r\n serviceIdentifier: serviceIdentifier,\r\n key: key,\r\n value: value,\r\n };\r\n return getNotAllArgs;\r\n };\r\n Container.prototype._planAndResolve = function () {\r\n var _this = this;\r\n return function (args) {\r\n var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);\r\n context = args.contextInterceptor(context);\r\n var result = resolve(context);\r\n return result;\r\n };\r\n };\r\n Container.prototype._deactivateIfSingleton = function (binding) {\r\n var _this = this;\r\n if (!binding.activated) {\r\n return;\r\n }\r\n if (isPromise(binding.cache)) {\r\n return binding.cache.then(function (resolved) { return _this._deactivate(binding, resolved); });\r\n }\r\n return this._deactivate(binding, binding.cache);\r\n };\r\n Container.prototype._deactivateSingletons = function (bindings) {\r\n for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n var binding = bindings_1[_i];\r\n var result = this._deactivateIfSingleton(binding);\r\n if (isPromise(result)) {\r\n throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);\r\n }\r\n }\r\n };\r\n Container.prototype._deactivateSingletonsAsync = function (bindings) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, Promise.all(bindings.map(function (b) { return _this._deactivateIfSingleton(b); }))];\r\n case 1:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {\r\n if (this.parent) {\r\n return this._deactivate.bind(this.parent)(binding, instance);\r\n }\r\n else {\r\n return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);\r\n }\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.parent) return [3, 2];\r\n return [4, this._deactivate.bind(this.parent)(binding, instance)];\r\n case 1:\r\n _a.sent();\r\n return [3, 4];\r\n case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];\r\n case 3:\r\n _a.sent();\r\n _a.label = 4;\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {\r\n try {\r\n this._bindingDictionary.remove(serviceIdentifier);\r\n }\r\n catch (e) {\r\n throw new Error(ERROR_MSGS.CANNOT_UNBIND + \" \" + getServiceIdentifierAsString(serviceIdentifier));\r\n }\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {\r\n var _this = this;\r\n if (typeof binding.onDeactivation === 'function') {\r\n var result = binding.onDeactivation(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () { return _this._preDestroy(constructor, instance); });\r\n }\r\n }\r\n return this._preDestroy(constructor, instance);\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(typeof binding.onDeactivation === 'function')) return [3, 2];\r\n return [4, binding.onDeactivation(instance)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [4, this._preDestroy(constructor, instance)];\r\n case 3:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n return Container;\r\n}());\r\nexport { Container };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFirstArrayDuplicate } from '../utils/js';\r\nfunction targetIsConstructorFunction(target) {\r\n return target.prototype !== undefined;\r\n}\r\nfunction _throwIfMethodParameter(parameterName) {\r\n if (parameterName !== undefined) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n}\r\nfunction tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {\r\n _throwIfMethodParameter(parameterName);\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);\r\n}\r\nfunction tagProperty(annotationTarget, propertyName, metadata) {\r\n if (targetIsConstructorFunction(annotationTarget)) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED_PROP, annotationTarget.constructor, propertyName, metadata);\r\n}\r\nfunction _ensureNoMetadataKeyDuplicates(metadata) {\r\n var metadatas = [];\r\n if (Array.isArray(metadata)) {\r\n metadatas = metadata;\r\n var duplicate = getFirstArrayDuplicate(metadatas.map(function (md) { return md.key; }));\r\n if (duplicate !== undefined) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + duplicate.toString());\r\n }\r\n }\r\n else {\r\n metadatas = [metadata];\r\n }\r\n return metadatas;\r\n}\r\nfunction _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {\r\n var metadatas = _ensureNoMetadataKeyDuplicates(metadata);\r\n var paramsOrPropertiesMetadata = {};\r\n if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) {\r\n paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget);\r\n }\r\n var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];\r\n if (paramOrPropertyMetadata === undefined) {\r\n paramOrPropertyMetadata = [];\r\n }\r\n else {\r\n var _loop_1 = function (m) {\r\n if (metadatas.some(function (md) { return md.key === m.key; })) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + m.key.toString());\r\n }\r\n };\r\n for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) {\r\n var m = paramOrPropertyMetadata_1[_i];\r\n _loop_1(m);\r\n }\r\n }\r\n paramOrPropertyMetadata.push.apply(paramOrPropertyMetadata, metadatas);\r\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\r\n Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\r\n}\r\nfunction createTaggedDecorator(metadata) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (typeof indexOrPropertyDescriptor === 'number') {\r\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\r\n }\r\n else {\r\n tagProperty(target, targetKey, metadata);\r\n }\r\n };\r\n}\r\nfunction _decorate(decorators, target) {\r\n Reflect.decorate(decorators, target);\r\n}\r\nfunction _param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); };\r\n}\r\nfunction decorate(decorator, target, parameterIndexOrProperty) {\r\n if (typeof parameterIndexOrProperty === 'number') {\r\n _decorate([_param(parameterIndexOrProperty, decorator)], target);\r\n }\r\n else if (typeof parameterIndexOrProperty === 'string') {\r\n Reflect.decorate([decorator], target, parameterIndexOrProperty);\r\n }\r\n else {\r\n _decorate([decorator], target);\r\n }\r\n}\r\nexport { decorate, tagParameter, tagProperty, createTaggedDecorator };\r\n","export function getFirstArrayDuplicate(array) {\r\n var seenValues = new Set();\r\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\r\n var entry = array_1[_i];\r\n if (seenValues.has(entry)) {\r\n return entry;\r\n }\r\n else {\r\n seenValues.add(entry);\r\n }\r\n }\r\n return undefined;\r\n}\r\n","import * as ERRORS_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nfunction injectable() {\r\n return function (target) {\r\n if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) {\r\n throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR);\r\n }\r\n var types = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || [];\r\n Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types, target);\r\n return target;\r\n };\r\n}\r\nexport { injectable };\r\n","import { UNDEFINED_INJECT_ANNOTATION } from '../constants/error_msgs';\r\nimport { Metadata } from '../planning/metadata';\r\nimport { createTaggedDecorator } from './decorator_utils';\r\nexport function injectBase(metadataKey) {\r\n return function (serviceIdentifier) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (serviceIdentifier === undefined) {\r\n var className = typeof target === 'function' ? target.name : target.constructor.name;\r\n throw new Error(UNDEFINED_INJECT_ANNOTATION(className));\r\n }\r\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(target, targetKey, indexOrPropertyDescriptor);\r\n };\r\n };\r\n}\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar inject = injectBase(METADATA_KEY.INJECT_TAG);\r\nexport { inject };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar multiInject = injectBase(METADATA_KEY.MULTI_INJECT_TAG);\r\nexport { multiInject };\r\n","const TYPES = {\n AudioContextManager: Symbol.for(\"AudioContextManager\"),\n AudioEditor: Symbol.for(\"AudioEditor\"),\n AudioProcessor: Symbol.for(\"AudioProcessor\"),\n BufferManager: Symbol.for(\"BufferManager\"),\n FilterManager: Symbol.for(\"FilterManager\"),\n RendererManager: Symbol.for(\"RendererManager\"),\n SaveBufferManager: Symbol.for(\"SaveBufferManager\"),\n ConfigService: Symbol.for(\"ConfigService\"),\n EventEmitter: Symbol.for(\"EventEmitter\"),\n BufferPlayer: Symbol.for(\"BufferPlayer\"),\n BufferDecoderService: Symbol.for(\"BufferDecoderService\"),\n BufferFetcherService: Symbol.for(\"BufferFetcherService\"),\n AudioBuffersToFetch: Symbol.for(\"AudioBuffersToFetch\"),\n Renderers: Symbol.for(\"Renderers\"),\n Filters: Symbol.for(\"Filters\"),\n EntryPointFilter: Symbol.for(\"EntryPointFilter\"),\n VoiceRecorder: Symbol.for(\"VoiceRecorder\")\n};\n\nexport { TYPES };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum EventType {\n LOADING_BUFFERS = \"loadingBuffers\",\n LOADING_BUFFERS_ERROR = \"loadingBuffersError\",\n FETCHING_BUFFERS = \"fetchingBuffers\",\n FETCHING_BUFFERS_ERROR = \"fetchingBuffersError\",\n FINISHED_FETCHING_BUFFERS = \"finishedFetchingBuffers\",\n LOADED_BUFFERS = \"loadedBuffers\",\n COMPATIBILITY_MODE_AUTO_ENABLED = \"compatibilityModeAutoEnabled\",\n RENDERING_AUDIO_PROBLEM_DETECTED = \"renderingAudioProblemDetected\",\n AUDIO_RENDERING_FINISHED = \"audioRenderingFinished\",\n OFFLINE_AUDIO_RENDERING_FINISHED = \"offlineAudioRenderingFinished\",\n PLAYING_STOPPED = \"playingStopped\",\n PLAYING_STARTED = \"playingStarted\",\n PLAYING_FINISHED = \"playingFinished\",\n PLAYING_UPDATE = \"playingUpdate\",\n RECORDER_INIT = \"recorderInit\",\n RECORDER_SUCCESS = \"recorderSuccess\",\n RECORDER_ERROR = \"recorderError\",\n RECORDER_UPDATE_CONSTRAINTS = \"recorderUpdateConstraints\",\n RECORDER_RECORDING = \"recorderRecording\",\n RECORDER_STOPPED = \"recorderStopped\",\n RECORDER_PAUSED = \"recorderPaused\",\n RECORDER_RESETED = \"recorderReseted\",\n RECORDER_COUNT_UPDATE = \"recorderCountUpdate\",\n SAMPLE_RATE_CHANGED = \"sampleRateChanged\",\n DECODING_AUDIO_FILE = \"decodingAudioFile\",\n DECODED_AUDIO_FILE = \"decodedAudioFile\",\n ERROR_DECODING_AUDIO_FILE = \"errorDecodingAudioFile\",\n RECORDER_NOT_FOUND_ERROR = \"recorderNotFoundError\",\n RECORDER_UNKNOWN_ERROR = \"recorderUnknownError\",\n UPDATE_AUDIO_TREATMENT_PERCENT = \"updateAudioTreatmentPercent\",\n UPDATE_REMAINING_TIME_ESTIMATED = \"updateRemainingTimeEstimated\",\n CANCELLED_AND_LOADED_INITIAL_AUDIO = \"cancelledAndLoadedInitialAudio\",\n CANCELLING_AUDIO_PROCESSING = \"cancellingAudioProcessing\"\n};\n","const Constants = {\n AUDIO_EDITOR: \"audioEditor\",\n VOICE_RECORDER: \"voiceRecorder\",\n BUFFER_PLAYER: \"bufferPlayer\",\n AUDIO_CONTEXT_MANAGER: \"audioContextManager\",\n AUDIO_PROCESSOR: \"audioProcessor\",\n BUFFER_MANAGER: \"bufferManager\",\n FILTER_MANAGER: \"filterManager\",\n RENDERER_MANAGER: \"rendererManager\",\n SAVE_BUFFER_MANAGER: \"saveBufferManager\",\n EXPORT_WAV_COMMAND: \"exportWAV\",\n EXPORT_MP3_COMMAND: \"exportMP3\",\n AUDIO_WAV: \"audio/wav\",\n AUDIO_MP3: \"audio/mp3\",\n RECORD_COMMAND: \"record\",\n INIT_COMMAND: \"init\",\n FILTERS_NAMES: {\n REVERB: \"reverb\",\n ECHO: \"echo\",\n BASS_BOOST: \"bassboost\",\n BITCRUSHER: \"bitcrusher\",\n HIGH_PASS: \"highpass\",\n LIMITER: \"limiter\",\n LOW_PASS: \"lowpass\",\n PASSTHROUGH: \"passthroughfilter\",\n RETURN_AUDIO: \"returnAudio\",\n SOUNDTOUCH: \"soundtouch\",\n TELEPHONIZER: \"telephonizer\",\n VOCODER: \"vocoder\"\n },\n WORKLET_PATHS: {\n BITCRUSHER: \"BitCrusher.worklet.js\",\n LIMITER: \"Limiter.worklet.js\",\n SOUNDTOUCH: \"Soundtouch.worklet.js\",\n RECORDER_WORKLET: \"RecorderWorklet.js\",\n PASSTHROUGH: \"Passthrough.worklet.js\"\n },\n WORKLET_NAMES: {\n BITCRUSHER: \"bitcrusher-processor\",\n LIMITER: \"limiter-processor\",\n SOUNDTOUCH: \"soundtouch-worklet\",\n RECORDER_WORKLET: \"recorder-worklet\",\n PASSTHROUGH: \"passthrough\"\n },\n PREFERENCES_KEYS: {\n COMPATIBILITY_MODE_ENABLED: \"compatibility-mode-enabled\",\n COMPATIBILITY_MODE_CHECKED: \"compatibility-mode-checked\",\n ENABLE_AUDIO_WORKLET: \"enable-audio-worklet\",\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: \"enable-soundtouch-audio-worklet\",\n BUFFER_SIZE: \"buffer-size\",\n SAMPLE_RATE: \"sample-rate\",\n DISABLE_INITIAL_RENDERING: \"disable-initial-rendering\",\n BITRATE_MP3: \"bitrate-mp3\"\n },\n // Enable or disable the use of Audio Worklet version of Soundtouch\n // If disabled, the ScriptProcessorNode version is used\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: true,\n ENABLE_AUDIO_WORKLET: true,\n ENABLE_RECORDER_AUDIO_WORKLET: true,\n SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE: 16384,\n DEFAULT_REVERB_ENVIRONMENT: {\n name: \"Medium Damping Cave E002 M2S\",\n url: \"impulse_response.wav\",\n size: 1350278,\n addDuration: 4,\n link: \"http://www.cksde.com/p_6_250.htm\"\n },\n VOCODER_MODULATOR: \"modulator.mp3\",\n DEFAULT_BUFFER_SIZE: 0,\n VALID_BUFFER_SIZE: [0, 256, 512, 1024, 2048, 4096, 8192, 16384],\n VALID_MP3_BITRATES: [32, 64, 96, 128, 160, 256, 320],\n DEFAULT_SAMPLE_RATE: 0, // 0 = AUTO\n VALID_SAMPLE_RATES: [0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000],\n // Interval used by the treatment percent counter. The event will be dispatched each ms defined here\n TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL: 100,\n // Smoothing factor for the time couting estimation (between 0 and 1)\n TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR: 0.9,\n // Disable initial rendering (when opening audio file or buffer)\n DISABLE_INITIAL_RENDERING: true,\n // Default save format\n DEFAULT_SAVE_FORMAT: \"wav\",\n // Default bitrate for the MP3 encoder\n DEFAULT_MP3_BITRATE: 320\n};\n\nexport default Constants;\n","import { injectable } from \"inversify\";\nimport AudioEditorEvents from \"../model/AudioEditorEvent\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default class EventEmitter implements EventEmitterInterface {\n listeners: AudioEditorEvents = {};\n \n constructor() {\n this.listeners = {};\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event].push(callback);\n }\n\n emit(event: string, data?: string | number | AudioBuffer) {\n if (this.listeners[event]) {\n this.listeners[event].forEach(callback => {\n callback(data);\n });\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event].filter(cb => cb !== callback);\n }\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport Constants from \"@/model/Constants\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioContextManager implements AudioContextManagerInterface {\n\n /** The current event emitter */\n private eventEmitter: EventEmitterInterface | undefined;\n\n /** The config service */\n private configService: ConfigService | null;\n\n /** The current audio context */\n private _currentContext: AudioContext | null | undefined;\n\n /** The old audio context */\n private oldAudioContext: AudioContext | null | undefined;\n\n /** The previous sample rate setting */\n private previousSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n constructor(\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService | null) {\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n\n this.setup();\n }\n\n private setup() {\n if (this.configService) {\n this.previousSampleRate = this.configService.getSampleRate();\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.previousSampleRate);\n }\n }\n\n if (!this.currentContext) {\n this.createNewContext(this.previousSampleRate);\n }\n }\n\n createNewContextIfNeeded(principalBuffer?: AudioBuffer | null) {\n const isCompatibilityModeEnabled = this.configService && this.configService.isCompatibilityModeEnabled();\n\n if (isCompatibilityModeEnabled && principalBuffer) {\n // If compatibility mode is enabled, we use the sample rate of the input audio buffer\n if (this.currentSampleRate != principalBuffer.sampleRate) {\n this.createNewContext(principalBuffer.sampleRate);\n this.previousSampleRate = principalBuffer.sampleRate;\n\n return true;\n }\n } else {\n // Otherwise we change the context if the sample rate has changed\n let currentSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n if (this.configService) {\n currentSampleRate = this.configService.getSampleRate();\n }\n\n // If sample rate setting has changed, create a new audio context\n if (currentSampleRate != this.previousSampleRate) {\n this.createNewContext(currentSampleRate);\n this.previousSampleRate = currentSampleRate;\n\n return true;\n }\n }\n\n return false;\n }\n\n /** \n * Stop previous audio context and create a new one\n * @param sampleRate New sample rate\n */\n createNewContext(sampleRate: number) {\n if (this._currentContext) {\n this.oldAudioContext = this._currentContext;\n this.destroyOldContext();\n }\n\n const options: AudioContextOptions = {\n latencyHint: \"interactive\"\n };\n\n if (sampleRate != 0) {\n options.sampleRate = sampleRate;\n }\n\n this._currentContext = new AudioContext(options);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.currentSampleRate);\n }\n }\n\n /**\n * Destroy previous AudioContext\n */\n private destroyOldContext() {\n if (this.oldAudioContext) {\n this.oldAudioContext.close();\n this.oldAudioContext = null;\n }\n }\n\n get currentSampleRate(): number {\n if (this.currentContext) {\n return this.currentContext.sampleRate;\n }\n\n return 0;\n }\n\n get currentContext() {\n return this._currentContext;\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport type { ConfigService } from \"../../services/interfaces/ConfigService\";\nimport { TYPES } from \"@/inversify.types\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\nimport type BufferDecoderServiceInterface from \"@/services/interfaces/BufferDecoderServiceInterface\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default abstract class AbstractAudioElement {\n\n /** Is this element enabled? */\n private enabled = false;\n\n /** Is this element enabled by default? */\n private defaultEnabled = false;\n\n @inject(TYPES.BufferFetcherService)\n protected bufferFetcherService: BufferFetcherServiceInterface | null = null;\n\n @inject(TYPES.BufferDecoderService)\n protected bufferDecoderService: BufferDecoderServiceInterface | null = null;\n\n @inject(TYPES.ConfigService)\n protected configService: ConfigService | null = null;\n\n @inject(TYPES.EventEmitter)\n protected eventEmitter: EventEmitterInterface | null = null;\n\n /** Returns the order in which the filter/renderer needs to be applied */\n abstract get order(): number;\n\n /** Returns the id of this filter/renderer */\n abstract get id(): string;\n\n /** Is this filter/renderer enabled? */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /** Is this filter/renderer enabled by default? */\n isDefaultEnabled(): boolean {\n return this.defaultEnabled;\n }\n\n /** Set to true if this filter/renderer needs to be enabled by default */\n setDefaultEnabled(state: boolean) {\n this.defaultEnabled = state;\n }\n\n setEnabled(state: boolean) {\n this.enabled = state;\n }\n\n /** Enable this filter/renderer */\n enable() {\n this.setEnabled(true);\n }\n\n /** Disable this filter/renderer */\n disable() {\n this.setEnabled(false);\n }\n\n /** Toggle to enabled/disabled this filter */\n toggle() {\n this.setEnabled(!this.isEnabled());\n }\n\n injectDependencies(bufferFetcherService: BufferFetcherServiceInterface | null, bufferDecoderService: BufferDecoderServiceInterface | null, configService: ConfigService | null, eventEmitter: EventEmitterInterface | null) {\n this.bufferFetcherService = bufferFetcherService;\n this.bufferDecoderService = bufferDecoderService;\n this.configService = configService;\n this.eventEmitter = eventEmitter;\n }\n}\n","import { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport FilterManagerInterface from \"@/audioEditor/interfaces/FilterManagerInterface\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\nconst utilFunctions = {\n calcAudioDuration: (audio: AudioBuffer, speed: number) => {\n if (audio) {\n let duration = audio.duration + 1;\n\n if (speed) {\n duration = duration / speed;\n }\n\n return duration;\n }\n\n return 0;\n },\n loadAudioBuffer: async (context: AudioContext, file: File) => {\n const arrayBuffer = await utilFunctions.readAsArrayBufferPromisified(file);\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n return utilFunctions.decodeBuffer(context, audioBuffer);\n },\n readAsArrayBufferPromisified: (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = ev => {\n const result = ev?.target?.result;\n\n if (result instanceof ArrayBuffer) {\n resolve(result);\n } else {\n reject();\n }\n };\n\n if (file) {\n reader.readAsArrayBuffer(file); // Read the file\n }\n });\n },\n decodeBuffer: (context: AudioContext, buffer: AudioBuffer) => {\n if (buffer.numberOfChannels == 1) { // convert to stereo buffer\n context.resume();\n\n const duration = buffer.duration;\n const sampleRate = context.sampleRate;\n\n const newBuffer = context.createBuffer(2, sampleRate * duration + sampleRate * 2, sampleRate);\n\n // Original buffer data\n const sourceChannelData = buffer.getChannelData(0);\n\n // Destination buffers\n const channel0Data = newBuffer.getChannelData(0);\n const channel1Data = newBuffer.getChannelData(1);\n\n for (let i = 0; i < sourceChannelData.length; i++) {\n channel0Data[i] = sourceChannelData[i];\n channel1Data[i] = sourceChannelData[i];\n }\n\n return newBuffer;\n }\n\n return buffer;\n },\n convertAudioBufferToFloat32Array: (buffer: AudioBuffer) => {\n const array: Float32Array[] = [];\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n array.push(buffer.getChannelData(channel));\n }\n\n return array;\n },\n convertAudioParamToFloat32Array: (param: AudioParam, length: number) => {\n const array = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n array.set([param.value], i);\n }\n\n return array;\n },\n sumAudioBufferChannel(buffer: AudioBuffer, channel: number) {\n return buffer.getChannelData(channel).reduce((a, b) => a + b, 0);\n },\n sumAudioBuffer(buffer: AudioBuffer) {\n let sum = 0;\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n sum += this.sumAudioBufferChannel(buffer, channel);\n }\n\n return sum;\n },\n /**\n * This method checks if the browser is compatible with audio worklets\n * @param audioContext \n */\n isAudioWorkletCompatible(audioContext: BaseAudioContext) {\n if (typeof (audioContext) !== \"undefined\" && typeof (audioContext.audioWorklet) !== \"undefined\") {\n return true;\n }\n\n return false;\n },\n /**\n * Check that the setting value is correct\n * @param value FilterSettingValue\n */\n isSettingValueValid(value: FilterSettingValue) {\n return typeof (value) !== \"undefined\" && !isNaN(Number(value)) && !(typeof (value) === \"string\" && value.trim() === \"\");\n },\n /**\n * Calculate approximative audio duration according to enabled filters and their settings\n * @param speedAudio Current audio speed\n * @returns The audio duration\n */\n calculateAudioDuration(buffer: AudioBuffer, filterManager: FilterManagerInterface, speedAudio: number): number {\n if (buffer && filterManager) {\n const duration = this.calcAudioDuration(buffer, speedAudio);\n return duration + filterManager.getAddingTime();\n }\n\n return 0;\n },\n /**\n * Reset audio rendering progress\n */\n resetAudioRenderingProgress(eventEmitter: EventEmitterInterface | null) {\n if (eventEmitter) {\n eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, 0);\n eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n }\n },\n forceDownload(blob: Blob, filename: string) {\n const link = window.document.createElement(\"a\");\n const url = (window.URL || window.webkitURL).createObjectURL(blob);\n window.document.body.appendChild(link);\n link.href = url;\n link.download = filename || \"output.wav\";\n link.click();\n window.URL.revokeObjectURL(url);\n }\n};\n\nexport default utilFunctions;\n","import AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"../filters/interfaces/AbstractAudioFilter\";\nimport AbstractAudioRenderer from \"../filters/interfaces/AbstractAudioRenderer\";\nimport utils from \"../utils/Functions\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport Constants from \"../model/Constants\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettings } from \"../model/filtersSettings/FilterSettings\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { FilterState } from \"../model/FilterState\";\nimport SaveBufferOptions from \"../model/SaveBufferOptions\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport AudioEditorInterface from \"./interfaces/AudioEditorInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\n\n@injectable()\nexport default class AudioEditor extends AbstractAudioElement implements AudioEditorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The renderer manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The save buffer manager */\n private saveBufferManager: SaveBufferManagerInterface | undefined;\n\n /** The save buffer manager */\n private audioProcessor: AudioProcessorInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The audio buffer to be processed */\n private principalBuffer: AudioBuffer | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.SaveBufferManager) saveBufferManager: SaveBufferManagerInterface,\n @inject(TYPES.AudioProcessor) audioProcessor: AudioProcessorInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface,\n @inject(TYPES.BufferPlayer) player: BufferPlayerInterface\n ) {\n super();\n\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.contextManager = contextManager;\n this.saveBufferManager = saveBufferManager;\n this.audioProcessor = audioProcessor;\n this.bufferManager = bufferManager;\n this.bufferPlayer = player;\n\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called just before starting playing audio, when compatibility mode is enabled\n this.bufferPlayer.onBeforePlaying(async () => {\n if (this.bufferPlayer && this.bufferPlayer.compatibilityMode\n && this.contextManager && this.contextManager.currentContext && this.audioProcessor) {\n await this.audioProcessor.setupOutput(this.principalBuffer, this.contextManager.currentContext);\n }\n });\n\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.bufferPlayer && this.bufferPlayer.loop) {\n this.bufferPlayer.start();\n }\n });\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n if (this.filterManager) {\n this.filterManager.addFilters(...filters);\n }\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n if (this.rendererManager) {\n this.rendererManager.addRenderers(...renderers);\n }\n }\n\n get currentSampleRate(): number {\n if (this.contextManager) {\n return this.contextManager.currentSampleRate;\n }\n\n return 0;\n }\n\n get defaultDeviceSampleRate(): number {\n const tempContext = new AudioContext();\n let sampleRate = 0;\n\n if (tempContext) {\n sampleRate = tempContext.sampleRate;\n tempContext.close();\n }\n\n return sampleRate;\n }\n\n async loadBufferFromFile(file: File) {\n this.principalBuffer = null;\n\n if (this.audioProcessor) {\n await this.audioProcessor.prepareContext(this.principalBuffer);\n }\n\n if (this.contextManager && this.contextManager.currentContext && this.bufferDecoderService && this.audioProcessor) {\n this.principalBuffer = await this.bufferDecoderService.decodeBufferFromFile(file);\n this.audioProcessor.initialRenderingDone = false;\n\n if (this.principalBuffer) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n } else {\n throw new Error(\"Error decoding audio file\");\n }\n\n utilFunctions.resetAudioRenderingProgress(this.eventEmitter);\n } else {\n throw new Error(\"Audio Context is not ready!\");\n }\n }\n\n loadBuffer(audioBuffer: AudioBuffer) {\n this.principalBuffer = audioBuffer;\n\n if (this.audioProcessor) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n this.audioProcessor.initialRenderingDone = false;\n }\n }\n\n getOutputBuffer() {\n if (this.audioProcessor) {\n return this.audioProcessor.renderedBuffer;\n }\n\n return null;\n }\n\n async renderAudio(): Promise {\n if (this.audioProcessor) {\n return await this.audioProcessor.renderAudio(this.principalBuffer);\n }\n\n return false;\n }\n\n isAudioWorkletAvailable(): boolean {\n if (this.contextManager && this.contextManager.currentContext) {\n return utilFunctions.isAudioWorkletCompatible(this.contextManager.currentContext);\n }\n\n return false;\n }\n\n /** Filters settings */\n\n getFiltersState(): FilterState {\n if (this.filterManager && this.rendererManager) {\n return {\n ...this.filterManager.getFiltersState(),\n ...this.rendererManager.getRenderersState()\n };\n }\n\n return {};\n }\n\n getFiltersSettings(): Map {\n if (this.filterManager) {\n return this.filterManager.getFiltersSettings();\n }\n\n return new Map();\n }\n\n async reconnectNodesIfNeeded() {\n if (this.contextManager && this.bufferPlayer && this.bufferPlayer.compatibilityMode &&\n this.contextManager.currentContext && this.principalBuffer &&\n this.filterManager && this.filterManager.entrypointFilter) {\n await this.filterManager.connectNodes(this.contextManager.currentContext, this.principalBuffer, true, this.bufferPlayer.compatibilityMode);\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n this.bufferPlayer.speedAudio = speedAudio;\n this.bufferPlayer.duration = utilFunctions.calculateAudioDuration(this.principalBuffer, this.filterManager, speedAudio) * speedAudio;\n }\n }\n\n toggleFilter(filterId: string) {\n if (this.rendererManager) {\n this.rendererManager.toggleRenderer(filterId);\n }\n\n if (this.filterManager) {\n this.filterManager.toggleFilter(filterId);\n this.reconnectNodesIfNeeded();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n if (this.filterManager) {\n await this.filterManager.changeFilterSettings(filterId, settings);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n async resetFilterSettings(filterId: string) {\n if (this.filterManager) {\n await this.filterManager.resetFilterSettings(filterId);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n resetAllFiltersState() {\n if (this.rendererManager) {\n this.rendererManager.resetAllRenderersState();\n }\n\n if (this.filterManager) {\n this.filterManager.resetAllFiltersState();\n this.reconnectNodesIfNeeded();\n }\n }\n\n /** Events and exit */\n\n exit() {\n if (this.bufferPlayer) {\n this.bufferPlayer.stop();\n this.bufferPlayer.reset();\n }\n\n this.cancelAudioRendering();\n this.principalBuffer = null;\n }\n\n cancelAudioRendering() {\n if (this.audioProcessor) {\n this.audioProcessor.cancelAudioRendering();\n }\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.off(event, callback);\n }\n }\n\n async saveBuffer(options?: SaveBufferOptions): Promise {\n if (this.saveBufferManager && this.audioProcessor) {\n return await this.saveBufferManager?.saveBuffer(this.audioProcessor.renderedBuffer, options);\n }\n\n return false;\n }\n\n set downloadingInitialData(state: boolean) {\n if (this.bufferManager) {\n this.bufferManager.downloadingInitialData = state;\n }\n }\n\n get downloadingInitialData(): boolean {\n if (this.bufferManager) {\n return this.bufferManager.downloadingInitialData;\n }\n\n return false;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_EDITOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport utils from \"../utils/Functions\";\nimport Constants from \"@/model/Constants\";\nimport AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioProcessor extends AbstractAudioElement implements AudioProcessorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The filter manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The current offline context */\n private currentOfflineContext: OfflineAudioContext | null | undefined;\n\n /** The resulting audio buffer */\n private _renderedBuffer: AudioBuffer | null = null;\n\n /** true if the user wanted to cancel audio rendering */\n private audioRenderingLastCanceled = false;\n\n /** true if initial rendering for the current buffer was done */\n initialRenderingDone = false;\n /** The sum of all the samples of the input buffer,\n * used to detect the need to enable the compatibility mode */\n sumInputBuffer: number = 0;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.bufferManager = bufferManager;\n }\n\n async prepareContext(inputBuffer: AudioBuffer | null) {\n if (this.contextManager) {\n const changed = this.contextManager.createNewContextIfNeeded(inputBuffer);\n\n if (changed && this.bufferManager) {\n await this.bufferManager.resetBufferFetcher();\n }\n\n if (this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n }\n }\n\n async renderAudio(inputBuffer: AudioBuffer | null): Promise {\n await this.prepareContext(inputBuffer);\n\n if (!this.contextManager || !this.contextManager.currentContext) {\n throw new Error(\"AudioContext is not yet available\");\n }\n\n if (!this.filterManager) {\n throw new Error(\"Filter manager is not available\");\n }\n\n if (!this.rendererManager) {\n throw new Error(\"Renderer manager is not available\");\n }\n\n if (!this.filterManager.entrypointFilter) {\n throw new Error(\"Entrypoint filter is not available\");\n }\n\n if (!inputBuffer) {\n throw new Error(\"No principal buffer available\");\n }\n\n // If initial rendering is disabled and compatibility mode is disabled, we stop here\n if (!this.initialRenderingDone && this.configService && this.configService.isInitialRenderingDisabled() && !this.configService.isCompatibilityModeEnabled()) {\n this.loadInitialBuffer(inputBuffer);\n this.initialRenderingDone = true;\n return true;\n }\n\n // If switching from compatiblity mode to normal mode, we stop the audio player\n if (this.configService && this.bufferPlayer && !this.configService.isCompatibilityModeEnabled() && this.bufferPlayer.compatibilityMode) {\n this.bufferPlayer.stop();\n }\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n const durationAudio = utils.calculateAudioDuration(inputBuffer, this.filterManager, speedAudio);\n const offlineContext = new OfflineAudioContext(2, this.contextManager.currentContext.sampleRate * durationAudio, this.contextManager.currentContext.sampleRate);\n const outputContext = this.configService && this.configService.isCompatibilityModeEnabled() ? this.contextManager.currentContext : offlineContext;\n\n this._renderedBuffer = await this.rendererManager.executeAudioRenderers(inputBuffer, outputContext);\n this.currentOfflineContext = null;\n this.audioRenderingLastCanceled = false;\n\n\n utils.resetAudioRenderingProgress(this.eventEmitter);\n this.filterManager.setupTotalSamples(durationAudio, this.contextManager.currentContext);\n\n return await this.setupOutput(inputBuffer, outputContext, durationAudio, offlineContext);\n }\n\n private setupPlayerSpeed(bufferPlayer: BufferPlayerInterface) {\n if (this.filterManager && this.filterManager.entrypointFilter) {\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n bufferPlayer.speedAudio = speedAudio;\n }\n }\n\n async setupOutput(inputBuffer: AudioBuffer | null, outputContext: BaseAudioContext, durationAudio?: number, offlineContext?: OfflineAudioContext): Promise {\n if (this._renderedBuffer && this.configService && this.eventEmitter && this.bufferPlayer && this.filterManager) {\n // Initialize worklets then connect the filter nodes\n await this.filterManager.initializeWorklets(outputContext);\n await this.filterManager.connectNodes(outputContext, this._renderedBuffer, false, this.configService.isCompatibilityModeEnabled());\n\n this.setupPlayerSpeed(this.bufferPlayer);\n\n // Standard mode\n if (!this.configService.isCompatibilityModeEnabled() && offlineContext && this.filterManager.currentNodes) {\n this.currentOfflineContext = offlineContext;\n this.filterManager.currentNodes.output.connect(outputContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n if (this.contextManager && !this.loadRenderedAudio(inputBuffer, renderedBuffer)) {\n return await this.setupOutput(inputBuffer, this.contextManager.currentContext!, durationAudio);\n }\n\n if (this.audioRenderingLastCanceled) {\n return false;\n }\n\n this.eventEmitter.emit(EventType.OFFLINE_AUDIO_RENDERING_FINISHED);\n } else { // Compatibility mode\n this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes!.output, durationAudio);\n this.initialRenderingDone = true;\n }\n\n this.eventEmitter.emit(EventType.AUDIO_RENDERING_FINISHED);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Load rendered audio buffer into audio player\n * @param renderedBuffer Rendered audio buffer - AudioBuffer\n * @returns false if the rendred audio buffer is invalid, true otherwise\n */\n private loadRenderedAudio(inputBuffer: AudioBuffer | null, renderedBuffer: AudioBuffer): boolean {\n if (this.eventEmitter && this.bufferPlayer) {\n if (!this.audioRenderingLastCanceled) {\n const sumRenderedAudio = utils.sumAudioBuffer(renderedBuffer);\n\n if (sumRenderedAudio == 0 && this.sumInputBuffer !== 0) {\n if (this.configService && !this.configService.isCompatibilityModeChecked()) {\n this.setCompatibilityModeChecked(true);\n this.configService.enableCompatibilityMode();\n this.eventEmitter.emit(EventType.COMPATIBILITY_MODE_AUTO_ENABLED);\n\n return false;\n }\n\n this.eventEmitter.emit(EventType.RENDERING_AUDIO_PROBLEM_DETECTED);\n }\n\n this._renderedBuffer = renderedBuffer;\n this.bufferPlayer.loadBuffer(this._renderedBuffer);\n } else if (!this.initialRenderingDone) {\n this.loadInitialBuffer(inputBuffer);\n this.eventEmitter.emit(EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO);\n }\n\n this.initialRenderingDone = true;\n }\n\n return true;\n }\n\n /**\n * Load the initial audio buffer to the buffer player\n */\n private loadInitialBuffer(inputBuffer: AudioBuffer | null) {\n if (this.bufferPlayer) {\n this._renderedBuffer = inputBuffer;\n this.bufferPlayer.loadBuffer(inputBuffer!);\n }\n }\n\n public cancelAudioRendering() {\n if (this.currentOfflineContext && !this.audioRenderingLastCanceled && this.filterManager) {\n this.audioRenderingLastCanceled = true;\n this.filterManager.disconnectOldNodes(false);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.CANCELLING_AUDIO_PROCESSING);\n }\n }\n }\n\n /**\n * Set compatibility/direct audio rendering mode already checked for auto enabling (if an error occurs rendering in offline context)\n * @param checked boolean\n */\n private setCompatibilityModeChecked(checked: boolean) {\n if (this.configService) {\n this.configService.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED, \"\" + checked);\n }\n }\n\n get renderedBuffer() {\n return this._renderedBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_PROCESSOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport Constants from \"@/model/Constants\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport { inject, injectable } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\n\n@injectable()\nexport default class BufferManager extends AbstractAudioElement implements BufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** True if we are downloading initial buffer data */\n downloadingInitialData = false;\n\n /** List of audio buffers to fetch */\n private audioBuffersToFetch: string[] = [];\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.BufferFetcherService) bufferFetcherService: BufferFetcherServiceInterface,\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.AudioBuffersToFetch) audioBuffersToFetch: string[]) {\n super();\n\n this.bufferFetcherService = bufferFetcherService;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.filterManager = filterManager;\n this.filterManager = filterManager;\n this.audioBuffersToFetch = audioBuffersToFetch;\n\n this.setup();\n }\n\n private setup() {\n if (this.audioBuffersToFetch.length > 0) {\n this.fetchBuffers(false);\n }\n }\n\n /**\n * Fetch default buffers from network\n * @param refetch true if we need to refetch the buffers\n */\n private async fetchBuffers(refetch: boolean) {\n if (this.downloadingInitialData || !this.bufferFetcherService) {\n return;\n }\n\n this.downloadingInitialData = true;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS);\n }\n\n try {\n await this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch);\n this.downloadingInitialData = false;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADED_BUFFERS);\n }\n } catch (e) {\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS_ERROR);\n }\n }\n }\n\n async resetBufferFetcher() {\n if (this.bufferFetcherService) {\n this.bufferFetcherService.reset();\n\n await this.fetchBuffers(true);\n\n if (this.filterManager) {\n await this.filterManager.resetFilterBuffers();\n }\n }\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_MANAGER;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"@/filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"@/filters/interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"@/model/AudioNodes\";\nimport AbstractAudioFilterWorklet from \"@/filters/interfaces/AbstractAudioFilterWorklet\";\nimport { FilterState } from \"@/model/FilterState\";\nimport { FilterSettings } from \"@/model/filtersSettings/FilterSettings\";\nimport Constants from \"@/model/Constants\";\nimport FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { inject, injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class FilterManager extends AbstractAudioElement implements FilterManagerInterface {\n\n /** A list of filters */\n private filters: AbstractAudioFilter[] = [];\n\n /** The entrypoint filter */\n private _entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null = null;\n\n /** The current connected nodes */\n private _currentNodes: AudioFilterNodes | null = null;\n\n constructor(\n @multiInject(TYPES.Filters) filters: AbstractAudioFilter[],\n @inject(TYPES.EntryPointFilter) entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null\n ) {\n super();\n\n this.filters = filters;\n this._entryPointFilter = entryPointFilter;\n\n this.setup();\n }\n\n private setup() {\n for (const filter of this.filters) {\n filter.initializeDefaultSettings();\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n for (const filter of filters) {\n filter.initializeDefaultSettings();\n filter.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.filters.push(...filters);\n }\n\n getFiltersState(): FilterState {\n const state: FilterState = {};\n\n this.filters.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n getFiltersSettings(): Map {\n const settings = new Map();\n\n for (const filter of this.filters) {\n settings.set(filter.id, filter.getSettings());\n }\n\n return settings;\n }\n\n toggleFilter(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n filter.toggle();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n for (const key of Object.keys(settings)) {\n await filter.setSetting(key, settings[key]);\n }\n }\n }\n\n async resetFilterSettings(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n await filter.resetSettings();\n }\n }\n\n resetAllFiltersState() {\n this.filters.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async connectNodes(context: BaseAudioContext, buffer: AudioBuffer, keepCurrentInputOutput: boolean, isCompatibilityMode: boolean) {\n if (!this._entryPointFilter) {\n return;\n }\n\n let entrypointNode: AudioNode | null = null;\n\n if (keepCurrentInputOutput && this._currentNodes) {\n entrypointNode = this._currentNodes.input;\n } else {\n const entrypointNodes = await this._entryPointFilter.getEntrypointNode(context, buffer, !isCompatibilityMode);\n entrypointNode = entrypointNodes.input;\n }\n\n const intermediateNodes: AudioFilterNodes[] = [];\n let previousNode: AudioNode | undefined = entrypointNode;\n\n this.disconnectOldNodes(keepCurrentInputOutput);\n\n // Sort by filter order, then remove the disabled filter (but always keep the last/output filter)\n const filters = this.filters\n .sort((a, b) => a.order - b.order)\n .filter((filter, index) => filter !== this._entryPointFilter && (filter.isEnabled() || index >= this.filters.length - 1));\n\n for (const filter of filters) {\n const node = filter.getNode(context);\n\n if (previousNode) {\n previousNode.connect(node.input);\n }\n\n previousNode = node.output;\n intermediateNodes.push(node);\n }\n\n if (this._entryPointFilter) {\n this._entryPointFilter.updateState();\n }\n\n this._currentNodes = {\n input: entrypointNode!,\n output: previousNode!,\n intermediateNodes: intermediateNodes\n .filter(n => n.input != previousNode && n.output != previousNode &&\n n.input != entrypointNode && n.output != entrypointNode)\n };\n }\n\n disconnectOldNodes(keepCurrentOutput: boolean) {\n if (this._currentNodes) {\n this._currentNodes.input.disconnect();\n\n if (!keepCurrentOutput) {\n this._currentNodes.output.disconnect();\n }\n\n if (this._currentNodes.intermediateNodes) {\n for (const intermediate of this._currentNodes.intermediateNodes) {\n intermediate.input.disconnect();\n intermediate.output.disconnect();\n }\n }\n }\n }\n\n async initializeWorklets(context: BaseAudioContext) {\n for (const filter of this.filters) {\n if (filter.isWorklet()) {\n await (filter as AbstractAudioFilterWorklet).initializeWorklet(context);\n }\n }\n }\n\n getAddingTime() {\n let duration = 0;\n\n for (const filter of this.filters) {\n if (filter.isEnabled()) {\n duration += filter.getAddingTime();\n }\n }\n\n return duration;\n }\n\n setupTotalSamples(durationAudio: number, currentContext: AudioContext | null) {\n if (currentContext) {\n const totalSamples = durationAudio * currentContext.sampleRate;\n\n for (const filter of this.filters) {\n filter.totalSamples = totalSamples;\n }\n }\n }\n\n async resetFilterBuffers() {\n for (const filter of this.filters) {\n await filter.bufferFetcherReseted();\n }\n }\n\n get entrypointFilter() {\n return this._entryPointFilter;\n }\n\n get currentNodes() {\n return this._currentNodes;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.FILTER_MANAGER;\n }\n}\n","import { injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioRenderer from \"@/filters/interfaces/AbstractAudioRenderer\";\nimport { FilterState } from \"@/model/FilterState\";\nimport Constants from \"@/model/Constants\";\nimport RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\n\n@injectable()\nexport default class RendererManager extends AbstractAudioElement implements RendererManagerInterface {\n\n /** A list of renderers */\n private renderers: AbstractAudioRenderer[] = [];\n\n constructor(\n @multiInject(TYPES.Renderers) renderers: AbstractAudioRenderer[] = []) {\n super();\n\n this.renderers = renderers;\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n for (const renderer of renderers) {\n renderer.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.renderers.push(...renderers);\n }\n\n getRenderersState(): FilterState {\n const state: FilterState = {};\n\n this.renderers.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n toggleRenderer(rendererId: string) {\n const renderer = this.renderers.find(f => f.id === rendererId);\n\n if (renderer) {\n renderer.toggle();\n }\n }\n\n resetAllRenderersState() {\n this.renderers.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async executeAudioRenderers(buffer: AudioBuffer, outputContext: AudioContext | OfflineAudioContext) {\n let currentBuffer = buffer;\n\n for (const renderer of this.renderers.sort((a, b) => a.order - b.order)) {\n if (renderer.isEnabled()) {\n currentBuffer = await renderer.renderAudio(outputContext, currentBuffer);\n }\n }\n\n return currentBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.RENDERER_MANAGER;\n }\n}\n","export default function getRecorderWorker(workerBasePath?: string): Worker {\n return new Worker((workerBasePath ? workerBasePath : \"\") + \"RecorderWorker.js\");\n};\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { RecorderCallback, RecorderCallbacks } from \"../model/RecorderCallback\";\nimport type RecorderConfig from \"../model/RecorderConfig\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport RecorderWorkletMessage from \"../model/RecorderWorkletMessage\";\nimport utilFunctions from \"../utils/Functions\";\nimport getRecorderWorker from \"./getRecorderWorker\";\nimport RecorderInterface from \"./interfaces/RecorderInterface\";\n\n@injectable()\nexport class Recorder implements RecorderInterface {\n\n // Inline Worker\n private worker: Worker | null = null;\n private node: ScriptProcessorNode | AudioWorkletNode | null = null;\n private context: BaseAudioContext | null = null;\n\n private config: RecorderConfig = {\n bufferLen: 4096,\n sampleRate: 44100,\n numChannels: 2,\n mimeType: \"audio/wav\",\n workletBasePath: \"worklets/\",\n workerBasePath: \"workers/\",\n bitrate: Constants.DEFAULT_MP3_BITRATE,\n callback: () => { }\n };\n\n private callbacks: RecorderCallbacks = {\n getBuffer: [],\n exportWAV: [],\n exportMP3: []\n };\n\n recording = false;\n\n constructor(cfg: RecorderConfig) {\n Object.assign(this.config, cfg);\n }\n\n async setup(source: AudioNode) {\n if (this.node) { // Disconnect previous node\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n\n this.node.disconnect();\n }\n\n if (source) {\n this.context = source.context;\n\n await this.createRecorderNode();\n\n if (this.node && this.context) {\n source.connect(this.node);\n this.node.connect(this.context.destination); //this should not be necessary\n }\n }\n\n if (this.context && !this.worker) {\n this.worker = getRecorderWorker(this.config.workerBasePath);\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"init\",\n config: {\n sampleRate: this.context.sampleRate,\n numChannels: this.config.numChannels,\n bitrate: this.config.bitrate\n }\n });\n\n this.worker.onmessage = (e: RecorderWorkerMessage) => {\n let callbacks = null;\n\n switch (e.data.command) {\n case \"getBuffer\":\n callbacks = this.callbacks.getBuffer;\n break;\n case Constants.EXPORT_WAV_COMMAND:\n callbacks = this.callbacks.exportWAV;\n break;\n case Constants.EXPORT_MP3_COMMAND:\n callbacks = this.callbacks.exportMP3;\n break;\n }\n\n if (callbacks) {\n const cb = callbacks.pop();\n if (typeof cb == \"function\") {\n (cb as RecorderCallback)(e.data.data);\n }\n }\n };\n }\n }\n }\n\n\n private async createRecorderNode() {\n if (this.context) {\n if (utilFunctions.isAudioWorkletCompatible(this.context) && Constants.ENABLE_RECORDER_AUDIO_WORKLET) {\n try {\n await this.createRecorderWorklet();\n } catch(e) {\n this.createRecorderScriptProcessorNode();\n }\n } else {\n this.createRecorderScriptProcessorNode();\n }\n }\n }\n\n private async createRecorderWorklet() {\n if (this.context) {\n await this.context.audioWorklet.addModule(this.config.workletBasePath + Constants.WORKLET_PATHS.RECORDER_WORKLET);\n\n this.node = new AudioWorkletNode(this.context, Constants.WORKLET_NAMES.RECORDER_WORKLET);\n\n if (this.node && this.node.port) {\n const numChannelParameter = this.node.parameters.get(\"numChannels\");\n\n if(numChannelParameter) {\n numChannelParameter.value = this.config.numChannels;\n numChannelParameter.setValueAtTime(this.config.numChannels, 0);\n }\n\n this.node.port.onmessage = (e: MessageEvent) => {\n if (this.worker && e.data.command == \"record\" && e.data.buffer.length > 0) {\n this.worker.postMessage({\n command: \"record\",\n buffer: e.data.buffer\n });\n }\n };\n }\n }\n }\n\n private createRecorderScriptProcessorNode() {\n if (this.context) {\n this.node = (this.context.createScriptProcessor).call(this.context,\n this.config.bufferLen, this.config.numChannels, this.config.numChannels);\n\n this.node.onaudioprocess = (e) => {\n if (!this.recording) return;\n\n const buffer = [];\n for (let channel = 0; channel < this.config.numChannels; channel++) {\n buffer.push(e.inputBuffer.getChannelData(channel));\n }\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"record\",\n buffer: buffer\n });\n }\n };\n }\n }\n\n record() {\n this.recording = true;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"record\");\n }\n }\n\n stop() {\n this.recording = false;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n }\n\n clear() {\n if (this.worker) {\n this.worker.postMessage({ command: \"clear\" });\n }\n }\n\n kill() {\n this.clear();\n this.stop();\n\n if (this.worker) {\n this.worker.terminate();\n }\n }\n\n getBuffer(cb: RecorderCallback) {\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.getBuffer.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({ command: \"getBuffer\" });\n }\n }\n\n exportWAV(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportWAV.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_WAV_COMMAND,\n type: mimeType\n });\n }\n }\n\n exportMP3(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportMP3.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_MP3_COMMAND,\n type: mimeType\n });\n }\n } \n};\n\nexport default Recorder;\n","import { inject, injectable } from \"inversify\";\nimport { TYPES } from \"../inversify.types\";\nimport { Recorder } from \"../recorder/Recorder\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport SaveBufferOptions from \"@/model/SaveBufferOptions\";\nimport Constants from \"@/model/Constants\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport getRecorderWorker from \"../recorder/getRecorderWorker\";\nimport SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport utilFunctions from \"@/utils/Functions\";\n\n@injectable()\nexport default class SaveBufferManager extends AbstractAudioElement implements SaveBufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** If we are currently processing and downloading the buffer */\n private savingBuffer = false;\n /** Callback used when saving audio */\n private playingStoppedCallback: (() => void) | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface\n ) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n\n // Callback called just before starting audio player\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.savingBuffer && this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n }\n }\n\n async saveBuffer(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n if (this.savingBuffer) {\n throw new Error(\"The buffer is currently saving\");\n }\n\n if (!this.bufferPlayer) {\n throw new Error(\"No buffer player was found\");\n }\n\n this.savingBuffer = true;\n\n let savingResult = false;\n\n if (!this.bufferPlayer.compatibilityMode) {\n savingResult = await this.saveBufferDirect(renderedBuffer, options);\n } else {\n savingResult = await this.saveBufferCompatibilityMode(options);\n }\n\n this.savingBuffer = false;\n\n return savingResult;\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is disabled\n * @param renderedBuffer The rendered buffer to save\n * @param options The save options\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferDirect(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!renderedBuffer || (this.contextManager && !this.contextManager.currentContext)) {\n return reject(\"No rendered buffer or AudioContext not initialized\");\n }\n\n const worker = getRecorderWorker(this.configService?.getWorkerBasePath());\n\n if (worker) {\n const buffer: Float32Array[] = [];\n\n for (let i = 0; i < renderedBuffer.numberOfChannels; i++) {\n buffer.push(renderedBuffer.getChannelData(i));\n }\n\n worker.onmessage = (e: RecorderWorkerMessage) => {\n if (e.data.command == Constants.EXPORT_WAV_COMMAND || e.data.command == Constants.EXPORT_MP3_COMMAND) {\n this.downloadAudioBlob(e.data.data, options);\n }\n\n worker.terminate();\n this.savingBuffer = false;\n resolve(true);\n };\n\n worker.postMessage({\n command: Constants.INIT_COMMAND,\n config: {\n sampleRate: renderedBuffer.sampleRate,\n numChannels: 2,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n }\n });\n\n worker.postMessage({\n command: Constants.RECORD_COMMAND,\n buffer\n });\n\n worker.postMessage({\n command: options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\" ? Constants.EXPORT_MP3_COMMAND : Constants.EXPORT_WAV_COMMAND,\n type: Constants.AUDIO_WAV\n });\n }\n });\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is enabled\n * @param options The save options - see SaveBufferOptions\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferCompatibilityMode(options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!this.bufferPlayer) {\n return reject(\"No buffer player found\");\n }\n\n this.bufferPlayer.start().then(() => {\n if (!this.configService) {\n return reject(\"No config service found\");\n }\n\n if (!this.filterManager) {\n return reject(\"No filter manager found\");\n }\n\n const rec = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: options?.format == \"mp3\" ? Constants.AUDIO_MP3 : Constants.AUDIO_WAV,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n });\n\n rec.setup(this.filterManager.currentNodes!.output).then(() => {\n rec.record();\n\n this.playingStoppedCallback = () => {\n rec.kill();\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n\n if (this.playingStoppedCallback) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n }\n\n resolve(true);\n };\n\n const finishedCallback = () => {\n if (this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n\n rec.stop();\n\n const downloadBlobCallback = (blob: Blob) => {\n this.downloadAudioBlob(blob, options);\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n }\n\n rec.kill();\n\n resolve(true);\n };\n\n if (options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\") {\n rec.exportMP3(downloadBlobCallback);\n } else {\n rec.exportWAV(downloadBlobCallback);\n }\n };\n\n if (this.eventEmitter) {\n this.eventEmitter.on(EventType.PLAYING_FINISHED, finishedCallback);\n this.eventEmitter.on(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n });\n });\n }\n\n /**\n * Download an audio Blob\n * @param blob The blob\n * @param options The save options - see SaveBufferOptions\n */\n private downloadAudioBlob(blob: Blob, options?: SaveBufferOptions) {\n utilFunctions.forceDownload(blob, \"audio-\" + new Date().toISOString() + \".\" + (options?.format || Constants.DEFAULT_SAVE_FORMAT));\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.SAVE_BUFFER_MANAGER;\n }\n}\n","/*\n * Copyright (C) 2019-2024 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The audio buffer player\n// Used to play the audio buffer, with time controls, pause/play, stop and loop\nimport { EventType } from \"../model/EventTypeEnum\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport BufferPlayerInterface from \"./interfaces/BufferPlayerInterface\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n// Also used in compatibility mode (which doesn't use audio buffer) with less functions (no time control)\n@injectable()\nexport default class BufferPlayer extends AbstractAudioElement implements BufferPlayerInterface {\n\n private _contextManager: AudioContextManagerInterface | undefined | null;\n\n private buffer: AudioBuffer | null = null;\n private source: AudioBufferSourceNode | null = null;\n currentTime = 0;\n displayTime = 0;\n duration = 0;\n private intervals: number[] = [];\n playing = false;\n loop = false;\n speedAudio = 1;\n private onBeforePlayingCallback: () => void = async () => { };\n\n compatibilityMode = false;\n currentNode: AudioNode | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined | null) {\n super();\n\n this._contextManager = contextManager;\n }\n\n init(direct?: boolean) {\n this.playing = false;\n\n if (this._contextManager && this._contextManager.currentContext) {\n this._contextManager.currentContext.resume();\n\n if (!this.compatibilityMode && this.buffer) {\n if (this.source != null && !direct) this.source.disconnect();\n this.source = this._contextManager.currentContext.createBufferSource();\n this.source.buffer = this.buffer;\n this.duration = this.buffer.duration * this.speedAudio;\n this.source.connect(this._contextManager.currentContext.destination);\n }\n }\n\n this.updateInfos();\n }\n\n loadBuffer(buffer: AudioBuffer) {\n this.compatibilityMode = false;\n this.reset();\n this.buffer = buffer;\n this.init();\n }\n\n setCompatibilityMode(currentNode: AudioNode, duration?: number) {\n this.compatibilityMode = true;\n this.reset();\n this.init();\n\n if (duration != null) {\n this.duration = duration * this.speedAudio;\n }\n\n this.currentNode = currentNode;\n this.updateInfos();\n }\n\n reset(direct?: boolean) {\n this.clearIntervals();\n\n this.currentTime = 0;\n this.displayTime = 0;\n\n if (!direct) {\n this.stop();\n }\n }\n\n stop() {\n this.clearIntervals();\n\n if (this.source != undefined && this.source != null && this.playing) {\n this.source.stop(0);\n this.playing = false;\n }\n\n if (this.currentNode) {\n this.currentNode.disconnect();\n\n if (this.compatibilityMode) {\n this.currentTime = 0;\n this.displayTime = 0;\n }\n }\n\n this.eventEmitter?.emit(EventType.PLAYING_STOPPED);\n this.updateInfos();\n }\n\n /**\n * Clear old intervals\n */\n private clearIntervals() {\n for (const interval of this.intervals) {\n clearInterval(interval);\n }\n\n this.intervals = [];\n }\n\n async start(direct?: boolean) {\n if (this.source || this.compatibilityMode) {\n if (!direct) {\n this.stop();\n }\n\n this.init(direct);\n\n await this.onBeforePlayingCallback();\n\n this.eventEmitter?.emit(EventType.PLAYING_STARTED);\n\n if (!this.compatibilityMode) {\n if (this.source) {\n this.source.start(0, direct ? 0 : this.currentTime / this.speedAudio);\n this.playing = true;\n } else {\n return;\n }\n } else {\n if (this.currentNode && this._contextManager && this._contextManager.currentContext) {\n this.currentNode.connect(this._contextManager.currentContext.destination);\n } else {\n return;\n }\n }\n\n let startTime = performance.now();\n\n this.intervals.push(window.setInterval(() => {\n const timeNow = performance.now();\n const nextTime = timeNow - startTime;\n startTime = timeNow;\n\n this.currentTime += (nextTime / 1000) * this.speedAudio;\n this.displayTime = this.currentTime;\n\n if (this.currentTime > this.duration) {\n if (this.loop) {\n if (!this.compatibilityMode) {\n this.reset(direct);\n this.start();\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n }\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n this.reset(direct);\n }\n } else {\n this.updateInfos();\n }\n }, 100));\n }\n }\n\n async playDirect() {\n if (!this.compatibilityMode) {\n this.start(true);\n } else {\n // Play direct is not possible when compatibility mode is enabled\n this.start(false);\n }\n }\n\n pause() {\n this.stop();\n }\n\n /** Send an event to update the informations of this player */\n private updateInfos() {\n this.eventEmitter?.emit(EventType.PLAYING_UPDATE);\n }\n\n setTimePercent(percent: number) {\n if (!this.compatibilityMode) {\n this.currentTime = Math.round(this.duration * (percent / 100));\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n setTime(time: number) {\n if (!this.compatibilityMode) {\n this.currentTime = time;\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n onBeforePlaying(callback: () => void) {\n this.onBeforePlayingCallback = callback;\n }\n\n toggleLoop() {\n this.loop = !this.loop;\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n get currentTimeDisplay() {\n return (\"0\" + Math.trunc(this.displayTime / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.displayTime % 60)).slice(-2);\n }\n\n get maxTimeDisplay() {\n return (\"0\" + Math.trunc(this.duration / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.duration % 60)).slice(-2);\n }\n\n get percent() {\n return (100 - Math.round((this.duration - this.displayTime) / this.duration * 100));\n }\n\n get remainingTimeDisplay() {\n return (\"0\" + Math.trunc((this.duration - this.displayTime) / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc((this.duration - this.displayTime) % 60)).slice(-2);\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_PLAYER;\n }\n}\n","import { EventType } from \"../model/EventTypeEnum\";\nimport type { ConfigService } from \"./interfaces/ConfigService\";\nimport utilFunctions from \"../utils/Functions\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport BufferFetcherServiceInterface from \"./interfaces/BufferFetcherServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferFetcherService implements BufferFetcherServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private buffers: Map = new Map();\n private bufferErrors: string[] = [];\n private eventEmitter: EventEmitterInterface | null;\n private configService: ConfigService | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.ConfigService) configService: ConfigService,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n }\n\n async fetchBuffer(bufferURI: string, force?: boolean) {\n const realBufferURI = (this.configService ? this.configService.getSoundBasePath() : \"\") + bufferURI;\n\n if(this.buffers.get(this.getKeyFromLocation(realBufferURI)) != null && !force) {\n return;\n }\n\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS, realBufferURI);\n\n try {\n const response = await fetch(realBufferURI);\n\n if(!response.ok) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n } else {\n const arrayBuffer = await response.arrayBuffer();\n\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await this.contextManager.currentContext.decodeAudioData(arrayBuffer);\n this.buffers.set(this.getKeyFromLocation(realBufferURI), utilFunctions.decodeBuffer(this.contextManager.currentContext, buffer));\n }\n }\n \n this.eventEmitter?.emit(EventType.FINISHED_FETCHING_BUFFERS, realBufferURI);\n } catch(e) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n }\n }\n\n async fetchAllBuffers(bufferURIs: string[]) {\n for(const uri of bufferURIs) {\n await this.fetchBuffer(uri);\n }\n }\n\n getAudioBuffer(filename: string): AudioBuffer | undefined {\n return this.buffers.get(this.getKeyFromLocation(filename));\n }\n\n async getOrFetchAudioBuffer(filename: string): Promise {\n if(this.getAudioBuffer(filename) == null) {\n await this.fetchBuffer(filename);\n }\n\n return this.getAudioBuffer(filename);\n }\n\n getDownloadedBuffersList(): string[] {\n return Array.from(this.buffers.keys());\n }\n\n private getKeyFromLocation(location: string) {\n return location.substring(location.lastIndexOf(\"/\") + 1);\n }\n\n reset() {\n this.buffers.clear();\n }\n}\n","import type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport utilFunctions from \"../utils/Functions\";\nimport BufferDecoderServiceInterface from \"./interfaces/BufferDecoderServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferDecoderService implements BufferDecoderServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private eventEmitter: EventEmitterInterface | null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n }\n\n async decodeBufferFromFile(file: File): Promise {\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODING_AUDIO_FILE);\n }\n\n try {\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await utilFunctions.loadAudioBuffer(this.contextManager.currentContext, file);\n \n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n }\n \n return buffer;\n }\n } catch (e) {\n console.error(e);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n this.eventEmitter.emit(EventType.ERROR_DECODING_AUDIO_FILE);\n }\n }\n\n return null;\n }\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\n\nexport default abstract class AbstractAudioRenderer extends AbstractAudioElement {\n\n /** Render an AudioBuffer based on another input AudioBuffer */\n abstract renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise;\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\nimport { AudioFilterNodes } from \"../../model/AudioNodes\";\nimport { FilterSettingValue, FilterSettings } from \"../../model/filtersSettings/FilterSettings\";\n\nexport default abstract class AbstractAudioFilter extends AbstractAudioElement {\n\n /** The default settings */\n private defaultSettings: FilterSettings | null = null;\n\n /** Total sample of the input audio buffer */\n protected _totalSamples = 0;\n\n /** Return a input and output AudioNode of the filter */\n abstract getNode(context: BaseAudioContext): AudioFilterNodes;\n\n /** Return an object with current settings of this filter */\n abstract getSettings(): FilterSettings;\n\n /** Set a filter setting */\n abstract setSetting(settingId: string, value: FilterSettingValue): Promise;\n\n /** Get the amount of time this filter add to the audio */\n getAddingTime(): number {\n return 0;\n }\n\n /** Store the default settings */\n public initializeDefaultSettings() {\n this.defaultSettings = this.getSettings();\n }\n\n /** Returns the default settings of this filter */\n public getDefaultSettings() {\n return this.defaultSettings;\n }\n\n /** Reset the default settings of this filter */\n public async resetSettings() {\n if (this.defaultSettings) {\n for (const key in this.defaultSettings) {\n if (this.defaultSettings && typeof (this.defaultSettings[key]) !== \"undefined\") {\n await this.setSetting(key, this.defaultSettings[key]);\n }\n }\n }\n }\n\n /** Return if the current filter use an audio worklet */\n public isWorklet() {\n return false;\n }\n\n /**\n * Called when the buffer fetcher was reseted\n * @returns boolean\n */\n public async bufferFetcherReseted(): Promise {\n return false;\n }\n\n set totalSamples(value: number) {\n this._totalSamples = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * This class is a polyfill for the standard web AudioParam class used by worklets\n */\nexport default class AudioParamPolyfill implements AudioParam {\n private _value: number = 0;\n private _minValue: number = 0;\n private _maxValue: number = Number.MAX_SAFE_INTEGER;\n private _defaultValue: number = 0;\n private context: BaseAudioContext | null = null;\n automationRate: AutomationRate = \"a-rate\";\n\n constructor(context: BaseAudioContext, defaultValue?: number) {\n this._defaultValue = defaultValue !== undefined ? defaultValue : 0;\n this._value = this._defaultValue;\n this.context = context;\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(newValue: number) {\n this._value = Math.max(this._minValue, Math.min(this._maxValue, newValue));\n }\n\n get minValue(): number {\n return this._minValue;\n }\n\n get maxValue(): number {\n return this._maxValue;\n }\n\n get defaultValue(): number {\n return this._defaultValue;\n }\n\n setValueAtTime(value: number, startTime: number): AudioParam {\n console.warn(\"setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n linearRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n exponentialRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n cancelAndHoldAtTime(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n cancelScheduledValues(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setValueCurveAtTime(values: unknown, startTime: unknown, duration: unknown): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\nimport AudioParamPolyfill from \"./AudioParamPolyfill\";\nimport Functions from \"../utils/Functions\";\n\n/**\n * This class convert an audio worklet processor node to a script processor node\n * automagically. Highly experimental, and might not work with some WorkletProcessor\n */\nexport default class WorkletScriptProcessorNodeAdapter {\n\n private workletProcessor: SimpleAudioWorkletProcessor;\n private _parameters = new Map();\n private _port: MessagePort | null = null;\n private _scriptProcessorNode: ScriptProcessorNode | null;\n private currentContext: BaseAudioContext | null = null;\n\n constructor(context: BaseAudioContext, node: SimpleAudioWorkletProcessor, bufferSize?: number) {\n this.workletProcessor = node;\n this.currentContext = context;\n\n // Create a ScriptProcessorNode with the same number of input and output channels\n this._scriptProcessorNode = context.createScriptProcessor(\n bufferSize,\n 2,\n 2\n );\n\n this.setupPort();\n this.setupProcessor();\n this.setupWorkletScope(context);\n }\n\n private setupPort(): void {\n const messageChannel = new MessageChannel();\n\n messageChannel.port1.onmessage = (ev) => {\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.postMessage(ev.data);\n }\n };\n\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.onmessage = (ev) => {\n messageChannel.port1.postMessage(ev.data);\n };\n }\n\n this._port = messageChannel.port2;\n }\n\n private setupProcessor() {\n if(!this._scriptProcessorNode) {\n return;\n }\n\n this._scriptProcessorNode.onaudioprocess = (ev: AudioProcessingEvent) => {\n if(this.workletProcessor) {\n const inputArray = [Functions.convertAudioBufferToFloat32Array(ev.inputBuffer)];\n const ouputArray = [Functions.convertAudioBufferToFloat32Array(ev.outputBuffer)];\n\n const records: [string, Float32Array][] = [];\n\n for (const [key, value] of this._parameters.entries()) {\n records.push([key, Functions.convertAudioParamToFloat32Array(value, 1)]);\n }\n\n const recordsMap: Record = Object.fromEntries(records);\n \n this.workletProcessor.process(inputArray, ouputArray, recordsMap);\n }\n };\n\n const descriptors = this.workletProcessor.defaultParameterDescriptors;\n\n if(descriptors) {\n descriptors.forEach(descriptor => {\n if(this.currentContext) {\n this._parameters.set(descriptor.name, new AudioParamPolyfill(this.currentContext, descriptor.defaultValue));\n }\n });\n }\n }\n\n private setupWorkletScope(context: BaseAudioContext) {\n if(typeof(window) !== \"undefined\") {\n window.sampleRate = context.sampleRate;\n }\n }\n\n get port() {\n return this._port;\n }\n\n get parameters(): AudioParamMap {\n return this._parameters;\n }\n\n get node() {\n return this._scriptProcessorNode;\n }\n\n get context() {\n return this._scriptProcessorNode?.context;\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\n/**\n * Polyfill for registerProcessor method used in AudioWorklets\n */\nexport default class RegisterProcessorPolyfill {\n\n private static processorsMap = new Map();\n\n static registerProcessor(processorName: string, processorClass: typeof SimpleAudioWorkletProcessor) {\n RegisterProcessorPolyfill.processorsMap.set(processorName, processorClass);\n }\n\n static getProcessor(processorName: string): SimpleAudioWorkletProcessor | null {\n const processor = RegisterProcessorPolyfill.processorsMap.get(processorName);\n\n if(processor) {\n return new processor();\n }\n\n return null;\n }\n};\n","/**\n * This class is the standard AudioWorkletProcessor interface\n */\nexport interface AudioWorkletProcessorInterface {\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean;\n get parameters(): AudioParamMap;\n get parameterDescriptors(): AudioParamMap;\n messageProcessor?: (event: MessageEvent) => void;\n}\n\ntype ParameterDescriptors = {\n name: string;\n defaultValue: number;\n}[];\n\n/**\n * This class is a polyfill for the AudioWorkletProcessor interface\n */\nexport default class SimpleAudioWorkletProcessor implements AudioWorkletProcessorInterface {\n private messageChannel: MessageChannel | null = null;\n messageProcessor?: ((event: MessageEvent) => void) | undefined;\n\n constructor() {\n this.messageChannel = new MessageChannel();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n return true;\n }\n\n get port(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port1;\n }\n\n get port2(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port2;\n }\n\n get parameters(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get parameterDescriptors(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get defaultParameterDescriptors(): ParameterDescriptors {\n return [];\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RegisterProcessorPolyfill from \"./RegisterProcessorPolyfill\";\nimport SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\nif(typeof(window) !== \"undefined\" && !(\"AudioWorkletProcessor\" in window)) {\n (window as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (window as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n\nif(typeof(global) !== \"undefined\" && !(\"AudioWorkletProcessor\" in global)) {\n (global as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (global as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n","import WorkletScriptProcessorNodeAdapter from \"../../workletPolyfill/WorkletScriptProcessorNodeAdapter\";\nimport AbstractAudioFilter from \"./AbstractAudioFilter\";\nimport Constants from \"../../model/Constants\";\nimport \"../../workletPolyfill/AudioWorkletProcessorPolyfill\";\nimport RegisterProcessorPolyfill from \"../../workletPolyfill/RegisterProcessorPolyfill\";\nimport utilFunctions from \"../../utils/Functions\";\n\nexport default abstract class AbstractAudioFilterWorklet extends AbstractAudioFilter {\n\n protected currentWorkletNode: AudioWorkletNode | WorkletScriptProcessorNodeAdapter | null = null;\n\n protected fallbackToScriptProcessor = false;\n\n protected keepCurrentNodeIfPossible = false;\n\n /**\n * Return the worklet name (as registered with method registerProcessor)\n */\n abstract get workletName(): string;\n\n /**\n * Return the path to worklet file\n */\n abstract get workletPath(): string;\n\n /**\n * Receive event from the worklet\n */\n abstract receiveEvent(message: MessageEvent): void;\n\n /**\n * Initialize the audio worklet by loading the module\n * @param audioContext The audio context\n */\n async initializeWorklet(audioContext: BaseAudioContext): Promise {\n this.stop();\n\n if (!utilFunctions.isAudioWorkletCompatible(audioContext)) {\n console.error(\"Audio Worklets not supported on this browser. Fallback to ScriptProcessor\");\n this.fallbackToScriptProcessor = true;\n return;\n }\n\n const workletPath = (this.configService ? this.configService.getWorkletBasePath() : \"\") + this.workletPath;\n\n await audioContext.audioWorklet.addModule(workletPath)\n .catch(e => {\n console.error(`Error when loading Worklet (${workletPath}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`, e);\n this.fallbackToScriptProcessor = true;\n });\n }\n\n /**\n * This method checks if audio worklet are enabled\n * @param audioContext \n */\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n /**\n * Initialize the AudioWorkletNode or fallback to ScriptProcessorNode\n * @param context The audio context\n * @param workletName The worklet name\n */\n private initializeNode(context: BaseAudioContext, workletName: string) {\n if (this.isAudioWorkletEnabled() && !this.fallbackToScriptProcessor) {\n // Standard Audio Worklet\n this.currentWorkletNode = new AudioWorkletNode(context, workletName);\n } else {\n // Fallback to ScriptProcessorNode (polyfill)\n const processor = RegisterProcessorPolyfill.getProcessor(workletName);\n\n if (processor) {\n this.currentWorkletNode = new WorkletScriptProcessorNodeAdapter(context, processor, this.configService!.getBufferSize());\n } else {\n throw new Error(`No processor registered with name ${workletName} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);\n }\n }\n\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.onmessage = message => this.receiveEvent(message);\n }\n }\n\n /**\n * Apply current settings to the audio worklet node.\n * Uses the getSettings method to extract the settings.\n */\n protected applyCurrentSettingsToWorklet() {\n if (this.currentWorkletNode && this.currentWorkletNode.parameters) {\n const currentSettings = this.getSettings();\n\n for (const settingKey of Object.keys(currentSettings)) {\n const settingFromWorklet = this.currentWorkletNode.parameters.get(settingKey);\n\n if (settingFromWorklet) {\n settingFromWorklet.value = currentSettings[settingKey] as number;\n settingFromWorklet.setValueAtTime(currentSettings[settingKey] as number, 0);\n }\n }\n }\n }\n\n /** Default implementation for GetNode - AbstractAudioFilterWorklet */\n getNode(context: BaseAudioContext) {\n if (!this.keepCurrentNodeIfPossible || !this.currentWorkletNode\n || this.currentWorkletNode.context != context) {\n this.stop();\n this.initializeNode(context, this.workletName);\n }\n\n this.applyCurrentSettingsToWorklet();\n this.setEnabled(this.isEnabled());\n\n if (this.currentWorkletNode) {\n if (this.currentWorkletNode instanceof WorkletScriptProcessorNodeAdapter) {\n return {\n input: this.currentWorkletNode.node!,\n output: this.currentWorkletNode.node!,\n };\n } else {\n return {\n input: this.currentWorkletNode,\n output: this.currentWorkletNode,\n };\n }\n }\n\n throw new Error(\"Worklet node has not yet been created\");\n }\n\n /**\n * Stop the current worklet node. The worklet need to respond to \"stop\" events.\n */\n stop() {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(\"stop\");\n this.currentWorkletNode.port.onmessage = null;\n }\n\n this.currentWorkletNode = null;\n }\n\n /**\n * Pass the current disabled/enabled state to the worklet.\n * The worklet need to respond to \"enable\"/\"disable\" events.\n * @param state The current disabled/enabled state\n */\n setEnabled(state: boolean): void {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(state ? \"enable\" : \"disable\");\n }\n\n super.setEnabled(state);\n }\n\n public isWorklet(): boolean {\n return true;\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass BitCrusherProcessor extends AudioWorkletProcessor {\n private stopped = false;\n private phaser: number[] | null = null;\n private last: number[] | null = null;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"bits\", defaultValue: 16 },\n { name: \"normFreq\", defaultValue: 0.9 },\n ];\n }\n\n get defaultParameterDescriptors() {\n return BitCrusherProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n const step = 2 * Math.pow(1 / 2, parameters.bits[0]);\n const currentNormFreq = (1 - parameters.normFreq[0]) / (sampleRate / 48000);\n\n if (this.last == null) {\n this.last = new Array(input.length).fill(0);\n }\n\n if (this.phaser == null) {\n this.phaser = new Array(input.length).fill(0);\n }\n\n if (input && input[0]) {\n const blockSize = input[0].length;\n\n for (let channel = 0; channel < input.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp && out) {\n for (let i = 0; i < blockSize; i++) {\n this.phaser[channel] += currentNormFreq;\n\n if (this.phaser[channel] >= 1.0) {\n this.phaser[channel] -= 1.0;\n this.last[channel] = step * Math.floor((inp[i] * (1 / step)) + 0.5);\n }\n\n out[i] = this.last[channel];\n }\n }\n }\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n this.phaser = null;\n this.last = null;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.BITCRUSHER, BitCrusherProcessor);\n","export default class DelayBuffer {\n private _array: Float32Array = new Float32Array();\n private n: number = 0;\n private length: number = 0;\n private readPointer: number = 0;\n private writePointer: number = 0;\n\n constructor(n: number) {\n this.n = Math.floor(n);\n this.init();\n }\n\n init() {\n this._array = new Float32Array(2 * this.n);\n this.length = this._array.length;\n this.readPointer = 0;\n this.writePointer = this.n - 1;\n this._array.fill(0);\n }\n\n read() {\n const value = this._array[this.readPointer % this.length];\n this.readPointer = (this.readPointer + 1) % this.length;\n return value;\n }\n\n push(v: number) {\n this._array[this.writePointer % this.length] = v;\n this.writePointer = (this.writePointer + 1) % this.length;\n }\n\n reset() {\n this.init();\n }\n\n clear() {\n this._array = new Float32Array();\n this.length = 0;\n this.readPointer = 0;\n this.writePointer = 0;\n }\n\n sum() {\n return this._array.reduce((a, b) => a + b, 0);\n }\n}\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// Source: https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/ (https://web.archive.org/web/20220519100003/https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/)\n// Original code: https://webaudiotech.com/sites/limiter_comparison/limiter.js\n// Additions by Eliastik (eliastiksofts.com): Stereo and multi-channel support, code simplified in one object class (Limiter), converted into AudioWorklet\nimport Constants from \"../../model/Constants\";\nimport DelayBuffer from \"../../utils/DelayBuffer\";\n\nclass LimiterProcessor extends AudioWorkletProcessor {\n private delayBuffer: DelayBuffer[] = [];\n private envelopeSample = 0;\n private stopped = false;\n private disabled = false;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"reset\") {\n this.reset();\n } else if (event.data == \"stop\") {\n this.stop();\n } else if (event.data == \"disable\") {\n this.disabled = true;\n } else if (event.data == \"enable\") {\n this.disabled = false;\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"preGain\", defaultValue: 0 },\n { name: \"postGain\", defaultValue: 0 },\n { name: \"attackTime\", defaultValue: 0 },\n { name: \"releaseTime\", defaultValue: 3 },\n { name: \"threshold\", defaultValue: -0.05 },\n { name: \"lookAheadTime\", defaultValue: 0 }\n ];\n }\n\n get defaultParameterDescriptors() {\n return LimiterProcessor.parameterDescriptors;\n }\n\n getEnvelope(data: Float32Array, attackTime: number, releaseTime: number, sampleRate: number) {\n const attackGain = Math.exp(-1 / (sampleRate * attackTime));\n const releaseGain = Math.exp(-1 / (sampleRate * releaseTime));\n\n const envelope = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n const envIn = Math.abs(data[i]);\n\n if (this.envelopeSample < envIn) {\n this.envelopeSample = envIn + attackGain * (this.envelopeSample - envIn);\n } else {\n this.envelopeSample = envIn + releaseGain * (this.envelopeSample - envIn);\n }\n\n envelope[i] = this.envelopeSample;\n }\n\n return envelope;\n }\n\n getMaxEnvelope(envelope: Float32Array[], channels: number, index: number) {\n let max = envelope[0][index];\n\n for (let channel = 0; channel < channels; channel++) {\n if (envelope[channel][index] > max) {\n max = envelope[channel][index];\n }\n }\n\n return max;\n }\n\n ampToDB(value: number) {\n return 20 * Math.log10(value);\n }\n\n dBToAmp(db: number) {\n return Math.pow(10, db / 20);\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const inputBuffer = inputs[0];\n const outputBuffer = outputs[0];\n const envelopeData = [];\n\n // transform db to amplitude value\n const postGainAmp = this.dBToAmp(parameters.postGain[0]);\n const preGainAmp = this.dBToAmp(parameters.preGain[0]);\n\n // apply pre gain to signal\n // compute the envelope for each channel\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n // create a delay buffer\n if (this.delayBuffer[channel] == null) {\n this.delayBuffer[channel] = new DelayBuffer(parameters.lookAheadTime[0] * sampleRate);\n }\n\n // apply pre gain to signal\n if (inp && out) {\n for (let k = 0; k < inp.length; ++k) {\n if (!this.disabled) {\n out[k] = preGainAmp * inp[k];\n } else {\n out[k] = inp[k];\n }\n }\n }\n\n // compute the envelope\n if (!this.disabled && out) {\n envelopeData[channel] = this.getEnvelope(out, parameters.attackTime[0], parameters.releaseTime[0], sampleRate);\n }\n }\n\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n if (parameters.lookAheadTime[0] > 0 && out) {\n // write signal into buffer and read delayed signal\n for (let i = 0; i < out.length; i++) {\n this.delayBuffer[channel].push(out[i]);\n out[i] = this.delayBuffer[channel].read();\n }\n }\n\n // If disabled we don't apply the limitation to the audio\n if (this.disabled) {\n continue;\n }\n\n // limiter mode: slope is 1\n const slope = 1;\n\n if (inp && out) {\n for (let i = 0; i < inp.length; i++) {\n let gainDB = slope * (parameters.threshold[0] - this.ampToDB(this.getMaxEnvelope(envelopeData, outputBuffer.length, i))); // max gain\n\n // is gain below zero?\n gainDB = Math.min(0, gainDB);\n const gain = this.dBToAmp(gainDB);\n out[i] *= (gain * postGainAmp);\n }\n }\n }\n\n return true;\n }\n\n reset() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].reset();\n }\n }\n\n this.envelopeSample = 0;\n }\n\n stop() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].clear();\n }\n }\n\n this.delayBuffer = [];\n this.envelopeSample = 0;\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.LIMITER, LimiterProcessor);\n","/*\n * SoundTouch JS v0.1.30 audio processing library\n * Copyright (c) Olli Parviainen\n * Copyright (c) Ryan Berdeen\n * Copyright (c) Jakub Fiala\n * Copyright (c) Steve 'Cutter' Blades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n */\n\nclass FifoSampleBuffer {\n constructor() {\n this._vector = new Float32Array();\n this._position = 0;\n this._frameCount = 0;\n }\n get vector() {\n return this._vector;\n }\n get position() {\n return this._position;\n }\n get startIndex() {\n return this._position * 2;\n }\n get frameCount() {\n return this._frameCount;\n }\n get endIndex() {\n return (this._position + this._frameCount) * 2;\n }\n clear() {\n this.receive(this._frameCount);\n this.rewind();\n }\n put(numFrames) {\n this._frameCount += numFrames;\n }\n putSamples(samples, position, numFrames = 0) {\n position = position || 0;\n const sourceOffset = position * 2;\n if (!(numFrames >= 0)) {\n numFrames = (samples.length - sourceOffset) / 2;\n }\n const numSamples = numFrames * 2;\n this.ensureCapacity(numFrames + this._frameCount);\n const destOffset = this.endIndex;\n this.vector.set(samples.subarray(sourceOffset, sourceOffset + numSamples), destOffset);\n this._frameCount += numFrames;\n }\n putBuffer(buffer, position, numFrames = 0) {\n position = position || 0;\n if (!(numFrames >= 0)) {\n numFrames = buffer.frameCount - position;\n }\n this.putSamples(buffer.vector, buffer.position + position, numFrames);\n }\n receive(numFrames) {\n if (!(numFrames >= 0) || numFrames > this._frameCount) {\n numFrames = this.frameCount;\n }\n this._frameCount -= numFrames;\n this._position += numFrames;\n }\n receiveSamples(output, numFrames = 0) {\n const numSamples = numFrames * 2;\n const sourceOffset = this.startIndex;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n this.receive(numFrames);\n }\n extract(output, position = 0, numFrames = 0) {\n const sourceOffset = this.startIndex + position * 2;\n const numSamples = numFrames * 2;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n }\n ensureCapacity(numFrames = 0) {\n const minLength = parseInt(numFrames * 2);\n if (this._vector.length < minLength) {\n const newVector = new Float32Array(minLength);\n newVector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._vector = newVector;\n this._position = 0;\n } else {\n this.rewind();\n }\n }\n ensureAdditionalCapacity(numFrames = 0) {\n this.ensureCapacity(this._frameCount + numFrames);\n }\n rewind() {\n if (this._position > 0) {\n this._vector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._position = 0;\n }\n }\n}\n\nclass AbstractFifoSamplePipe {\n constructor(createBuffers) {\n if (createBuffers) {\n this._inputBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n } else {\n this._inputBuffer = this._outputBuffer = null;\n }\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n set inputBuffer(inputBuffer) {\n this._inputBuffer = inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n set outputBuffer(outputBuffer) {\n this._outputBuffer = outputBuffer;\n }\n clear() {\n this._inputBuffer.clear();\n this._outputBuffer.clear();\n }\n}\n\nclass RateTransposer extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this.reset();\n this._rate = 1;\n }\n set rate(rate) {\n this._rate = rate;\n }\n reset() {\n this.slopeCount = 0;\n this.prevSampleL = 0;\n this.prevSampleR = 0;\n }\n clone() {\n const result = new RateTransposer();\n result.rate = this._rate;\n return result;\n }\n process() {\n const numFrames = this._inputBuffer.frameCount;\n this._outputBuffer.ensureAdditionalCapacity(numFrames / this._rate + 1);\n const numFramesOutput = this.transpose(numFrames);\n this._inputBuffer.receive();\n this._outputBuffer.put(numFramesOutput);\n }\n transpose(numFrames = 0) {\n if (numFrames === 0) {\n return 0;\n }\n const src = this._inputBuffer.vector;\n const srcOffset = this._inputBuffer.startIndex;\n const dest = this._outputBuffer.vector;\n const destOffset = this._outputBuffer.endIndex;\n let used = 0;\n let i = 0;\n while (this.slopeCount < 1.0) {\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * this.prevSampleL + this.slopeCount * src[srcOffset];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * this.prevSampleR + this.slopeCount * src[srcOffset + 1];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n this.slopeCount -= 1.0;\n if (numFrames !== 1) {\n out: while (true) {\n while (this.slopeCount > 1.0) {\n this.slopeCount -= 1.0;\n used = used + 1;\n if (used >= numFrames - 1) {\n break out;\n }\n }\n const srcIndex = srcOffset + 2 * used;\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * src[srcIndex] + this.slopeCount * src[srcIndex + 2];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * src[srcIndex + 1] + this.slopeCount * src[srcIndex + 3];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n }\n this.prevSampleL = src[srcOffset + 2 * numFrames - 2];\n this.prevSampleR = src[srcOffset + 2 * numFrames - 1];\n return i;\n }\n}\n\nclass FilterSupport {\n constructor(pipe) {\n this._pipe = pipe;\n }\n get pipe() {\n return this._pipe;\n }\n get inputBuffer() {\n return this._pipe.inputBuffer;\n }\n get outputBuffer() {\n return this._pipe.outputBuffer;\n }\n fillInputBuffer() {\n throw new Error('fillInputBuffer() not overridden');\n }\n fillOutputBuffer(numFrames = 0) {\n while (this.outputBuffer.frameCount < numFrames) {\n const numInputFrames = 8192 * 2 - this.inputBuffer.frameCount;\n this.fillInputBuffer(numInputFrames);\n if (this.inputBuffer.frameCount < 8192 * 2) {\n break;\n }\n this._pipe.process();\n }\n }\n clear() {\n this._pipe.clear();\n }\n}\n\nconst noop = function () {\n return;\n};\n\nclass SimpleFilter extends FilterSupport {\n constructor(sourceSound, pipe, callback = noop) {\n super(pipe);\n this.callback = callback;\n this.sourceSound = sourceSound;\n this.historyBufferSize = 22050;\n this._sourcePosition = 0;\n this.outputBufferPosition = 0;\n this._position = 0;\n }\n get position() {\n return this._position;\n }\n set position(position) {\n if (position > this._position) {\n throw new RangeError('New position may not be greater than current position');\n }\n const newOutputBufferPosition = this.outputBufferPosition - (this._position - position);\n if (newOutputBufferPosition < 0) {\n throw new RangeError('New position falls outside of history buffer');\n }\n this.outputBufferPosition = newOutputBufferPosition;\n this._position = position;\n }\n get sourcePosition() {\n return this._sourcePosition;\n }\n set sourcePosition(sourcePosition) {\n this.clear();\n this._sourcePosition = sourcePosition;\n }\n onEnd() {\n this.callback();\n }\n fillInputBuffer(numFrames = 0) {\n const samples = new Float32Array(numFrames * 2);\n const numFramesExtracted = this.sourceSound.extract(samples, numFrames, this._sourcePosition);\n this._sourcePosition += numFramesExtracted;\n this.inputBuffer.putSamples(samples, 0, numFramesExtracted);\n }\n extract(target, numFrames = 0) {\n this.fillOutputBuffer(this.outputBufferPosition + numFrames);\n const numFramesExtracted = Math.min(numFrames, this.outputBuffer.frameCount - this.outputBufferPosition);\n this.outputBuffer.extract(target, this.outputBufferPosition, numFramesExtracted);\n const currentFrames = this.outputBufferPosition + numFramesExtracted;\n this.outputBufferPosition = Math.min(this.historyBufferSize, currentFrames);\n this.outputBuffer.receive(Math.max(currentFrames - this.historyBufferSize, 0));\n this._position += numFramesExtracted;\n return numFramesExtracted;\n }\n handleSampleData(event) {\n this.extract(event.data, 4096);\n }\n clear() {\n super.clear();\n this.outputBufferPosition = 0;\n }\n}\n\nconst USE_AUTO_SEQUENCE_LEN = 0;\nconst DEFAULT_SEQUENCE_MS = USE_AUTO_SEQUENCE_LEN;\nconst USE_AUTO_SEEKWINDOW_LEN = 0;\nconst DEFAULT_SEEKWINDOW_MS = USE_AUTO_SEEKWINDOW_LEN;\nconst DEFAULT_OVERLAP_MS = 8;\nconst _SCAN_OFFSETS = [[124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806, 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0], [-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];\nconst AUTOSEQ_TEMPO_LOW = 0.5;\nconst AUTOSEQ_TEMPO_TOP = 2.0;\nconst AUTOSEQ_AT_MIN = 125.0;\nconst AUTOSEQ_AT_MAX = 50.0;\nconst AUTOSEQ_K = (AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEQ_C = AUTOSEQ_AT_MIN - AUTOSEQ_K * AUTOSEQ_TEMPO_LOW;\nconst AUTOSEEK_AT_MIN = 25.0;\nconst AUTOSEEK_AT_MAX = 15.0;\nconst AUTOSEEK_K = (AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEEK_C = AUTOSEEK_AT_MIN - AUTOSEEK_K * AUTOSEQ_TEMPO_LOW;\nclass Stretch extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this._quickSeek = true;\n this.midBufferDirty = false;\n this.midBuffer = null;\n this.overlapLength = 0;\n this.autoSeqSetting = true;\n this.autoSeekSetting = true;\n this._tempo = 1;\n this.setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);\n }\n clear() {\n super.clear();\n this.clearMidBuffer();\n }\n clearMidBuffer() {\n if (this.midBufferDirty) {\n this.midBufferDirty = false;\n this.midBuffer = null;\n }\n }\n setParameters(sampleRate, sequenceMs, seekWindowMs, overlapMs) {\n if (sampleRate > 0) {\n this.sampleRate = sampleRate;\n }\n if (overlapMs > 0) {\n this.overlapMs = overlapMs;\n }\n if (sequenceMs > 0) {\n this.sequenceMs = sequenceMs;\n this.autoSeqSetting = false;\n } else {\n this.autoSeqSetting = true;\n }\n if (seekWindowMs > 0) {\n this.seekWindowMs = seekWindowMs;\n this.autoSeekSetting = false;\n } else {\n this.autoSeekSetting = true;\n }\n this.calculateSequenceParameters();\n this.calculateOverlapLength(this.overlapMs);\n this.tempo = this._tempo;\n }\n set tempo(newTempo) {\n let intskip;\n this._tempo = newTempo;\n this.calculateSequenceParameters();\n this.nominalSkip = this._tempo * (this.seekWindowLength - this.overlapLength);\n this.skipFract = 0;\n intskip = Math.floor(this.nominalSkip + 0.5);\n this.sampleReq = Math.max(intskip + this.overlapLength, this.seekWindowLength) + this.seekLength;\n }\n get tempo() {\n return this._tempo;\n }\n get inputChunkSize() {\n return this.sampleReq;\n }\n get outputChunkSize() {\n return this.overlapLength + Math.max(0, this.seekWindowLength - 2 * this.overlapLength);\n }\n calculateOverlapLength(overlapInMsec = 0) {\n let newOvl;\n newOvl = this.sampleRate * overlapInMsec / 1000;\n newOvl = newOvl < 16 ? 16 : newOvl;\n newOvl -= newOvl % 8;\n this.overlapLength = newOvl;\n this.refMidBuffer = new Float32Array(this.overlapLength * 2);\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n }\n checkLimits(x, mi, ma) {\n return x < mi ? mi : x > ma ? ma : x;\n }\n calculateSequenceParameters() {\n let seq;\n let seek;\n if (this.autoSeqSetting) {\n seq = AUTOSEQ_C + AUTOSEQ_K * this._tempo;\n seq = this.checkLimits(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);\n this.sequenceMs = Math.floor(seq + 0.5);\n }\n if (this.autoSeekSetting) {\n seek = AUTOSEEK_C + AUTOSEEK_K * this._tempo;\n seek = this.checkLimits(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);\n this.seekWindowMs = Math.floor(seek + 0.5);\n }\n this.seekWindowLength = Math.floor(this.sampleRate * this.sequenceMs / 1000);\n this.seekLength = Math.floor(this.sampleRate * this.seekWindowMs / 1000);\n }\n set quickSeek(enable) {\n this._quickSeek = enable;\n }\n clone() {\n const result = new Stretch();\n result.tempo = this._tempo;\n result.setParameters(this.sampleRate, this.sequenceMs, this.seekWindowMs, this.overlapMs);\n return result;\n }\n seekBestOverlapPosition() {\n return this._quickSeek ? this.seekBestOverlapPositionStereoQuick() : this.seekBestOverlapPositionStereo();\n }\n seekBestOverlapPositionStereo() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let i = 0;\n this.preCalculateCorrelationReferenceStereo();\n bestOffset = 0;\n bestCorrelation = Number.MIN_VALUE;\n for (; i < this.seekLength; i = i + 1) {\n correlation = this.calculateCrossCorrelationStereo(2 * i, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = i;\n }\n }\n return bestOffset;\n }\n seekBestOverlapPositionStereoQuick() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let scanCount = 0;\n let correlationOffset;\n let tempOffset;\n this.preCalculateCorrelationReferenceStereo();\n bestCorrelation = Number.MIN_VALUE;\n bestOffset = 0;\n correlationOffset = 0;\n tempOffset = 0;\n for (; scanCount < 4; scanCount = scanCount + 1) {\n let j = 0;\n while (_SCAN_OFFSETS[scanCount][j]) {\n tempOffset = correlationOffset + _SCAN_OFFSETS[scanCount][j];\n if (tempOffset >= this.seekLength) {\n break;\n }\n correlation = this.calculateCrossCorrelationStereo(2 * tempOffset, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = tempOffset;\n }\n j = j + 1;\n }\n correlationOffset = bestOffset;\n }\n return bestOffset;\n }\n preCalculateCorrelationReferenceStereo() {\n let i = 0;\n let context;\n let temp;\n for (; i < this.overlapLength; i = i + 1) {\n temp = i * (this.overlapLength - i);\n context = i * 2;\n this.refMidBuffer[context] = this.midBuffer[context] * temp;\n this.refMidBuffer[context + 1] = this.midBuffer[context + 1] * temp;\n }\n }\n calculateCrossCorrelationStereo(mixingPosition, compare) {\n const mixing = this._inputBuffer.vector;\n mixingPosition += this._inputBuffer.startIndex;\n let correlation = 0;\n let i = 2;\n const calcLength = 2 * this.overlapLength;\n let mixingOffset;\n for (; i < calcLength; i = i + 2) {\n mixingOffset = i + mixingPosition;\n correlation += mixing[mixingOffset] * compare[i] + mixing[mixingOffset + 1] * compare[i + 1];\n }\n return correlation;\n }\n overlap(overlapPosition) {\n this.overlapStereo(2 * overlapPosition);\n }\n overlapStereo(inputPosition) {\n const input = this._inputBuffer.vector;\n inputPosition += this._inputBuffer.startIndex;\n const output = this._outputBuffer.vector;\n const outputPosition = this._outputBuffer.endIndex;\n let i = 0;\n let context;\n let tempFrame;\n const frameScale = 1 / this.overlapLength;\n let fi;\n let inputOffset;\n let outputOffset;\n for (; i < this.overlapLength; i = i + 1) {\n tempFrame = (this.overlapLength - i) * frameScale;\n fi = i * frameScale;\n context = 2 * i;\n inputOffset = context + inputPosition;\n outputOffset = context + outputPosition;\n output[outputOffset + 0] = input[inputOffset + 0] * fi + this.midBuffer[context + 0] * tempFrame;\n output[outputOffset + 1] = input[inputOffset + 1] * fi + this.midBuffer[context + 1] * tempFrame;\n }\n }\n process() {\n let offset;\n let temp;\n let overlapSkip;\n if (this.midBuffer === null) {\n if (this._inputBuffer.frameCount < this.overlapLength) {\n return;\n }\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n this._inputBuffer.receiveSamples(this.midBuffer, this.overlapLength);\n }\n while (this._inputBuffer.frameCount >= this.sampleReq) {\n offset = this.seekBestOverlapPosition();\n this._outputBuffer.ensureAdditionalCapacity(this.overlapLength);\n this.overlap(Math.floor(offset));\n this._outputBuffer.put(this.overlapLength);\n temp = this.seekWindowLength - 2 * this.overlapLength;\n if (temp > 0) {\n this._outputBuffer.putBuffer(this._inputBuffer, offset + this.overlapLength, temp);\n }\n const start = this._inputBuffer.startIndex + 2 * (offset + this.seekWindowLength - this.overlapLength);\n this.midBuffer.set(this._inputBuffer.vector.subarray(start, start + 2 * this.overlapLength));\n this.skipFract += this.nominalSkip;\n overlapSkip = Math.floor(this.skipFract);\n this.skipFract -= overlapSkip;\n this._inputBuffer.receive(overlapSkip);\n }\n }\n}\n\nconst testFloatEqual = function (a, b) {\n return (a > b ? a - b : b - a) > 1e-10;\n};\n\nclass SoundTouch {\n constructor() {\n this.transposer = new RateTransposer(false);\n this.stretch = new Stretch(false);\n this._inputBuffer = new FifoSampleBuffer();\n this._intermediateBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n this._rate = 0;\n this._tempo = 0;\n this.virtualPitch = 1.0;\n this.virtualRate = 1.0;\n this.virtualTempo = 1.0;\n this.calculateEffectiveRateAndTempo();\n }\n clear() {\n this.transposer.clear();\n this.stretch.clear();\n }\n clone() {\n const result = new SoundTouch();\n result.rate = this.rate;\n result.tempo = this.tempo;\n return result;\n }\n get rate() {\n return this._rate;\n }\n set rate(rate) {\n this.virtualRate = rate;\n this.calculateEffectiveRateAndTempo();\n }\n set rateChange(rateChange) {\n this._rate = 1.0 + 0.01 * rateChange;\n }\n get tempo() {\n return this._tempo;\n }\n set tempo(tempo) {\n this.virtualTempo = tempo;\n this.calculateEffectiveRateAndTempo();\n }\n set tempoChange(tempoChange) {\n this.tempo = 1.0 + 0.01 * tempoChange;\n }\n set pitch(pitch) {\n this.virtualPitch = pitch;\n this.calculateEffectiveRateAndTempo();\n }\n set pitchOctaves(pitchOctaves) {\n this.pitch = Math.exp(0.69314718056 * pitchOctaves);\n this.calculateEffectiveRateAndTempo();\n }\n set pitchSemitones(pitchSemitones) {\n this.pitchOctaves = pitchSemitones / 12.0;\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n calculateEffectiveRateAndTempo() {\n const previousTempo = this._tempo;\n const previousRate = this._rate;\n this._tempo = this.virtualTempo / this.virtualPitch;\n this._rate = this.virtualRate * this.virtualPitch;\n if (testFloatEqual(this._tempo, previousTempo)) {\n this.stretch.tempo = this._tempo;\n }\n if (testFloatEqual(this._rate, previousRate)) {\n this.transposer.rate = this._rate;\n }\n if (this._rate > 1.0) {\n if (this._outputBuffer != this.transposer.outputBuffer) {\n this.stretch.inputBuffer = this._inputBuffer;\n this.stretch.outputBuffer = this._intermediateBuffer;\n this.transposer.inputBuffer = this._intermediateBuffer;\n this.transposer.outputBuffer = this._outputBuffer;\n }\n } else {\n if (this._outputBuffer != this.stretch.outputBuffer) {\n this.transposer.inputBuffer = this._inputBuffer;\n this.transposer.outputBuffer = this._intermediateBuffer;\n this.stretch.inputBuffer = this._intermediateBuffer;\n this.stretch.outputBuffer = this._outputBuffer;\n }\n }\n }\n process() {\n if (this._rate > 1.0) {\n this.stretch.process();\n this.transposer.process();\n } else {\n this.transposer.process();\n this.stretch.process();\n }\n }\n}\n\nclass WebAudioBufferSource {\n constructor(buffer) {\n this.buffer = buffer;\n this._position = 0;\n }\n get dualChannel() {\n return this.buffer.numberOfChannels > 1;\n }\n get position() {\n return this._position;\n }\n set position(value) {\n this._position = value;\n }\n extract(target, numFrames = 0, position = 0) {\n this.position = position;\n let left = this.buffer.getChannelData(0);\n let right = this.dualChannel ? this.buffer.getChannelData(1) : this.buffer.getChannelData(0);\n let i = 0;\n for (; i < numFrames; i++) {\n target[i * 2] = left[i + position];\n target[i * 2 + 1] = right[i + position];\n }\n return Math.min(numFrames, left.length - position);\n }\n}\n\nconst getWebAudioNode = function (context, filter, sourcePositionCallback = noop, bufferSize = 4096) {\n const node = context.createScriptProcessor(bufferSize, 2, 2);\n const samples = new Float32Array(bufferSize * 2);\n node.onaudioprocess = event => {\n let left = event.outputBuffer.getChannelData(0);\n let right = event.outputBuffer.getChannelData(1);\n let framesExtracted = filter.extract(samples, bufferSize);\n sourcePositionCallback(filter.sourcePosition);\n if (framesExtracted === 0) {\n filter.onEnd();\n }\n let i = 0;\n for (; i < framesExtracted; i++) {\n left[i] = samples[i * 2];\n right[i] = samples[i * 2 + 1];\n }\n };\n return node;\n};\n\nconst pad = function (n, width, z) {\n z = z || '0';\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n};\nconst minsSecs = function (secs) {\n const mins = Math.floor(secs / 60);\n const seconds = secs - mins * 60;\n return `${mins}:${pad(parseInt(seconds), 2)}`;\n};\n\nconst onUpdate = function (sourcePosition) {\n const currentTimePlayed = this.timePlayed;\n const sampleRate = this.sampleRate;\n this.sourcePosition = sourcePosition;\n this.timePlayed = sourcePosition / sampleRate;\n if (currentTimePlayed !== this.timePlayed) {\n const timePlayed = new CustomEvent('play', {\n detail: {\n timePlayed: this.timePlayed,\n formattedTimePlayed: this.formattedTimePlayed,\n percentagePlayed: this.percentagePlayed\n }\n });\n this._node.dispatchEvent(timePlayed);\n }\n};\nclass PitchShifter {\n constructor(context, buffer, bufferSize, onEnd = noop) {\n this._soundtouch = new SoundTouch();\n const source = new WebAudioBufferSource(buffer);\n this.timePlayed = 0;\n this.sourcePosition = 0;\n this._filter = new SimpleFilter(source, this._soundtouch, onEnd);\n this._node = getWebAudioNode(context, this._filter, sourcePostion => onUpdate.call(this, sourcePostion), bufferSize);\n this.tempo = 1;\n this.rate = 1;\n this.duration = buffer.duration;\n this.sampleRate = context.sampleRate;\n this.listeners = [];\n }\n get formattedDuration() {\n return minsSecs(this.duration);\n }\n get formattedTimePlayed() {\n return minsSecs(this.timePlayed);\n }\n get percentagePlayed() {\n return 100 * this._filter.sourcePosition / (this.duration * this.sampleRate);\n }\n set percentagePlayed(perc) {\n this._filter.sourcePosition = parseInt(perc * this.duration * this.sampleRate);\n this.sourcePosition = this._filter.sourcePosition;\n this.timePlayed = this.sourcePosition / this.sampleRate;\n }\n get node() {\n return this._node;\n }\n set pitch(pitch) {\n this._soundtouch.pitch = pitch;\n }\n set pitchSemitones(semitone) {\n this._soundtouch.pitchSemitones = semitone;\n }\n set rate(rate) {\n this._soundtouch.rate = rate;\n }\n set tempo(tempo) {\n this._soundtouch.tempo = tempo;\n }\n connect(toNode) {\n this._node.connect(toNode);\n }\n disconnect() {\n this._node.disconnect();\n }\n on(eventName, cb) {\n this.listeners.push({\n name: eventName,\n cb: cb\n });\n this._node.addEventListener(eventName, event => cb(event.detail));\n }\n off(eventName = null) {\n let listeners = this.listeners;\n if (eventName) {\n listeners = listeners.filter(e => e.name === eventName);\n }\n listeners.forEach(e => {\n this._node.removeEventListener(e.name, event => e.cb(event.detail));\n });\n }\n}\n\nexport { AbstractFifoSamplePipe, PitchShifter, RateTransposer, SimpleFilter, SoundTouch, Stretch, WebAudioBufferSource, getWebAudioNode };\n//# sourceMappingURL=soundtouch.js.map\n","import SoundtouchWorkletMessage from \"../../model/SoundtouchWorkletMessage\";\nimport { SoundtouchWorkletOptionsWrapper } from \"../../model/SoundtouchWorkletOptionsWrapper\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet soundtouchWrapperFilterWorkletNodeClass: any;\n\nif(typeof(window) !== \"undefined\" && typeof(window.AudioWorkletNode) !== \"undefined\") {\n soundtouchWrapperFilterWorkletNodeClass = class SoundtouchWrapperFilterWorkletNode extends AudioWorkletNode {\n\n name: string = \"\";\n private running = false;\n private _tempo = 1;\n private _pitch = 1;\n\n constructor(context: BaseAudioContext, workletName: string, options: SoundtouchWorkletOptionsWrapper) {\n super(context, workletName, options);\n this.name = this.constructor.name;\n this.running = true;\n this.updateInterval = options.processorOptions.updateInterval;\n }\n\n async setup(tempo: number, pitch: number): Promise {\n return new Promise(resolve => {\n if(this.port) {\n this.port.onmessage = (ev: MessageEvent) => {\n if(ev && ev.data && ev.data.status === \"OK\" && ev.data.args[0] === \"setup\") {\n this.port.onmessage = this.messageProcessor.bind(this);\n resolve();\n }\n };\n \n this.port.postMessage({ command: \"setup\", args: [tempo, pitch] });\n\n this._tempo = tempo;\n this._pitch = pitch;\n }\n });\n }\n\n set updateInterval(value: number) {\n this.port.postMessage({ command: \"updateInterval\", args: [value] });\n }\n\n get node() {\n return this;\n }\n\n set tempo(value: number) {\n this.port.postMessage({ command: \"setTempo\", args: [value] });\n }\n\n set pitch(value: number) {\n this.port.postMessage({ command: \"setPitch\", args: [value] });\n }\n\n get tempo(): number {\n this.port.postMessage({ command: \"getTempo\", args: [] });\n return this._tempo;\n }\n\n get pitch(): number {\n this.port.postMessage({ command: \"getPitch\", args: [] });\n return this._pitch;\n }\n\n async stop() {\n if (!this.running) return;\n\n this.port.postMessage({ command: \"stop\", args: [] });\n this.disconnect();\n\n this.running = false;\n }\n\n messageProcessor(e: MessageEvent) {\n if (e.data.command) {\n const { command } = e.data;\n \n switch (command) {\n case \"End\":\n this.stop();\n break;\n default:\n break;\n }\n\n if (e.data.status) {\n const value = e.data.args[1];\n\n switch (e.data.args[0]) {\n case \"getTempo\":\n this._tempo = value as number;\n break;\n case \"getPitch\":\n this._pitch = value as number;\n break;\n default:\n break;\n }\n return;\n }\n }\n }\n };\n}\n\nexport default soundtouchWrapperFilterWorkletNodeClass;\n","/*\n * Copyright (c) 2012 The Chromium Authors. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Copyright (C) 2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\ninterface VocoderBand {\n frequency: number;\n}\n\nexport default class Vocoder {\n\n private FILTER_QUALITY = 6; // The Q value for the carrier and modulator filters\n private FOURIER_SIZE = 4096;\n private WAVETABLEBOOST = 40.0;\n private SAWTOOTHBOOST = 0.40;\n private oscillatorType = 4; // CUSTOM\n private oscillatorDetuneValue = 0;\n\n private audioContext: BaseAudioContext | null = null;\n private modulatorBuffer: AudioBuffer | undefined;\n private carrierBuffer: AudioBuffer | null = null;\n private modulatorNode: AudioBufferSourceNode | null = null;\n private vocoding = false;\n\n // These are \"placeholder\" gain nodes - because the modulator and carrier will get swapped in\n // as they are loaded, it's easier to connect these nodes to all the bands, and the \"real\"\n // modulator & carrier AudioBufferSourceNodes connect to these.\n private modulatorInput: GainNode | null = null;\n private carrierInput: GainNode | null = null;\n\n private modulatorGain: GainNode | null = null;\n private modulatorGainValue = 1.0;\n\n // noise node added to the carrier signal\n private noiseBuffer: AudioBuffer | null = null;\n private noiseNode: AudioBufferSourceNode | null = null;\n private noiseGain: GainNode | null = null;\n private noiseGainValue = 0.2;\n\n // Carrier sample gain\n private carrierSampleNode: AudioBufferSourceNode | null = null;\n private carrierSampleGain: GainNode | null = null;\n private carrierSampleGainValue = 0.0;\n\n // Carrier Synth oscillator stuff\n private oscillatorNode: OscillatorNode | null = null;\n private oscillatorGain: GainNode | null = null;\n private oscillatorGainValue = 1.0;\n private wavetable: PeriodicWave | null = null;\n private wavetableSignalGain: GainNode | null = null;\n\n // These are the arrays of nodes - the \"columns\" across the frequency band \"rows\"\n private modFilterBands: BiquadFilterNode[] | null = null; // tuned bandpass filters\n private modFilterPostGains: GainNode[] | null = null; // post-filter gains.\n private heterodynes: GainNode[] | null = null; // gain nodes used to multiply bandpass X sine\n private powers: number[] | null = null; // gain nodes used to multiply prev out by itself\n private lpFilters: BiquadFilterNode[] | null = null; // tuned LP filters to remove doubled copy of product\n private lpFilterPostGains: GainNode[] | null = null; // gain nodes for tuning input to waveshapers\n private carrierBands: BiquadFilterNode[] | null = null; // tuned bandpass filters, same as modFilterBands but in carrier chain\n private carrierFilterPostGains: GainNode[] | null = null; // post-bandpass gain adjustment\n private carrierBandGains: GainNode[] | null = null; // these are the \"control gains\" driven by the lpFilters\n\n private vocoderBands: VocoderBand[] | null = null;\n private numVocoderBands: number = 0;\n\n private hpFilterGain: GainNode | null = null;\n private outputGain: GainNode | null = null;\n\n // Initialization function for the page.\n constructor(ctx: BaseAudioContext, carrierB: AudioBuffer, modulatorB?: AudioBuffer) {\n this.audioContext = ctx;\n this.carrierBuffer = carrierB;\n this.modulatorBuffer = modulatorB;\n }\n\n init() {\n this.generateVocoderBands(55, 7040, 28);\n // Set up the vocoder chains\n this.setupVocoderGraph();\n this.vocode();\n }\n\n getNodes() {\n return {\n modulatorNode: this.modulatorNode,\n modulatorGain: this.modulatorGain,\n synthLevel: this.oscillatorGain,\n noiseNode: this.noiseGain,\n oscillatorNode: this.oscillatorNode,\n hpFilterGain: this.hpFilterGain,\n outputGain: this.outputGain\n };\n }\n\n private shutOffCarrier() {\n if (this.oscillatorNode && this.noiseNode && this.carrierSampleNode) {\n this.oscillatorNode.stop(0);\n this.oscillatorNode = null;\n this.noiseNode.stop(0);\n this.noiseNode = null;\n this.carrierSampleNode.stop(0);\n this.carrierSampleNode = null;\n }\n }\n\n selectSawtooth() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n if (this.oscillatorNode)\n this.oscillatorNode.type = \"sawtooth\";\n }\n\n selectWavetable() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n if (this.oscillatorNode && this.wavetable)\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n }\n\n updateModGain(value: number) {\n this.modulatorGainValue = value;\n if (this.modulatorGain)\n this.modulatorGain.gain.value = value;\n }\n\n // sample-based carrier\n updateSampleLevel(value: number) {\n this.carrierSampleGainValue = value;\n if (this.carrierSampleGain)\n this.carrierSampleGain.gain.value = value;\n }\n\n // noise in carrier\n updateSynthLevel(value: number) {\n this.oscillatorGainValue = value;\n if (this.oscillatorGain)\n this.oscillatorGain.gain.value = value;\n }\n\n // noise in carrier\n updateNoiseLevel(value: number) {\n this.noiseGainValue = value;\n if (this.noiseGain)\n this.noiseGain.gain.value = value;\n }\n\n updateDetuneValue(value: number) {\n this.oscillatorDetuneValue = value;\n if (this.oscillatorNode)\n this.oscillatorNode.detune.value = value;\n }\n\n // this will algorithmically re-calculate vocoder bands, distributing evenly\n // from startFreq to endFreq, splitting evenly (logarhythmically) into a given numBands.\n // The function places this info into the global vocoderBands and numVocoderBands letiables.\n private generateVocoderBands(startFreq: number, endFreq: number, numBands: number) {\n // Remember: 1200 cents in octave, 100 cents per semitone\n\n const totalRangeInCents = 1200 * Math.log(endFreq / startFreq) / Math.LN2;\n const centsPerBand = totalRangeInCents / numBands;\n const scale = Math.pow(2, centsPerBand / 1200); // This is the scaling for successive bands\n\n this.vocoderBands = [];\n let currentFreq = startFreq;\n\n for (let i = 0; i < numBands; i++) {\n this.vocoderBands[i] = { frequency: currentFreq };\n //console.log( \"Band \" + i + \" centered at \" + currentFreq + \"Hz\" );\n currentFreq = currentFreq * scale;\n }\n\n this.numVocoderBands = numBands;\n }\n\n private loadNoiseBuffer() { // create a 5-second buffer of noise\n if (!this.audioContext) return;\n\n const lengthInSamples = 5 * this.audioContext.sampleRate;\n this.noiseBuffer = this.audioContext.createBuffer(1, lengthInSamples, this.audioContext.sampleRate);\n const bufferData = this.noiseBuffer.getChannelData(0);\n\n for (let i = 0; i < lengthInSamples; ++i) {\n bufferData[i] = (2 * Math.random() - 1); // -1 to +1\n }\n }\n\n private initBandpassFilters() {\n if (!this.audioContext) return;\n\n // When this function is called, the carrierNode and modulatorAnalyser\n // may not already be created. Create placeholder nodes for them.\n this.modulatorInput = this.audioContext.createGain();\n this.carrierInput = this.audioContext.createGain();\n\n if (this.modFilterBands == null)\n this.modFilterBands = [];\n\n if (this.modFilterPostGains == null)\n this.modFilterPostGains = [];\n\n if (this.heterodynes == null)\n this.heterodynes = [];\n\n if (this.powers == null)\n this.powers = [];\n\n if (this.lpFilters == null)\n this.lpFilters = [];\n\n if (this.lpFilterPostGains == null)\n this.lpFilterPostGains = [];\n\n if (this.carrierBands == null)\n this.carrierBands = [];\n\n if (this.carrierFilterPostGains == null)\n this.carrierFilterPostGains = [];\n\n if (this.carrierBandGains == null)\n this.carrierBandGains = [];\n\n const waveShaperCurve = new Float32Array(65536);\n // Populate with a \"curve\" that does an abs()\n const n = 65536;\n const n2 = n / 2;\n let x;\n\n for (let i = 0; i < n2; ++i) {\n x = i / n2;\n\n waveShaperCurve[n2 + i] = x;\n waveShaperCurve[n2 - i - 1] = x;\n }\n\n // Set up a high-pass filter to add back in the fricatives, etc.\n // (this isn't used by default in the \"production\" version, as I hid the slider)\n const hpFilter = this.audioContext.createBiquadFilter();\n hpFilter.type = \"highpass\";\n hpFilter.frequency.value = 8000; // or use vocoderBands[numVocoderBands-1].frequency;\n hpFilter.Q.value = 1; // no peaking\n this.modulatorInput.connect(hpFilter);\n\n this.hpFilterGain = this.audioContext.createGain();\n this.hpFilterGain.gain.value = 0.0;\n\n hpFilter.connect(this.hpFilterGain);\n\n if(this.modulatorBuffer) {\n this.hpFilterGain.connect(this.audioContext.destination);\n }\n\n //clear the arrays\n this.modFilterBands.length = 0;\n this.modFilterPostGains.length = 0;\n this.heterodynes.length = 0;\n this.powers.length = 0;\n this.lpFilters.length = 0;\n this.lpFilterPostGains.length = 0;\n this.carrierBands.length = 0;\n this.carrierFilterPostGains.length = 0;\n this.carrierBandGains.length = 0;\n\n this.outputGain = this.audioContext.createGain();\n\n if(this.modulatorBuffer) {\n this.outputGain.connect(this.audioContext.destination);\n }\n\n const rectifierCurve = new Float32Array(65536);\n for (let i = -32768; i < 32768; i++)\n rectifierCurve[i + 32768] = ((i > 0) ? i : -i) / 32768;\n\n for (let i = 0; i < this.numVocoderBands; i++) {\n // CREATE THE MODULATOR CHAIN\n // create the bandpass filter in the modulator chain\n const modulatorFilter = this.audioContext.createBiquadFilter();\n modulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n modulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n modulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n this.modulatorInput.connect(modulatorFilter);\n this.modFilterBands.push(modulatorFilter);\n\n // Now, create a second bandpass filter tuned to the same frequency -\n // this turns our second-order filter into a 4th-order filter,\n // which has a steeper rolloff/octave\n const secondModulatorFilter = this.audioContext.createBiquadFilter();\n secondModulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondModulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n secondModulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //modulatorFilter.chainedFilter = secondModulatorFilter;\n modulatorFilter.connect(secondModulatorFilter);\n\n // create a post-filtering gain to bump the levels up.\n const modulatorFilterPostGain = this.audioContext.createGain();\n modulatorFilterPostGain.gain.value = 6;\n secondModulatorFilter.connect(modulatorFilterPostGain);\n this.modFilterPostGains.push(modulatorFilterPostGain);\n\n // Create the sine oscillator for the heterodyne\n const heterodyneOscillator = this.audioContext.createOscillator();\n if (this.vocoderBands)\n heterodyneOscillator.frequency.value = this.vocoderBands[i].frequency;\n\n heterodyneOscillator.start(0);\n\n // Create the node to multiply the sine by the modulator\n const heterodyne = this.audioContext.createGain();\n modulatorFilterPostGain.connect(heterodyne);\n heterodyne.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n heterodyneOscillator.connect(heterodyne.gain);\n\n const heterodynePostGain = this.audioContext.createGain();\n heterodynePostGain.gain.value = 2.0; // GUESS: boost\n heterodyne.connect(heterodynePostGain);\n this.heterodynes.push(heterodynePostGain);\n\n\n // Create the rectifier node\n const rectifier = this.audioContext.createWaveShaper();\n rectifier.curve = rectifierCurve;\n heterodynePostGain.connect(rectifier);\n\n // Create the lowpass filter to mask off the difference (near zero)\n const lpFilter = this.audioContext.createBiquadFilter();\n lpFilter.type = \"lowpass\"; // Lowpass filter\n lpFilter.frequency.value = 5.0; // Guesstimate! Mask off 20Hz and above.\n lpFilter.Q.value = 1; // don't need a peak\n this.lpFilters.push(lpFilter);\n rectifier.connect(lpFilter);\n\n const lpFilterPostGain = this.audioContext.createGain();\n lpFilterPostGain.gain.value = 1.0;\n lpFilter.connect(lpFilterPostGain);\n this.lpFilterPostGains.push(lpFilterPostGain);\n\n const waveshaper = this.audioContext.createWaveShaper();\n waveshaper.curve = waveShaperCurve;\n lpFilterPostGain.connect(waveshaper);\n\n\n // Create the bandpass filter in the carrier chain\n const carrierFilter = this.audioContext.createBiquadFilter();\n carrierFilter.type = \"bandpass\";\n if (this.vocoderBands)\n carrierFilter.frequency.value = this.vocoderBands[i].frequency;\n carrierFilter.Q.value = this.FILTER_QUALITY;\n this.carrierBands.push(carrierFilter);\n this.carrierInput.connect(carrierFilter);\n\n // We want our carrier filters to be 4th-order filter too.\n const secondCarrierFilter = this.audioContext.createBiquadFilter();\n secondCarrierFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondCarrierFilter.frequency.value = this.vocoderBands[i].frequency;\n secondCarrierFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //carrierFilter.chainedFilter = secondCarrierFilter;\n carrierFilter.connect(secondCarrierFilter);\n\n const carrierFilterPostGain = this.audioContext.createGain();\n carrierFilterPostGain.gain.value = 10.0;\n secondCarrierFilter.connect(carrierFilterPostGain);\n this.carrierFilterPostGains.push(carrierFilterPostGain);\n\n // Create the carrier band gain node\n const bandGain = this.audioContext.createGain();\n this.carrierBandGains.push(bandGain);\n carrierFilterPostGain.connect(bandGain);\n bandGain.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n waveshaper.connect(bandGain.gain); // connect the lp controller\n\n bandGain.connect(this.outputGain);\n }\n\n\n // Now set up our wavetable stuff.\n const real = new Float32Array(this.FOURIER_SIZE);\n const imag = new Float32Array(this.FOURIER_SIZE);\n real[0] = 0.0;\n imag[0] = 0.0;\n for (let i = 1; i < this.FOURIER_SIZE; i++) {\n real[i] = 1.0;\n imag[i] = 1.0;\n }\n\n this.wavetable = this.audioContext.createPeriodicWave(real, imag);\n this.loadNoiseBuffer();\n }\n\n private setupVocoderGraph() {\n this.initBandpassFilters();\n }\n\n private createCarriersAndPlay(output: GainNode | null) {\n if(!this.audioContext || !output) return;\n\n this.carrierSampleNode = this.audioContext.createBufferSource();\n this.carrierSampleNode.buffer = this.carrierBuffer;\n this.carrierSampleNode.loop = true;\n\n this.carrierSampleGain = this.audioContext.createGain();\n this.carrierSampleGain.gain.value = this.carrierSampleGainValue;\n this.carrierSampleNode.connect(this.carrierSampleGain);\n this.carrierSampleGain.connect(output);\n\n // The wavetable signal needs a boost.\n this.wavetableSignalGain = this.audioContext.createGain();\n\n this.oscillatorNode = this.audioContext.createOscillator();\n if (this.oscillatorType == 4 && this.wavetable) { // wavetable\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n } else {\n //oscillatorNode.type = oscillatorType;\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n }\n this.oscillatorNode.frequency.value = 110;\n this.oscillatorNode.detune.value = this.oscillatorDetuneValue;\n this.oscillatorNode.connect(this.wavetableSignalGain);\n\n this.oscillatorGain = this.audioContext.createGain();\n this.oscillatorGain.gain.value = this.oscillatorGainValue;\n\n this.wavetableSignalGain.connect(this.oscillatorGain);\n this.oscillatorGain.connect(output);\n\n this.noiseNode = this.audioContext.createBufferSource();\n this.noiseNode.buffer = this.noiseBuffer;\n this.noiseNode.loop = true;\n this.noiseGain = this.audioContext.createGain();\n this.noiseGain.gain.value = this.noiseGainValue;\n this.noiseNode.connect(this.noiseGain);\n\n this.noiseGain.connect(output);\n this.oscillatorNode.start(0);\n this.noiseNode.start(0);\n this.carrierSampleNode.start(0);\n\n }\n\n private vocode() {\n if(!this.audioContext) return;\n\n if (this.vocoding) {\n if (this.modulatorNode) {\n this.modulatorNode.stop(0);\n }\n this.shutOffCarrier();\n this.vocoding = false;\n return;\n }\n\n this.createCarriersAndPlay(this.carrierInput);\n\n this.vocoding = true;\n\n this.modulatorGain = this.audioContext.createGain();\n this.modulatorGain.gain.value = this.modulatorGainValue;\n\n if(this.modulatorBuffer) {\n this.modulatorNode = this.audioContext.createBufferSource();\n this.modulatorNode.buffer = this.modulatorBuffer;\n this.modulatorNode.connect(this.modulatorGain);\n this.modulatorNode.start(0);\n }\n\n if (this.modulatorInput)\n this.modulatorGain.connect(this.modulatorInput);\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass PassthroughWorkletProcessor extends AudioWorkletProcessor {\n\n stopped = false;\n samplesCount = 0;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [];\n }\n\n get defaultParameterDescriptors() {\n return PassthroughWorkletProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n if (input && input[0]) {\n this.samplesCount += input[0].length;\n }\n\n if (output) {\n for(let channel = 0; channel < output.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp) {\n for (let sample = 0; sample < inp.length; sample++) {\n out[sample] = inp[sample];\n }\n }\n }\n\n this.port.postMessage({ command: \"update\", samplesCount: this.samplesCount });\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.PASSTHROUGH, PassthroughWorkletProcessor);\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\nexport default class TimerSaveTime {\n seconds = 0;\n initialSeconds = 0;\n interval: number | null = null;\n incr = 1;\n\n private countCallback: () => void = () => {};\n\n constructor(seconds: number, incr: number) {\n this.seconds = seconds;\n this.initialSeconds = seconds;\n this.interval;\n this.incr = incr;\n }\n\n start() {\n this.interval = window.setInterval(() => this.count(), 1000);\n }\n\n stop() {\n clearInterval(this.interval!);\n }\n\n count() {\n this.seconds += this.incr;\n\n if(this.seconds <= 0) {\n this.stop();\n }\n\n if(this.countCallback) {\n this.countCallback();\n }\n }\n\n onCount(callback: () => void) {\n this.countCallback = callback;\n }\n}","\n/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The Voice Recorder class\n// Used to record a sound (voice, etc.) with the user microphone\n// Offer control with play/pause and audio feedback\nimport { inject, injectable } from \"inversify\";\nimport TimerSaveTime from \"../utils/TimerSaveTime\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport AudioConstraintWrapper from \"../model/AudioConstraintWrapper\";\nimport { RecorderSettings } from \"../model/RecorderSettings\";\nimport type { ConfigService } from \"../services/interfaces/ConfigService\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { AudioConstraint } from \"../model/AudioConstraint\";\nimport Recorder from \"../recorder/Recorder\";\nimport VoiceRecorderInterface from \"./interfaces/VoiceRecorderInterface\";\nimport { TYPES } from \"@/inversify.types\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n@injectable()\nexport default class VoiceRecorder extends AbstractAudioElement implements VoiceRecorderInterface {\n\n private contextManager: AudioContextManagerInterface | null | undefined;\n\n private recorder: Recorder | null = null;\n\n private input: MediaStreamAudioSourceNode | null = null;\n\n private stream: MediaStream | null = null;\n\n private alreadyInit = false;\n\n private timer: TimerSaveTime | null = null;\n\n private enableAudioFeedback = false;\n\n private recording = false;\n\n private deviceList: MediaDeviceInfo[] = [];\n\n private constraints: AudioConstraintWrapper = {\n audio: {\n noiseSuppression: true,\n echoCancellation: true,\n autoGainControl: true,\n sampleRate: { ideal: 44100 }\n }\n };\n\n private sampleRateConfigNotSupported = false;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService) {\n super();\n\n this.contextManager = contextManager;\n this.configService = configService;\n }\n\n async init() {\n if (!this.isRecordingAvailable()) {\n return;\n }\n\n // Specific case: Firefox doesn't support changing sample-rate for MediaDevice API\n // In this case we disable sample-rate config feature for this VoiceRecorder\n this.sampleRateConfigNotSupported = !navigator.mediaDevices.getSupportedConstraints().sampleRate;\n\n if (this.contextManager) {\n if (this.sampleRateConfigNotSupported) {\n this.contextManager.createNewContext(0);\n } else {\n this.contextManager.createNewContextIfNeeded();\n }\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_INIT);\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n\n await this.setup(stream, false, false);\n\n this.alreadyInit = true;\n this.timer = new TimerSaveTime(0, 1);\n\n this.timer.onCount(() => {\n this.eventEmitter?.emit(EventType.RECORDER_COUNT_UPDATE);\n });\n\n this.successCallback();\n } catch (e) {\n console.error(e);\n\n const exception = e as DOMException;\n\n if (exception) {\n switch (exception.name) {\n case \"SecurityError\":\n case \"NotAllowedError\":\n this.errorCallback();\n break;\n case \"NotFoundError\":\n this.notFoundErrorCallback();\n break;\n // Disable sample rate configuration\n case \"NotSupportedError\":\n if (!this.sampleRateConfigNotSupported) {\n this.sampleRateConfigNotSupported = true;\n this.init();\n }\n break;\n default:\n this.unknownErrorCallback();\n break;\n }\n }\n }\n\n navigator.mediaDevices.ondevicechange = () => this.updateInputList();\n }\n\n private successCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_SUCCESS);\n }\n\n private errorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_ERROR);\n }\n\n private notFoundErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_NOT_FOUND_ERROR);\n }\n\n private unknownErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_UNKNOWN_ERROR);\n }\n\n audioFeedback(enable: boolean) {\n if (this.contextManager && this.contextManager.currentContext) {\n if (enable) {\n this.input && this.input.connect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = true;\n } else {\n this.input && this.input.connect(this.contextManager.currentContext.destination) && this.input.disconnect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = false;\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Get current constraints/settings\n * @returns MediaTrackSettings\n */\n private getConstraints() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n if (tracks && tracks.length > 0) {\n return tracks[0].getSettings();\n }\n }\n\n return null;\n }\n\n /**\n * Update the current constraints\n */\n private updateConstraints() {\n const constraints = this.getConstraints();\n\n if (constraints) {\n this.constraints.audio = Object.assign(this.constraints.audio, constraints);\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Reset the current constraints\n * @param newConstraint AudioConstraintWrapper\n */\n private async resetConstraints(newConstraint?: AudioConstraintWrapper) {\n if (this.stream) {\n const precAudioFeedback = this.enableAudioFeedback;\n const precRecording = this.recording;\n const tracks = this.stream.getTracks();\n\n if (newConstraint) {\n this.updateConstraints();\n this.constraints.audio = Object.assign(this.constraints.audio, newConstraint.audio);\n }\n\n if (tracks && tracks.length > 0) {\n try {\n await tracks[0].applyConstraints(this.constraints.audio);\n\n const newConstraints = this.getConstraints();\n const newConstraintName = newConstraint ? Object.keys(newConstraint.audio)[0] : \"\";\n\n this.audioFeedback(false);\n this.pause();\n\n if (!newConstraint ||\n (newConstraints && (newConstraints as AudioConstraint)[newConstraintName] != newConstraint.audio[newConstraintName])) {\n this.stopStream();\n\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n await this.setup(stream, precRecording, precAudioFeedback);\n } else {\n await this.setup(null, precRecording, precAudioFeedback);\n }\n } catch (e) {\n this.errorCallback();\n }\n }\n }\n }\n\n /**\n * Setup this voice recorder\n * @param stream MediaStream\n * @param precRecording Was recording?\n * @param precAudioFeedback Has audio feedback?\n */\n private async setup(stream: MediaStream | null, precRecording: boolean, precAudioFeedback: boolean) {\n if (stream && this.contextManager && this.contextManager.currentContext) {\n this.input = this.contextManager.currentContext.createMediaStreamSource(stream);\n this.stream = stream;\n }\n\n if (this.recorder && this.input) {\n await this.recorder.setup(this.input);\n\n if (precRecording) {\n await this.record();\n }\n }\n\n this.audioFeedback(precAudioFeedback);\n this.updateConstraints();\n await this.updateInputList();\n }\n\n setNoiseSuppression(enable: boolean) {\n this.resetConstraints({\n audio: {\n noiseSuppression: enable\n }\n });\n }\n\n setAutoGain(enable: boolean) {\n this.resetConstraints({\n audio: {\n autoGainControl: enable\n }\n });\n }\n\n setEchoCancellation(enable: boolean) {\n this.resetConstraints({\n audio: {\n echoCancellation: enable\n }\n });\n }\n\n /**\n * Update current audio input list\n */\n private async updateInputList() {\n if (this.deviceList) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.deviceList = [];\n\n devices.forEach(device => {\n if (device.kind == \"audioinput\") {\n this.deviceList.push(device);\n }\n });\n }\n }\n\n changeInput(deviceId: string, groupId: string | undefined) {\n if (groupId) {\n this.constraints.audio.deviceId = deviceId;\n this.constraints.audio.groupId = groupId;\n this.resetConstraints();\n }\n }\n\n async record() {\n if (this.alreadyInit && this.configService && this.input) {\n if (!this.recorder) {\n this.recorder = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: \"audio/wav\"\n });\n\n await this.recorder.setup(this.input);\n }\n\n if (this.recorder) {\n this.recorder.record();\n }\n\n this.timer && this.timer.start();\n this.recording = true;\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.RECORDER_RECORDING);\n }\n }\n }\n\n async stop() {\n if (this.alreadyInit && this.recorder) {\n this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n\n this.recorder.getBuffer((buffer: Float32Array[]) => {\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n\n const newBuffer = this.contextManager.currentContext.createBuffer(2, buffer[0].length, this.contextManager.currentContext.sampleRate);\n newBuffer.getChannelData(0).set(buffer[0]);\n newBuffer.getChannelData(1).set(buffer[1]);\n\n this.eventEmitter?.emit(EventType.RECORDER_STOPPED, newBuffer);\n this.reset();\n }\n });\n }\n }\n\n pause() {\n if (this.alreadyInit) {\n this.recorder && this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n this.eventEmitter?.emit(EventType.RECORDER_PAUSED);\n }\n }\n\n /**\n * Stop stream\n */\n private stopStream() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n tracks[i].stop();\n }\n }\n }\n\n reset() {\n this.recorder && this.recorder.kill();\n this.timer && this.timer.stop();\n this.audioFeedback(false);\n\n this.stopStream();\n\n this.input = null;\n this.recorder = null;\n this.stream = null;\n this.alreadyInit = false;\n this.timer = null;\n\n this.eventEmitter?.emit(EventType.RECORDER_RESETED);\n }\n\n get currentTimeDisplay() {\n return this.timer?.seconds ? (\"0\" + Math.trunc(this.timer?.seconds / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.timer?.seconds % 60)).slice(-2) : \"00:00\";\n }\n\n get currentTime() {\n return this.timer ? this.timer.seconds : 0;\n }\n\n getSettings(): RecorderSettings {\n return {\n deviceList: this.deviceList,\n audioFeedback: this.enableAudioFeedback,\n constraints: this.constraints.audio\n };\n }\n\n on(event: string, callback: EventEmitterCallback) {\n this.eventEmitter?.on(event, callback);\n }\n\n isRecordingAvailable() {\n return typeof (navigator.mediaDevices) !== \"undefined\" && typeof (navigator.mediaDevices.getUserMedia) !== \"undefined\";\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n throw Constants.VOICE_RECORDER;\n }\n}\n","import \"reflect-metadata\";\nimport { Container } from \"inversify\";\nimport { TYPES } from \"./inversify.types\";\nimport AudioContextManagerInterface from \"./audioEditor/interfaces/AudioContextManagerInterface\";\nimport AudioContextManager from \"./audioEditor/AudioContextManager\";\nimport AudioEditorInterface from \"./audioEditor/interfaces/AudioEditorInterface\";\nimport AudioProcessorInterface from \"./audioEditor/interfaces/AudioProcessorInterface\";\nimport BufferManagerInterface from \"./audioEditor/interfaces/BufferManagerInterface\";\nimport FilterManagerInterface from \"./audioEditor/interfaces/FilterManagerInterface\";\nimport RendererManagerInterface from \"./audioEditor/interfaces/RendererManagerInterface\";\nimport SaveBufferManagerInterface from \"./audioEditor/interfaces/SaveBufferManagerInteface\";\nimport AudioEditor from \"./audioEditor/AudioEditor\";\nimport AudioProcessor from \"./audioEditor/AudioProcessor\";\nimport BufferManager from \"./audioEditor/BufferManager\";\nimport FilterManager from \"./audioEditor/FilterManager\";\nimport RendererManager from \"./audioEditor/RendererManager\";\nimport SaveBufferManager from \"./audioEditor/SaveBufferManager\";\nimport EventEmitterInterface from \"./utils/interfaces/EventEmitterInterface\";\nimport EventEmitter from \"./utils/EventEmitter\";\nimport BufferPlayerInterface from \"./bufferPlayer/interfaces/BufferPlayerInterface\";\nimport BufferPlayer from \"./bufferPlayer/BufferPlayer\";\nimport BufferFetcherServiceInterface from \"./services/interfaces/BufferFetcherServiceInterface\";\nimport BufferDecoderServiceInterface from \"./services/interfaces/BufferDecoderServiceInterface\";\nimport BufferFetcherService from \"./services/BufferFetcherService\";\nimport BufferDecoderService from \"./services/BufferDecoderService\";\nimport AbstractAudioRenderer from \"./filters/interfaces/AbstractAudioRenderer\";\nimport ReturnAudioRenderer from \"./filters/ReturnAudioRenderer\";\nimport BassBoosterFilter from \"./filters/BassBoosterFilter\";\nimport BitCrusherFilter from \"./filters/BitCrusherFilter\";\nimport EchoFilter from \"./filters/EchoFilter\";\nimport HighPassFilter from \"./filters/HighPassFilter\";\nimport LimiterFilter from \"./filters/LimiterFilter\";\nimport LowPassFilter from \"./filters/LowPassFilter\";\nimport ReverbFilter from \"./filters/ReverbFilter\";\nimport SoundtouchWrapperFilter from \"./filters/SountouchWrapperFilter\";\nimport TelephonizerFilter from \"./filters/TelephonizerFilter\";\nimport VocoderFilter from \"./filters/VocoderFilter\";\nimport PassThroughFilter from \"./filters/PassThroughFilter\";\nimport AbstractAudioFilter from \"./filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"./filters/interfaces/AudioFilterEntrypointInterface\";\nimport VoiceRecorderInterface from \"./voiceRecorder/interfaces/VoiceRecorderInterface\";\nimport VoiceRecorder from \"./voiceRecorder/VoiceRecorder\";\n\nconst audioEditorContainer = new Container({ defaultScope: \"Singleton\" });\n\n// Entrypoint filter\naudioEditorContainer.bind(TYPES.EntryPointFilter).to(SoundtouchWrapperFilter);\n\n// Renderers\naudioEditorContainer.bind(TYPES.Renderers).to(ReturnAudioRenderer);\n\n// Filters\naudioEditorContainer.bind(TYPES.Filters).toDynamicValue(() => audioEditorContainer.get(TYPES.EntryPointFilter));\naudioEditorContainer.bind(TYPES.Filters).to(BassBoosterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(BitCrusherFilter);\naudioEditorContainer.bind(TYPES.Filters).to(EchoFilter);\naudioEditorContainer.bind(TYPES.Filters).to(HighPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LimiterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LowPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(ReverbFilter);\naudioEditorContainer.bind(TYPES.Filters).to(TelephonizerFilter);\naudioEditorContainer.bind(TYPES.Filters).to(VocoderFilter);\naudioEditorContainer.bind(TYPES.Filters).to(PassThroughFilter);\n\n// Services\naudioEditorContainer.bind(TYPES.EventEmitter).to(EventEmitter);\naudioEditorContainer.bind(TYPES.AudioContextManager).to(AudioContextManager);\naudioEditorContainer.bind(TYPES.AudioEditor).to(AudioEditor);\naudioEditorContainer.bind(TYPES.AudioProcessor).to(AudioProcessor);\naudioEditorContainer.bind(TYPES.BufferManager).to(BufferManager);\naudioEditorContainer.bind(TYPES.FilterManager).to(FilterManager);\naudioEditorContainer.bind(TYPES.RendererManager).to(RendererManager);\naudioEditorContainer.bind(TYPES.SaveBufferManager).to(SaveBufferManager);\naudioEditorContainer.bind(TYPES.BufferPlayer).to(BufferPlayer);\naudioEditorContainer.bind(TYPES.BufferFetcherService).to(BufferFetcherService);\naudioEditorContainer.bind(TYPES.BufferDecoderService).to(BufferDecoderService);\naudioEditorContainer.bind(TYPES.VoiceRecorder).to(VoiceRecorder);\n\nexport { audioEditorContainer };\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nimport { PitchShifter } from \"soundtouchjs\";\nimport Constants from \"../model/Constants\";\nimport AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport AudioFilterEntrypointInterface from \"./interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport utils from \"../utils/Functions\";\nimport SoundtouchWrapperFilterWorkletNode from \"./worklets/SoundtouchWrapperFilterWorkletNode\";\nimport SimpleAudioWorkletProcessor from \"../workletPolyfill/SimpleAudioWorkletProcessor\";\nimport SoundtouchSettings from \"../model/filtersSettings/SoundtouchSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class SoundtouchWrapperFilter extends AbstractAudioFilterWorklet implements AudioFilterEntrypointInterface {\n\n private speedAudio = 1;\n private frequencyAudio = 1;\n private currentSpeedAudio = 1;\n private currentPitchShifterWorklet: typeof SoundtouchWrapperFilterWorkletNode;\n private currentPitchShifter: PitchShifter;\n private isOfflineMode = false;\n\n constructor() {\n super();\n this.enable();\n this.setDefaultEnabled(true);\n }\n\n async initializeWorklet(): Promise {\n // Do nothing\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.SOUNDTOUCH;\n }\n\n constructAudioWorkletProcessor(): SimpleAudioWorkletProcessor {\n throw new Error(\"Method not implemented.\");\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.SOUNDTOUCH;\n }\n\n async getEntrypointNode(context: BaseAudioContext, buffer: AudioBuffer, offline: boolean): Promise {\n this.isOfflineMode = offline;\n\n this.cleanUpOldNodes();\n\n // In offline (compatibility) mode\n if (offline) {\n // If the settings are untouched, we don't use Soundtouch\n if (!this.isEnabled() || (this.speedAudio == 1 && this.frequencyAudio == 1)) {\n // Just return an audio buffer source node\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n return {\n input: bufferSource,\n output: bufferSource\n };\n } else {\n // If audio worklet is enabled for soundtouch, and if the speed of audio is untouched\n // Soundtouch Audio Worklet don't support speed editing yet\n if (this.isAudioWorkletEnabled() && utils.isAudioWorkletCompatible(context) && this.speedAudio == 1) {\n return this.renderWithWorklet(buffer, context);\n } else {\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n }\n\n // Not in offline mode: get classic soundtouch script processor node\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, context);\n this.updateState();\n\n return {\n input: this.currentPitchShifter,\n output: this.currentPitchShifter\n };\n }\n\n /** Cleanup old nodes (worklets, pitch shifter) */\n private cleanUpOldNodes() {\n // Stop current worklet\n if (this.currentPitchShifterWorklet) {\n this.currentPitchShifterWorklet.stop();\n this.currentPitchShifterWorklet.disconnect();\n }\n\n if (this.currentPitchShifter) {\n this.currentPitchShifter.disconnect();\n this.currentPitchShifter._filter = null;\n }\n }\n\n private getSoundtouchScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): AudioNode {\n return new PitchShifter(context, buffer, Constants.SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE);\n }\n\n /**\n * Use script processor node (deprecated) to render the audio buffer with Soundtouch, according to the current settings.\n * Not working on Firefox\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n const offlineContext = new OfflineAudioContext(2, context.sampleRate * durationAudio, context.sampleRate);\n\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, offlineContext);\n this.updateState();\n\n this.currentPitchShifter.connect(offlineContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n const bufferSourceRendered = context.createBufferSource();\n bufferSourceRendered.buffer = renderedBuffer;\n bufferSourceRendered.start();\n\n this.cleanUpOldNodes();\n\n return {\n input: bufferSourceRendered,\n output: bufferSourceRendered\n };\n }\n\n /**\n * EXPERIMENTAL - Use audio worklet to render the audio buffer with Soundtouch, according to the current settings.\n * Working in Firefox and Chrome\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithWorklet(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n\n try {\n // Setup worklet JS module\n await context.audioWorklet.addModule((this.configService ? this.configService.getWorkletBasePath() : \"\") + Constants.WORKLET_PATHS.SOUNDTOUCH);\n\n // Setup an audio buffer source from the audio buffer\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n // Create the worklet node\n this.currentPitchShifterWorklet = new SoundtouchWrapperFilterWorkletNode(context, \"soundtouch-worklet\", {\n processorOptions: {\n bypass: false,\n recording: false,\n nInputFrames: this.approximateNInputFrames(durationAudio, context),\n updateInterval: 10.0,\n sampleRate: buffer.sampleRate\n },\n });\n\n // Connect the node for correct rendering\n bufferSource.connect(this.currentPitchShifterWorklet.node);\n\n // Setup pitch/speed of Soundtouch\n if (this.isEnabled()) {\n await this.currentPitchShifterWorklet.setup(this.speedAudio, this.frequencyAudio);\n } else {\n await this.currentPitchShifterWorklet.setup(1, 1);\n }\n\n return {\n input: this.currentPitchShifterWorklet,\n output: this.currentPitchShifterWorklet\n };\n } catch (e) {\n // Fallback to script processor node\n console.error(e);\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n\n private approximateNInputFrames(durationAudio: number, context: BaseAudioContext) {\n // {frequencyAudio, multiplicator}: {{0.1, 10}, {0.2, 5}, {0.3, 3.33}, {0.4, 2.5}, {0.5, 2}, {0.6, 1.67}, {0.7, 1.43}, {0.8, 1.25}, {0.9, 1.11}, {1, 1}}\n return durationAudio * context.sampleRate * (Math.round(14 * Math.exp(-4 * this.frequencyAudio)) + 1);\n }\n\n get order(): number {\n return 2;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.SOUNDTOUCH;\n }\n\n getSettings(): SoundtouchSettings {\n return {\n speedAudio: this.speedAudio,\n frequencyAudio: this.frequencyAudio\n };\n }\n\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isSoundtouchAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n private getCurrentPitchShifter() {\n if (this.isOfflineMode) {\n // If the settings are untouched, we don't use Soundtouch\n if (this.speedAudio == 1 && this.frequencyAudio == 1) {\n return null;\n } else {\n if (this.isAudioWorkletEnabled() && this.currentPitchShifterWorklet && this.speedAudio == 1) {\n return this.currentPitchShifterWorklet;\n } else {\n return this.currentPitchShifter;\n }\n }\n }\n\n return this.currentPitchShifter;\n }\n\n updateState(): void {\n const pitchShifter = this.getCurrentPitchShifter();\n\n if (!this.isEnabled()) {\n if (pitchShifter) {\n pitchShifter.pitch = 1;\n pitchShifter.tempo = 1;\n }\n\n this.currentSpeedAudio = 1;\n } else {\n if (pitchShifter) {\n pitchShifter.pitch = this.frequencyAudio;\n pitchShifter.tempo = this.speedAudio;\n }\n\n this.currentSpeedAudio = this.speedAudio;\n }\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n const valueFloat = parseFloat(value as string);\n\n switch (settingId) {\n case \"speedAudio\":\n this.speedAudio = valueFloat;\n break;\n case \"frequencyAudio\":\n this.frequencyAudio = valueFloat;\n break;\n default:\n break;\n }\n\n this.updateState();\n }\n\n setEnabled(state: boolean): void {\n super.setEnabled(state);\n this.updateState();\n }\n\n getSpeed(): number {\n return this.currentSpeedAudio;\n }\n}\n","import AbstractAudioRenderer from \"./interfaces/AbstractAudioRenderer\";\nimport Constants from \"../model/Constants\";\n\nexport default class ReturnAudioRenderer extends AbstractAudioRenderer {\n\n renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise {\n return new Promise(resolve => {\n const numChannels = buffer.numberOfChannels;\n const totalFrames = context.sampleRate * buffer.duration + context.sampleRate * 2;\n const bufferReturned = context.createBuffer(numChannels, totalFrames, context.sampleRate);\n\n for (let channel = 0; channel < numChannels; channel++) {\n const nowBuffering = bufferReturned.getChannelData(channel);\n const sourceChannelData = buffer.getChannelData(channel);\n\n for (let i = 0; i < totalFrames; i++) {\n if (i < sourceChannelData.length) {\n nowBuffering[i] = sourceChannelData[sourceChannelData.length - 1 - i];\n } else {\n nowBuffering[i] = 0;\n }\n }\n }\n\n resolve(bufferReturned);\n });\n }\n\n get order(): number {\n return 0;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.RETURN_AUDIO;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport BassBoosterSettings from \"../model/filtersSettings/BassBoosterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BassBoosterFilter extends AbstractAudioFilter {\n private frequencyBooster = 200;\n private frequencyReduce = 200;\n private dbBooster = 15;\n private dbReduce = -2;\n\n getNode(context: BaseAudioContext) {\n const bassBoostFilter = context.createBiquadFilter();\n bassBoostFilter.type = \"lowshelf\";\n bassBoostFilter.frequency.value = this.frequencyBooster;\n bassBoostFilter.gain.value = this.dbBooster;\n\n const bassBoostFilterHighFreq = context.createBiquadFilter();\n bassBoostFilterHighFreq.type = \"highshelf\";\n bassBoostFilterHighFreq.frequency.value = this.frequencyReduce;\n bassBoostFilterHighFreq.gain.value = this.dbReduce;\n bassBoostFilterHighFreq.connect(bassBoostFilter);\n\n return {\n input: bassBoostFilterHighFreq,\n output: bassBoostFilter\n };\n }\n \n get order(): number {\n return 3;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BASS_BOOST;\n }\n\n getSettings(): BassBoosterSettings {\n return {\n frequencyBooster: this.frequencyBooster,\n frequencyReduce: this.frequencyReduce,\n dbBooster: this.dbBooster,\n dbReduce: this.dbReduce,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch(settingId) {\n case \"frequencyBooster\":\n this.frequencyBooster = parseInt(value as string);\n break;\n case \"frequencyReduce\":\n this.frequencyReduce = parseInt(value as string);\n break;\n case \"dbBooster\":\n this.dbBooster = parseInt(value as string);\n break;\n case \"dbReduce\":\n this.dbReduce = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport BitCrusherSettings from \"../model/filtersSettings/BitCrusherSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/BitCrusher.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilterWorklet {\n private bits = 16;\n private normFreq = 0.9;\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.BITCRUSHER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.BITCRUSHER;\n }\n\n get order(): number {\n return 6;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BITCRUSHER;\n }\n\n getSettings(): BitCrusherSettings {\n return {\n bits: this.bits,\n normFreq: this.normFreq,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch (settingId) {\n case \"bits\":\n this.bits = parseInt(value as string);\n break;\n case \"normFreq\":\n this.normFreq = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport EchoSettings from \"../model/filtersSettings/EchoSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class EchoFilter extends AbstractAudioFilter {\n private delay = 0.2;\n private gain = 0.75;\n\n getNode(context: BaseAudioContext) {\n const delayNode = context.createDelay(179);\n delayNode.delayTime.value = this.delay;\n\n const gainNode = context.createGain();\n gainNode.gain.value = this.gain;\n\n gainNode.connect(delayNode);\n delayNode.connect(gainNode);\n\n return {\n input: gainNode,\n output: delayNode\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.ECHO;\n }\n\n getAddingTime() {\n return 5;\n }\n\n getSettings(): EchoSettings {\n return {\n delay: this.delay,\n gain: this.gain\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"delay\":\n this.delay = parseFloat(value as string);\n break;\n case \"gain\":\n this.gain = parseFloat(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport HighPassSettings from \"../model/filtersSettings/HighPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class HighPassFilter extends AbstractAudioFilter {\n private highFrequency = 3500;\n\n getNode(context: BaseAudioContext) {\n const highPassFilter = context.createBiquadFilter();\n highPassFilter.type = \"highpass\";\n highPassFilter.frequency.value = this.highFrequency;\n\n return {\n input: highPassFilter,\n output: highPassFilter\n };\n }\n \n get order(): number {\n return 4;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.HIGH_PASS;\n }\n\n getSettings(): HighPassSettings {\n return {\n highFrequency: this.highFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"highFrequency\":\n this.highFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport LimiterSettings from \"../model/filtersSettings/LimiterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/Limiter.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LimiterFilter extends AbstractAudioFilterWorklet {\n private preGain = 0; // dB\n private postGain = 0; // dB\n private attackTime = 0; // s\n private releaseTime = 3; // s\n private threshold = -0.05; // dB\n private lookAheadTime = 0.1; // s\n\n constructor() {\n super();\n this.keepCurrentNodeIfPossible = true;\n this.enable();\n this.setDefaultEnabled(true);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.LIMITER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.LIMITER;\n }\n\n get order(): number {\n return 11;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LIMITER;\n }\n\n getAddingTime() {\n return this.lookAheadTime;\n }\n\n getSettings(): LimiterSettings {\n return {\n preGain: this.preGain,\n postGain: this.postGain,\n attackTime: this.attackTime,\n releaseTime: this.releaseTime,\n threshold: this.threshold,\n lookAheadTime: this.lookAheadTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"preGain\":\n this.preGain = parseFloat(value as string);\n break;\n case \"postGain\":\n this.postGain = parseFloat(value as string);\n break;\n case \"attackTime\":\n this.attackTime = parseFloat(value as string);\n break;\n case \"releaseTime\":\n this.releaseTime = parseFloat(value as string);\n break;\n case \"threshold\":\n this.threshold = parseFloat(value as string);\n break;\n case \"lookAheadTime\":\n this.lookAheadTime = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport LowPassSettings from \"../model/filtersSettings/LowPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LowPassFilter extends AbstractAudioFilter {\n private lowFrequency = 3500;\n \n getNode(context: BaseAudioContext) {\n const lowPassFilter = context.createBiquadFilter();\n lowPassFilter.type = \"lowpass\";\n lowPassFilter.frequency.value = this.lowFrequency;\n\n return {\n input: lowPassFilter,\n output: lowPassFilter\n };\n }\n \n get order(): number {\n return 5;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LOW_PASS;\n }\n\n getSettings(): LowPassSettings {\n return {\n lowFrequency: this.lowFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"lowFrequency\":\n this.lowFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { ReverbEnvironment } from \"../model/ReverbEnvironment\";\nimport ReverbSettings from \"../model/filtersSettings/ReverbSettings\";\nimport GenericSettingValue from \"../model/filtersSettings/GenericSettingValue\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"@/utils/Functions\";\n\nexport default class ReverbFilter extends AbstractAudioFilter {\n\n private reverbEnvironment: ReverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n private reverbCustomEnvironmentAddTime = 5;\n private customEnvironment: AudioBuffer | null = null;\n\n getNode(context: BaseAudioContext) {\n const convolver = context.createConvolver();\n\n if (!this.reverbEnvironment || (this.reverbEnvironment.url == \"custom\" && !this.customEnvironment)) {\n // Fallback to default environment otherwise\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n\n const buffer = this.getReverbBuffer(context);\n\n if (buffer) {\n convolver.buffer = buffer;\n }\n\n return {\n input: convolver,\n output: convolver\n };\n }\n\n private getReverbBuffer(context: BaseAudioContext): AudioBuffer | undefined {\n if (this.reverbEnvironment.url == \"custom\" && this.customEnvironment) {\n if (this.customEnvironment.sampleRate === context.sampleRate) {\n return this.customEnvironment;\n } else {\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n } else if (this.bufferFetcherService) {\n return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url);\n }\n\n return;\n }\n\n get order(): number {\n return 9;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.REVERB;\n }\n\n getAddingTime() {\n const settings = this.getSettings();\n\n if (settings && settings.reverbEnvironment) {\n if (settings.reverbEnvironment.value != \"custom\") {\n if (settings.reverbEnvironment.additionalData) {\n return settings.reverbEnvironment.additionalData.addDuration as number;\n }\n } else {\n return this.reverbCustomEnvironmentAddTime;\n }\n }\n\n return 0;\n }\n\n getSettings(): ReverbSettings {\n if (!this.reverbEnvironment) {\n return {\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n return {\n reverbEnvironment: {\n name: this.reverbEnvironment.name,\n value: this.reverbEnvironment.url,\n additionalData: {\n size: this.reverbEnvironment.size,\n link: this.reverbEnvironment.link,\n addDuration: this.reverbEnvironment.addDuration\n }\n },\n downloadedBuffers: this.bufferFetcherService?.getDownloadedBuffersList(),\n hasCustomEnvironment: this.customEnvironment ? true : false,\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (settingId == \"reverbEnvironment\") {\n const reverbEnvironment = value as GenericSettingValue;\n\n if (reverbEnvironment) {\n const url = reverbEnvironment.value;\n\n try {\n if (url != \"custom\") {\n await this.bufferFetcherService?.fetchBuffer(url);\n }\n\n if (reverbEnvironment.additionalData) {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: reverbEnvironment.additionalData.size as number,\n addDuration: reverbEnvironment.additionalData.addDuration as number,\n link: reverbEnvironment.additionalData.link as string\n };\n } else {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: 0,\n addDuration: 0,\n link: \"\"\n };\n }\n } catch (e) { /* empty */ }\n }\n } else if (settingId == \"reverbCustomEnvironmentAddTime\") {\n if (utilFunctions.isSettingValueValid(value)) {\n this.reverbCustomEnvironmentAddTime = parseInt(value as string);\n }\n } else if (settingId == \"reverbCustomEnvironmentFile\") {\n if (this.bufferDecoderService && value) {\n this.customEnvironment = await this.bufferDecoderService.decodeBufferFromFile(value as File);\n\n if (!this.customEnvironment) {\n // Fallback to default environment\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n }\n }\n }\n \n async bufferFetcherReseted() {\n const reverbSettings = this.getSettings();\n \n if (reverbSettings) {\n const reverbUrl = (reverbSettings as ReverbSettings).reverbEnvironment?.value;\n \n if (reverbUrl && reverbUrl !== \"custom\" && this.bufferFetcherService) {\n await this.bufferFetcherService.fetchBuffer(reverbUrl);\n return true;\n }\n }\n\n return false;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilter {\n\n getNode(context: BaseAudioContext) {\n const lpf1 = context.createBiquadFilter();\n lpf1.type = \"lowpass\";\n lpf1.frequency.value = 2000.0;\n const lpf2 = context.createBiquadFilter();\n lpf2.type = \"lowpass\";\n lpf2.frequency.value = 2000.0;\n const hpf1 = context.createBiquadFilter();\n hpf1.type = \"highpass\";\n hpf1.frequency.value = 500.0;\n const hpf2 = context.createBiquadFilter();\n hpf2.type = \"highpass\";\n hpf2.frequency.value = 500.0;\n lpf1.connect(lpf2);\n lpf2.connect(hpf1);\n hpf1.connect(hpf2);\n \n return {\n input: lpf1,\n output: hpf2\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.TELEPHONIZER;\n }\n\n getSettings() {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport Constants from \"../model/Constants\";\nimport Vocoder from \"../utils/Vocoder\";\nimport VocoderSettings from \"../model/filtersSettings/VocoderSettings\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class VocoderFilter extends AbstractAudioFilter {\n\n private currentVocoder: Vocoder | null = null;\n private modulatorGainValue = 1.0;\n private carrierSampleGainValue = 0;\n private oscillatorGainValue = 1.0;\n private noiseGainValue = 0.2;\n private oscillatorDetuneValue = 0;\n\n getNode(context: BaseAudioContext): AudioFilterNodes {\n const modulatorBuffer = this.bufferFetcherService?.getAudioBuffer(Constants.VOCODER_MODULATOR);\n\n this.currentVocoder = new Vocoder(context, modulatorBuffer!);\n this.currentVocoder.init();\n this.applyCurrentSettingsToVocoder();\n\n const { modulatorGain, outputGain } = this.currentVocoder.getNodes();\n\n return {\n input: modulatorGain!,\n output: outputGain!\n };\n }\n\n getSettings(): VocoderSettings {\n return {\n modulatorGainValue: this.modulatorGainValue,\n carrierSampleGainValue: this.carrierSampleGainValue,\n oscillatorGainValue: this.oscillatorGainValue,\n noiseGainValue: this.noiseGainValue,\n oscillatorDetuneValue: this.oscillatorDetuneValue\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"modulatorGainValue\":\n this.modulatorGainValue = parseFloat(value as string);\n break;\n case \"carrierSampleGainValue\":\n this.carrierSampleGainValue = parseFloat(value as string);\n break;\n case \"oscillatorGainValue\":\n this.oscillatorGainValue = parseFloat(value as string);\n break;\n case \"noiseGainValue\":\n this.noiseGainValue = parseFloat(value as string);\n break;\n case \"oscillatorDetuneValue\":\n this.oscillatorDetuneValue = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToVocoder();\n }\n\n private applyCurrentSettingsToVocoder() {\n if(this.currentVocoder) {\n this.currentVocoder.updateModGain(this.modulatorGainValue);\n this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue);\n this.currentVocoder.updateSynthLevel(this.oscillatorGainValue);\n this.currentVocoder.updateNoiseLevel(this.noiseGainValue);\n this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue);\n }\n }\n \n get order(): number {\n return 1;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.VOCODER;\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport \"./worklets/Passthrough.worklet\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport PassThroughWorkletEvent from \"@/model/PassThroughWorkletEvent\";\nimport { EventType } from \"@/model/EventTypeEnum\";\n\nexport default class PassThroughFilter extends AbstractAudioFilterWorklet {\n\n private currentTime = 0;\n private lastSampleCount = 0;\n private samplePerSecond = 0;\n private currentTimeSamplesPerSecond = 0;\n\n receiveEvent(message: MessageEvent): void {\n const currentTime = performance.now();\n const samplesProcessed = message.data.samplesCount;\n\n if (message.data.command === \"update\") {\n this.calculatePercentageProcessed(currentTime, samplesProcessed);\n }\n\n this.calculateRemainingTimeProcessing(currentTime, samplesProcessed);\n }\n\n /**\n * Calculate percentage processed\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculatePercentageProcessed(currentTime: number, samplesProcessed: number) {\n if (this.currentTime === 0) {\n this.currentTime = currentTime;\n }\n\n const timeDifference = currentTime - this.currentTime;\n const percentageProcessed = (samplesProcessed / this._totalSamples);\n\n if (this.eventEmitter && timeDifference >= Constants.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL) {\n this.eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, percentageProcessed * 100);\n this.currentTime = currentTime;\n }\n }\n\n /**\n * Calculate remaining time to process the audio\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculateRemainingTimeProcessing(currentTime: number, samplesProcessed: number) {\n if (this.currentTimeSamplesPerSecond === 0) {\n this.currentTimeSamplesPerSecond = currentTime;\n }\n\n const timeDifferenceSamplePerSecond = currentTime - this.currentTimeSamplesPerSecond;\n const remainingSamples = this._totalSamples - samplesProcessed;\n\n if (this.eventEmitter && remainingSamples <= 0) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, 0);\n return;\n }\n\n if (this.eventEmitter && timeDifferenceSamplePerSecond >= 1000) {\n this.calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond, samplesProcessed);\n\n const remainingTimeSeconds = remainingSamples / this.samplePerSecond;\n\n this.currentTimeSamplesPerSecond = currentTime;\n this.lastSampleCount = samplesProcessed;\n\n if (isNaN(remainingTimeSeconds) || !isFinite(remainingTimeSeconds)) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n } else {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, remainingTimeSeconds);\n }\n }\n }\n\n /**\n * Calculate smoothed samples per second\n * @param timeDifferenceSamplePerSecond Time difference \n * @param samplesProcessed Samples count processed\n * @returns Smoothed samples per second\n */\n private calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond: number, samplesProcessed: number): void {\n if (timeDifferenceSamplePerSecond > 0) {\n const currentSampleRate = (samplesProcessed - this.lastSampleCount) / (timeDifferenceSamplePerSecond / 1000);\n this.samplePerSecond = (Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR * currentSampleRate) + ((1 - Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR) * this.samplePerSecond);\n }\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.PASSTHROUGH;\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.PASSTHROUGH;\n }\n\n get order(): number {\n return 10;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.PASSTHROUGH;\n }\n\n set totalSamples(value: number) {\n super.totalSamples = value;\n this.currentTime = 0;\n this.currentTimeSamplesPerSecond = 0;\n this.samplePerSecond = 0;\n this.lastSampleCount = 0;\n }\n\n getSettings() {\n return {};\n }\n\n isEnabled(): boolean {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { ConfigService } from \"./interfaces/ConfigService\";\n\n/**\n * Default implementation for a ConfigService, using a built-in map.\n * The configuration is not stored in localstorage in this case.\n */\n@injectable()\nexport default class GenericConfigService implements ConfigService {\n\n private mapConfig = new Map();\n\n getConfig(key: string): string | undefined | null {\n return this.mapConfig.get(key);\n }\n\n setConfig(key: string, value: string): void {\n this.mapConfig.set(key, value);\n }\n\n isCompatibilityModeEnabled(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED) == \"true\";\n }\n\n isCompatibilityModeChecked(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED) == \"true\";\n }\n\n isAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n isSoundtouchAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n getBufferSize(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BUFFER_SIZE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_BUFFER_SIZE;\n }\n\n getSampleRate(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.SAMPLE_RATE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_SAMPLE_RATE;\n }\n\n getBitrateMP3(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BITRATE_MP3);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_MP3_BITRATE;\n }\n\n enableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"true\");\n }\n\n disableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"false\");\n }\n\n getWorkletBasePath(): string {\n return \"\";\n }\n\n getWorkerBasePath(): string {\n return \"\";\n }\n\n getSoundBasePath(): string {\n return \"\";\n }\n\n isInitialRenderingDisabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.DISABLE_INITIAL_RENDERING;\n }\n};\n","import { TYPES } from \"@/inversify.types\";\nimport AudioEditorInterface from \"@/audioEditor/interfaces/AudioEditorInterface\";\nimport { audioEditorContainer } from \"@/inversify.config\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\nimport BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport GenericConfigService from \"@/services/GenericConfigService\";\nimport VoiceRecorderInterface from \"@/voiceRecorder/interfaces/VoiceRecorderInterface\";\n\nexport default class SoundStudioFactory {\n\n private static ready = false;\n\n static createAudioEditor(configService?: ConfigService, buffersToFetch?: string[]): AudioEditorInterface {\n if (!SoundStudioFactory.ready) {\n if (configService) {\n audioEditorContainer.bind(TYPES.ConfigService).toDynamicValue(() => configService);\n } else {\n audioEditorContainer.bind(TYPES.ConfigService).to(GenericConfigService);\n console.warn(\"No ConfigService provided. Using default generic implementation.\");\n }\n \n audioEditorContainer.bind(TYPES.AudioBuffersToFetch).toConstantValue(buffersToFetch || []);\n SoundStudioFactory.ready = true;\n }\n\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static createVoiceRecorder(): VoiceRecorderInterface {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getAudioEditorInstance(): AudioEditorInterface | null {\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static getAudioPlayerInstance(): BufferPlayerInterface | null {\n return audioEditorContainer.get(TYPES.BufferPlayer);\n }\n\n static getAudioRecorderInstance(): VoiceRecorderInterface | null {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getEventEmitterInstance(): EventEmitterInterface | null {\n return audioEditorContainer.get(TYPES.EventEmitter);\n }\n\n static getConfigServiceInstance(): ConfigService | undefined {\n return audioEditorContainer.get(TYPES.ConfigService);\n }\n}\n"],"names":["Reflect","factory","root","globalThis","global","self","this","Function","_","functionThis","eval","indirectEvalThis","exporter","makeExporter","target","previous","key","value","Object","defineProperty","configurable","writable","hasOwn","prototype","hasOwnProperty","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","create","supportsProto","__proto__","Array","downLevel","HashMap","MakeDictionary","has","map","call","get","undefined","functionPrototype","getPrototypeOf","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","registrySymbol","for","metadataRegistry","GetOrCreateMetadataRegistry","metadataProvider","CreateMetadataProvider","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","provider","GetMetadataProvider","OrdinaryDeleteMetadata","i","length","decorated","descriptor","MetadataKey","O","P","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","set","keys","_i","ownKeys_1","add","push","_a","parentKeys_1","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","valueOf","toString_1","toString","IsCallable","argument","ToString","isArray","SameValueZero","y","V","func","GetIterator","obj","method","IteratorValue","iterResult","IteratorStep","next","done","IteratorClose","f","proto","prototypeProto","constructor","CreateMetadataRegistry","fallback","first","second","rest","CreateFallbackProvider","targetProviderMap","registry","registerProvider","getProvider","setProvider","isExtensible","Error","getProviderNoCache","isProviderFor","providerMap","hasProvider","existingProvider","enumerable","targetMetadata","GetOrCreateMetadataMap","Create","createdTargetMetadata","metadataMap","delete","k","nextValue","e","size","reflect","metadataOwner","metadataPropertySet","registeredProvider","cacheSentinel","arraySentinel","MapIterator","values","selector","_index","_keys","_values","_selector","index","throw","error","return","_cacheKey","_cacheIndex","_find","clear","getKey","getValue","getEntry","insert","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","Math","random","GenRandomBytes","Uint8Array","array","crypto","getRandomValues","msCrypto","data","offset","byte","toLowerCase","__","NAMED_TAG","NAME_TAG","UNMANAGED_TAG","OPTIONAL_TAG","INJECT_TAG","MULTI_INJECT_TAG","TAGGED","TAGGED_PROP","PARAM_TYPES","POST_CONSTRUCT","PRE_DESTROY","NON_CUSTOM_TAG_KEYS","BindingScopeEnum","Request","Singleton","Transient","BindingTypeEnum","ConstantValue","Constructor","DynamicValue","Factory","Instance","Invalid","Provider","TargetTypeEnum","ClassProperty","ConstructorArgument","Variable","idCounter","id","Binding","serviceIdentifier","scope","activated","type","constraint","request","implementationType","cache","onActivation","onDeactivation","dynamicValue","clone","DUPLICATED_METADATA","NULL_ARGUMENT","KEY_NOT_FOUND","AMBIGUOUS_MATCH","NOT_REGISTERED","MISSING_INJECTABLE_ANNOTATION","MISSING_INJECT_ANNOTATION","CIRCULAR_DEPENDENCY","INVALID_DECORATOR_OPERATION","ARGUMENTS_LENGTH_MISMATCH","arguments","POST_CONSTRUCT_ERROR","clazz","errorMessage","PRE_DESTROY_ERROR","ON_DEACTIVATION_ERROR","STACK_OVERFLOW","MetadataReader","getConstructorMetadata","constructorFunc","compilerGeneratedMetadata","METADATA_KEY.PARAM_TYPES","userGeneratedMetadata","METADATA_KEY.TAGGED","getPropertiesMetadata","METADATA_KEY.TAGGED_PROP","BindingCount","MultipleBindingsAvailable","NoBindingsAvailable","OnlyOneBindingAvailable","isStackOverflowExeption","RangeError","message","ERROR_MSGS.STACK_OVERFLOW","getServiceIdentifierAsString","name","listRegisteredBindingsForServiceIdentifier","container","getBindings","registeredBindingsList","registeredBindings","forEach","binding","getFunctionName","metaData","alreadyDependencyChain","parentRequest","circularDependencyToException","childRequests","childRequest","services","stringArr","_createStringArr","req","reverse","join","dependencyChainToString","ERROR_MSGS.CIRCULAR_DEPENDENCY","name_1","match","Context","addPlan","plan","setCurrentRequest","currentRequest","Metadata","METADATA_KEY.NAMED_TAG","String","Plan","parentContext","rootRequest","LazyServiceIdentifier","cb","_cb","unwrap","QueryableString","str","startsWith","searchString","indexOf","endsWith","reverseString","reverseSearchString","split","contains","equals","compareString","Target","identifier","namedOrTagged","queryableName","slice","metadataItem","hasTag","METADATA_KEY.MULTI_INJECT_TAG","matchesArray","matchesTag","isNamed","isTagged","some","METADATA_KEY.NON_CUSTOM_TAG_KEYS","every","isOptional","METADATA_KEY.OPTIONAL_TAG","getNamedTag","filter","m","getCustomTags","matchesNamedTag","_this","__spreadArray","to","from","pack","ar","l","concat","getTargets","metadataReader","constructorName","isBaseClass","serviceIdentifiers","ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION","constructorArgsMetadata","hasUserDeclaredUnknownInjections","hasOptionalParameters","constructorTargets","iterations","targets","getConstructorArgsAsTarget","getConstructorArgsAsTargets","propertyTargets","getClassPropsAsTargets","formatTargetMetadata","isManaged","unmanaged","injectIdentifier","inject","multiInject","ERROR_MSGS.MISSING_INJECT_ANNOTATION","targetName","_getServiceIdentifierForProperty","propertyName","className","msg","classPropsMetadata","symbolKeys","getOwnPropertySymbols","keys_1","baseConstructor","baseTargets","getBaseClassDependencyCount","t","METADATA_KEY.UNMANAGED_TAG","unmanagedCount","apply","dependencyCount","targetMetadataMap","METADATA_KEY.INJECT_TAG","METADATA_KEY.NAME_TAG","bindings","requestScope","addChildRequest","child","getBindingDictionary","cntnr","_bindingDictionary","_getActiveBindings","avoidConstraints","context","activeBindings","options","autoBindInjectable","bind","toSelf","serviceIdentifierString","ERROR_MSGS.NOT_REGISTERED","m_1","namedTag","otherTags","tag","listMetadataForTarget","ERROR_MSGS.AMBIGUOUS_MATCH","_validateActiveBindingCount","_createSubRequests","thePlan","subChildRequest","dependencies","getDependencies","skipBaseClassChecks","baseClassDependencyCount","ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH","dependency","bindingDictionary","hasKey","isMultiInject","targetType","injectMetadata","tagMetadata","_createTarget","isPromise","object","then","isPromiseOrContainsPromise","FactoryType","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","rejected","__generator","body","g","label","sent","trys","ops","verb","n","v","op","pop","_saveToRequestScope","_saveToSingletonScope","_saveAsyncResultToSingletonScope","asyncResult","ex_1","__assign","assign","s","p","_createInstance","constr","resolveRequest","resolved","reduce","resolvedRequests","injection","constructorInjections","propertyRequests","propertyInjections","isAsync","_resolveRequests","createInstanceWithInjectionsArg","args","possiblyWaitInjections","createInstanceWithInjections","createInstanceWithInjectionsAsync","instance","r","property","possiblePromiseinjections","injections","possiblePromiseinjections_1","all","_getInstanceAfterPostConstruct","postConstructResult","_b","METADATA_KEY.POST_CONSTRUCT","_postConstruct","_validateInstanceResolution","scopeErrorMessage","METADATA_KEY.PRE_DESTROY","_throwIfHandlingDeactivation","_resolveRequest","targetIsAnArray","targetParentIsNotAnArray","_f","_resolveBinding","_resolveFactoryFromBinding","factoryDetails","factoryType","getFactoryDetails","fn","errorCallback","tryAndThrowErrorIfStackOverflow","_getResolvedFromBinding","boundValue","serviceIdentifierAsString","ERROR_MSGS.INVALID_BINDING_TYPE","ensureFullyBound","resolvedResult","resolveInstance","_resolveInScope","resolveFromBinding","tryGetFromScope","saveToScope","_onActivation","_bindingActivation","containersIterator","_getContainersIterator","containersIteratorResult","context_1","activationsIterator","_getContainerActivationsForService","_activateContainerAsync","_activateContainer","previousResult","activation","resultPromise","activations","_activations","containersStack","nextContainer","traverseAncerstors","taggedConstraint","namedConstraint","typeConstraint","BindingWhenSyntax","_binding","when","BindingOnSyntax","whenTargetNamed","whenTargetIsDefault","whenTargetTagged","whenInjectedInto","whenParentNamed","whenParentTagged","whenAnyAncestorIs","ancestor","whenNoAncestorIs","whenAnyAncestorNamed","whenNoAncestorNamed","whenAnyAncestorTagged","whenNoAncestorTagged","whenAnyAncestorMatches","whenNoAncestorMatches","handler","BindingWhenOnSyntax","_bindingWhenSyntax","_bindingOnSyntax","BindingInSyntax","inRequestScope","inSingletonScope","inTransientScope","BindingInWhenOnSyntax","_bindingInSyntax","BindingToSyntax","toConstantValue","toDynamicValue","toConstructor","toFactory","toFunction","bindingWhenOnSyntax","toAutoFactory","toAutoNamedFactory","named","getNamed","toProvider","toService","service","ContainerSnapshot","of","middleware","deactivations","moduleActivationStore","snapshot","Lookup","getMap","ERROR_MSGS.NULL_ARGUMENT","entry","ERROR_MSGS.KEY_NOT_FOUND","remove","removeIntersection","lookup","traverse","lookupActivations","filteredValues","lookupValue","moduleActivation","_setValue","removeByCondition","condition","removals","updatedEntries","entries_1","copy","b","ModuleActivationStore","moduleId","handlers","_getEmptyHandlersStore","addDeactivation","_getModuleActivationHandlers","onDeactivations","addActivation","onActivations","handlersStore","moduleActivationHandlers","Container","containerOptions","defaultScope","_snapshots","_middleware","_deactivations","_metadataReader","_moduleActivationStore","merge","container1","container2","containers","targetContainers","targetContainer","targetBindingDictionary","destination","load","modules","getHelpers","_getContainerModuleHelpersFactory","modules_1","currentModule","containerModuleHelpers","bindFunction","unbindFunction","isboundFunction","rebindFunction","unbindAsyncFunction","onActivationFunction","onDeactivationFunction","loadAsync","modules_2","unload","module","_removeModuleBindings","_deactivateSingletons","_removeModuleHandlers","unloadAsync","modules_3","module_1","_deactivateSingletonsAsync","rebind","unbind","rebindAsync","unbindAsync","_removeServiceFromDictionary","unbindAll","unbindAllAsync","promises","isBound","bound","isCurrentBound","isBoundNamed","isBoundTagged","request_1","createMockRequest","restore","createChild","applyMiddleware","middlewares","initial","_planAndResolve","prev","curr","applyCustomMetadataReader","getArgs","_getNotAllArgs","_getButThrowIfAsync","getAsync","_get","getTagged","getTaggedAsync","getNamedAsync","getAll","_getAllArgs","getAllAsync","_getAll","getAllTagged","getAllTaggedAsync","getAllNamed","getAllNamedAsync","constructorFunction","_preDestroy","moduleActivationsHandlers","_deactivate","_deactivateContainer","_handleDeactivationError","_propagateContainerDeactivationThenBindingAndPreDestroyAsync","propagateDeactivationResult","_propagateContainerDeactivationThenBindingAndPreDestroy","ex","ERROR_MSGS.ON_DEACTIVATION_ERROR","deactivationsIterator","deactivation","_deactivateContainerAsync","setModuleId","bindingToSyntax","getRebindFunction","getOnActivationFunction","getOnDeactivationFunction","mId","planAndResolveArgs","contextInterceptor","middlewareResult","_deactivateIfSingleton","bindings_1","_bindingDeactivationAndPreDestroy","_bindingDeactivationAndPreDestroyAsync","ERROR_MSGS.CANNOT_UNBIND","tagParameter","annotationTarget","parameterName","parameterIndex","ERROR_MSGS.INVALID_DECORATOR_OPERATION","_throwIfMethodParameter","_tagParameterOrProperty","_ensureNoMetadataKeyDuplicates","metadatas","duplicate","seenValues","array_1","getFirstArrayDuplicate","md","ERROR_MSGS.DUPLICATED_METADATA","paramsOrPropertiesMetadata","paramOrPropertyMetadata","_loop_1","paramOrPropertyMetadata_1","createTaggedDecorator","targetKey","indexOrPropertyDescriptor","tagProperty","injectable","types","injectBase","TYPES","AudioContextManager","AudioEditor","AudioProcessor","BufferManager","FilterManager","RendererManager","SaveBufferManager","ConfigService","EventEmitter","BufferPlayer","BufferDecoderService","BufferFetcherService","AudioBuffersToFetch","Renderers","Filters","EntryPointFilter","VoiceRecorder","__decorate","desc","d","c","getOwnPropertyDescriptor","__param","paramIndex","__metadata","EventType","SuppressedError","Constants","AUDIO_EDITOR","VOICE_RECORDER","BUFFER_PLAYER","AUDIO_CONTEXT_MANAGER","AUDIO_PROCESSOR","BUFFER_MANAGER","FILTER_MANAGER","RENDERER_MANAGER","SAVE_BUFFER_MANAGER","EXPORT_WAV_COMMAND","EXPORT_MP3_COMMAND","AUDIO_WAV","AUDIO_MP3","RECORD_COMMAND","INIT_COMMAND","FILTERS_NAMES","REVERB","ECHO","BASS_BOOST","BITCRUSHER","HIGH_PASS","LIMITER","LOW_PASS","PASSTHROUGH","RETURN_AUDIO","SOUNDTOUCH","TELEPHONIZER","VOCODER","WORKLET_PATHS","RECORDER_WORKLET","WORKLET_NAMES","PREFERENCES_KEYS","COMPATIBILITY_MODE_ENABLED","COMPATIBILITY_MODE_CHECKED","ENABLE_AUDIO_WORKLET","ENABLE_SOUNDTOUCH_AUDIO_WORKLET","BUFFER_SIZE","SAMPLE_RATE","DISABLE_INITIAL_RENDERING","BITRATE_MP3","ENABLE_RECORDER_AUDIO_WORKLET","SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE","DEFAULT_REVERB_ENVIRONMENT","url","addDuration","link","VOCODER_MODULATOR","DEFAULT_BUFFER_SIZE","VALID_BUFFER_SIZE","VALID_MP3_BITRATES","DEFAULT_SAMPLE_RATE","VALID_SAMPLE_RATES","TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL","TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR","DEFAULT_SAVE_FORMAT","DEFAULT_MP3_BITRATE","listeners","on","event","callback","emit","off","eventEmitter","configService","previousSampleRate","setup","getSampleRate","SAMPLE_RATE_CHANGED","currentContext","createNewContext","createNewContextIfNeeded","principalBuffer","isCompatibilityModeEnabled","currentSampleRate","sampleRate","_currentContext","oldAudioContext","destroyOldContext","latencyHint","AudioContext","close","AbstractAudioElement","enabled","defaultEnabled","bufferFetcherService","bufferDecoderService","isEnabled","isDefaultEnabled","setDefaultEnabled","state","setEnabled","enable","disable","toggle","injectDependencies","utilFunctions","calcAudioDuration","audio","speed","duration","loadAudioBuffer","file","arrayBuffer","readAsArrayBufferPromisified","audioBuffer","decodeAudioData","decodeBuffer","reader","FileReader","onload","ev","ArrayBuffer","readAsArrayBuffer","numberOfChannels","resume","newBuffer","createBuffer","sourceChannelData","getChannelData","channel0Data","channel1Data","convertAudioBufferToFloat32Array","channel","convertAudioParamToFloat32Array","param","Float32Array","sumAudioBufferChannel","a","sumAudioBuffer","sum","isAudioWorkletCompatible","audioContext","isSettingValueValid","isNaN","Number","trim","calculateAudioDuration","filterManager","speedAudio","getAddingTime","resetAudioRenderingProgress","UPDATE_AUDIO_TREATMENT_PERCENT","UPDATE_REMAINING_TIME_ESTIMATED","forceDownload","blob","filename","window","document","createElement","URL","webkitURL","createObjectURL","appendChild","href","download","click","revokeObjectURL","rendererManager","contextManager","saveBufferManager","audioProcessor","bufferManager","player","super","bufferPlayer","onBeforePlaying","compatibilityMode","setupOutput","PLAYING_FINISHED","loop","start","addFilters","filters","addRenderers","renderers","defaultDeviceSampleRate","tempContext","loadBufferFromFile","prepareContext","decodeBufferFromFile","initialRenderingDone","sumInputBuffer","utils","loadBuffer","getOutputBuffer","renderedBuffer","renderAudio","isAudioWorkletAvailable","getFiltersState","getRenderersState","getFiltersSettings","reconnectNodesIfNeeded","entrypointFilter","connectNodes","getSpeed","toggleFilter","filterId","toggleRenderer","changeFilterSettings","settings","resetFilterSettings","resetAllFiltersState","resetAllRenderersState","exit","stop","reset","cancelAudioRendering","saveBuffer","downloadingInitialData","order","_renderedBuffer","audioRenderingLastCanceled","inputBuffer","resetBufferFetcher","isInitialRenderingDisabled","loadInitialBuffer","durationAudio","offlineContext","OfflineAudioContext","outputContext","executeAudioRenderers","currentOfflineContext","setupTotalSamples","setupPlayerSpeed","initializeWorklets","currentNodes","output","connect","startRendering","loadRenderedAudio","OFFLINE_AUDIO_RENDERING_FINISHED","setCompatibilityMode","AUDIO_RENDERING_FINISHED","CANCELLED_AND_LOADED_INITIAL_AUDIO","isCompatibilityModeChecked","setCompatibilityModeChecked","enableCompatibilityMode","COMPATIBILITY_MODE_AUTO_ENABLED","RENDERING_AUDIO_PROBLEM_DETECTED","disconnectOldNodes","CANCELLING_AUDIO_PROCESSING","checked","setConfig","audioBuffersToFetch","fetchBuffers","refetch","LOADING_BUFFERS","fetchAllBuffers","LOADED_BUFFERS","LOADING_BUFFERS_ERROR","resetFilterBuffers","entryPointFilter","_entryPointFilter","_currentNodes","initializeDefaultSettings","getSettings","find","setSetting","resetSettings","element","keepCurrentInputOutput","isCompatibilityMode","entrypointNode","entrypointNodes","getEntrypointNode","intermediateNodes","previousNode","sort","node","getNode","updateState","keepCurrentOutput","disconnect","intermediate","isWorklet","initializeWorklet","totalSamples","bufferFetcherReseted","renderer","rendererId","currentBuffer","getRecorderWorker","workerBasePath","Worker","Recorder","cfg","worker","config","bufferLen","numChannels","mimeType","workletBasePath","bitrate","callbacks","getBuffer","exportWAV","exportMP3","recording","source","AudioWorkletNode","port","postMessage","createRecorderNode","command","onmessage","createRecorderWorklet","createRecorderScriptProcessorNode","audioWorklet","addModule","numChannelParameter","parameters","setValueAtTime","onaudioprocess","record","kill","terminate","Recorder$1","savingBuffer","playingStoppedCallback","PLAYING_STOPPED","savingResult","saveBufferCompatibilityMode","saveBufferDirect","getWorkerBasePath","downloadAudioBlob","format","rec","getBufferSize","getWorkletBasePath","finishedCallback","downloadBlobCallback","Date","toISOString","currentTime","displayTime","intervals","playing","onBeforePlayingCallback","currentNode","_contextManager","init","direct","createBufferSource","updateInfos","clearIntervals","interval","clearInterval","PLAYING_STARTED","startTime","performance","now","setInterval","timeNow","nextTime","playDirect","pause","PLAYING_UPDATE","setTimePercent","percent","round","setTime","time","toggleLoop","currentTimeDisplay","trunc","maxTimeDisplay","remainingTimeDisplay","buffers","bufferErrors","fetchBuffer","bufferURI","force","realBufferURI","getSoundBasePath","getKeyFromLocation","FETCHING_BUFFERS","response","fetch","ok","FETCHING_BUFFERS_ERROR","_c","FINISHED_FETCHING_BUFFERS","_d","bufferURIs","uri","getAudioBuffer","getOrFetchAudioBuffer","getDownloadedBuffersList","location","substring","lastIndexOf","DECODING_AUDIO_FILE","DECODED_AUDIO_FILE","console","ERROR_DECODING_AUDIO_FILE","AbstractAudioRenderer","AbstractAudioFilter","defaultSettings","_totalSamples","getDefaultSettings","AudioParamPolyfill","defaultValue","_value","_minValue","_maxValue","MAX_SAFE_INTEGER","_defaultValue","automationRate","newValue","max","min","minValue","maxValue","warn","linearRampToValueAtTime","endTime","exponentialRampToValueAtTime","cancelAndHoldAtTime","cancelTime","cancelScheduledValues","setTargetAtTime","timeConstant","setValueCurveAtTime","WorkletScriptProcessorNodeAdapter","bufferSize","_parameters","_port","workletProcessor","_scriptProcessorNode","createScriptProcessor","setupPort","setupProcessor","setupWorkletScope","messageChannel","MessageChannel","port1","port2","inputArray","Functions","ouputArray","outputBuffer","records","recordsMap","fromEntries","process","descriptors","defaultParameterDescriptors","RegisterProcessorPolyfill","registerProcessor","processorName","processorClass","processorsMap","getProcessor","processor","SimpleAudioWorkletProcessor","inputs","outputs","parameterDescriptors","AudioWorkletProcessor","AbstractAudioFilterWorklet","currentWorkletNode","fallbackToScriptProcessor","keepCurrentNodeIfPossible","workletPath","catch","isAudioWorkletEnabled","initializeNode","workletName","receiveEvent","applyCurrentSettingsToWorklet","currentSettings","settingKey","settingFromWorklet","BitCrusherProcessor","stopped","phaser","last","pow","bits","currentNormFreq","normFreq","fill","blockSize","inp","out","floor","DelayBuffer","_array","readPointer","writePointer","read","LimiterProcessor","delayBuffer","envelopeSample","disabled","getEnvelope","attackTime","releaseTime","attackGain","exp","releaseGain","envelope","envIn","abs","getMaxEnvelope","channels","ampToDB","log10","dBToAmp","db","envelopeData","postGainAmp","postGain","preGainAmp","preGain","lookAheadTime","slope","gainDB","threshold","gain","FifoSampleBuffer","_vector","_position","_frameCount","vector","position","startIndex","frameCount","endIndex","receive","rewind","put","numFrames","putSamples","samples","sourceOffset","numSamples","ensureCapacity","destOffset","subarray","putBuffer","receiveSamples","extract","minLength","parseInt","newVector","ensureAdditionalCapacity","AbstractFifoSamplePipe","createBuffers","_inputBuffer","_outputBuffer","RateTransposer","_rate","rate","slopeCount","prevSampleL","prevSampleR","numFramesOutput","transpose","src","srcOffset","dest","used","srcIndex","FilterSupport","pipe","_pipe","fillInputBuffer","fillOutputBuffer","numInputFrames","noop","SimpleFilter","sourceSound","historyBufferSize","_sourcePosition","outputBufferPosition","newOutputBufferPosition","sourcePosition","onEnd","numFramesExtracted","currentFrames","handleSampleData","_SCAN_OFFSETS","AUTOSEEK_K","Stretch","_quickSeek","midBufferDirty","midBuffer","overlapLength","autoSeqSetting","autoSeekSetting","_tempo","setParameters","clearMidBuffer","sequenceMs","seekWindowMs","overlapMs","calculateSequenceParameters","calculateOverlapLength","tempo","newTempo","intskip","nominalSkip","seekWindowLength","skipFract","sampleReq","seekLength","inputChunkSize","outputChunkSize","overlapInMsec","newOvl","refMidBuffer","checkLimits","mi","ma","seq","seek","AUTOSEQ_AT_MIN","AUTOSEEK_AT_MIN","quickSeek","seekBestOverlapPosition","seekBestOverlapPositionStereoQuick","seekBestOverlapPositionStereo","bestOffset","bestCorrelation","correlation","preCalculateCorrelationReferenceStereo","MIN_VALUE","calculateCrossCorrelationStereo","correlationOffset","tempOffset","scanCount","j","temp","mixingPosition","compare","mixing","calcLength","mixingOffset","overlap","overlapPosition","overlapStereo","inputPosition","outputPosition","tempFrame","frameScale","fi","inputOffset","outputOffset","overlapSkip","testFloatEqual","SoundTouch","transposer","stretch","_intermediateBuffer","virtualPitch","virtualRate","virtualTempo","calculateEffectiveRateAndTempo","rateChange","tempoChange","pitch","pitchOctaves","pitchSemitones","previousTempo","previousRate","WebAudioBufferSource","dualChannel","left","right","minsSecs","secs","mins","width","z","onUpdate","currentTimePlayed","timePlayed","CustomEvent","detail","formattedTimePlayed","percentagePlayed","_node","dispatchEvent","PitchShifter","_soundtouch","_filter","sourcePositionCallback","framesExtracted","getWebAudioNode","sourcePostion","formattedDuration","perc","semitone","toNode","eventName","addEventListener","removeEventListener","soundtouchWrapperFilterWorkletNodeClass","running","_pitch","updateInterval","processorOptions","status","messageProcessor","SoundtouchWrapperFilterWorkletNode","Vocoder","ctx","carrierB","modulatorB","FILTER_QUALITY","FOURIER_SIZE","WAVETABLEBOOST","SAWTOOTHBOOST","oscillatorType","oscillatorDetuneValue","carrierBuffer","modulatorNode","vocoding","modulatorInput","carrierInput","modulatorGain","modulatorGainValue","noiseBuffer","noiseNode","noiseGain","noiseGainValue","carrierSampleNode","carrierSampleGain","carrierSampleGainValue","oscillatorNode","oscillatorGain","oscillatorGainValue","wavetable","wavetableSignalGain","modFilterBands","modFilterPostGains","heterodynes","powers","lpFilters","lpFilterPostGains","carrierBands","carrierFilterPostGains","carrierBandGains","vocoderBands","numVocoderBands","hpFilterGain","outputGain","modulatorBuffer","generateVocoderBands","setupVocoderGraph","vocode","getNodes","synthLevel","shutOffCarrier","selectSawtooth","selectWavetable","setPeriodicWave","updateModGain","updateSampleLevel","updateSynthLevel","updateNoiseLevel","updateDetuneValue","detune","startFreq","endFreq","numBands","centsPerBand","log","LN2","scale","currentFreq","frequency","loadNoiseBuffer","lengthInSamples","bufferData","initBandpassFilters","createGain","waveShaperCurve","n2","hpFilter","createBiquadFilter","Q","rectifierCurve","modulatorFilter","secondModulatorFilter","modulatorFilterPostGain","heterodyneOscillator","createOscillator","heterodyne","heterodynePostGain","rectifier","createWaveShaper","curve","lpFilter","lpFilterPostGain","waveshaper","carrierFilter","secondCarrierFilter","carrierFilterPostGain","bandGain","real","imag","createPeriodicWave","createCarriersAndPlay","PassthroughWorkletProcessor","samplesCount","sample","TimerSaveTime","seconds","incr","initialSeconds","countCallback","count","onCount","recorder","stream","alreadyInit","timer","enableAudioFeedback","deviceList","constraints","noiseSuppression","echoCancellation","autoGainControl","ideal","sampleRateConfigNotSupported","isRecordingAvailable","navigator","mediaDevices","getSupportedConstraints","RECORDER_INIT","getUserMedia","RECORDER_COUNT_UPDATE","successCallback","notFoundErrorCallback","unknownErrorCallback","ondevicechange","updateInputList","RECORDER_SUCCESS","RECORDER_ERROR","RECORDER_NOT_FOUND_ERROR","RECORDER_UNKNOWN_ERROR","audioFeedback","RECORDER_UPDATE_CONSTRAINTS","getConstraints","tracks","getTracks","updateConstraints","resetConstraints","newConstraint","precAudioFeedback","precRecording","applyConstraints","newConstraints","newConstraintName","stopStream","createMediaStreamSource","setNoiseSuppression","setAutoGain","setEchoCancellation","devices","enumerateDevices","device","kind","changeInput","deviceId","groupId","RECORDER_RECORDING","RECORDER_STOPPED","RECORDER_PAUSED","RECORDER_RESETED","audioEditorContainer","frequencyAudio","currentSpeedAudio","isOfflineMode","constructAudioWorkletProcessor","offline","cleanUpOldNodes","bufferSource","renderWithWorklet","renderWithScriptProcessorNode","currentPitchShifter","getSoundtouchScriptProcessorNode","currentPitchShifterWorklet","bufferSourceRendered","bypass","nInputFrames","approximateNInputFrames","isSoundtouchAudioWorkletEnabled","getCurrentPitchShifter","pitchShifter","settingId","valueFloat","parseFloat","totalFrames","bufferReturned","nowBuffering","frequencyBooster","frequencyReduce","dbBooster","dbReduce","bassBoostFilter","bassBoostFilterHighFreq","delay","delayNode","createDelay","delayTime","gainNode","highFrequency","highPassFilter","lowFrequency","lowPassFilter","reverbEnvironment","reverbCustomEnvironmentAddTime","customEnvironment","convolver","createConvolver","getReverbBuffer","additionalData","downloadedBuffers","hasCustomEnvironment","reverbSettings","reverbUrl","lpf1","lpf2","hpf1","hpf2","currentVocoder","applyCurrentSettingsToVocoder","lastSampleCount","samplePerSecond","currentTimeSamplesPerSecond","samplesProcessed","calculatePercentageProcessed","calculateRemainingTimeProcessing","timeDifference","percentageProcessed","timeDifferenceSamplePerSecond","remainingSamples","calculateSmoothedSamplePerSecond","remainingTimeSeconds","isFinite","GenericConfigService","mapConfig","getConfig","setting","getBitrateMP3","disableCompatibilityMode","SoundStudioFactory","createAudioEditor","buffersToFetch","ready","createVoiceRecorder","getAudioEditorInstance","getAudioPlayerInstance","getAudioRecorderInstance","getEventEmitterInstance","getConfigServiceInstance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,73]} \ No newline at end of file +{"version":3,"file":"SimpleSoundStudioLibrary.js","sources":["../../node_modules/reflect-metadata/Reflect.js","../../node_modules/inversify/es/constants/metadata_keys.js","../../node_modules/inversify/es/constants/literal_types.js","../../node_modules/inversify/es/utils/id.js","../../node_modules/inversify/es/bindings/binding.js","../../node_modules/inversify/es/constants/error_msgs.js","../../node_modules/inversify/es/planning/metadata_reader.js","../../node_modules/inversify/es/bindings/binding_count.js","../../node_modules/inversify/es/utils/exceptions.js","../../node_modules/inversify/es/utils/serialization.js","../../node_modules/inversify/es/planning/context.js","../../node_modules/inversify/es/planning/metadata.js","../../node_modules/inversify/es/planning/plan.js","../../node_modules/inversify/es/annotation/lazy_service_identifier.js","../../node_modules/inversify/es/planning/queryable_string.js","../../node_modules/inversify/es/planning/target.js","../../node_modules/inversify/es/planning/reflection_utils.js","../../node_modules/inversify/es/planning/request.js","../../node_modules/inversify/es/planning/planner.js","../../node_modules/inversify/es/utils/async.js","../../node_modules/inversify/es/scope/scope.js","../../node_modules/inversify/es/utils/factory_type.js","../../node_modules/inversify/es/utils/binding_utils.js","../../node_modules/inversify/es/resolution/instantiation.js","../../node_modules/inversify/es/resolution/resolver.js","../../node_modules/inversify/es/syntax/constraint_helpers.js","../../node_modules/inversify/es/syntax/binding_when_syntax.js","../../node_modules/inversify/es/syntax/binding_on_syntax.js","../../node_modules/inversify/es/syntax/binding_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_in_syntax.js","../../node_modules/inversify/es/syntax/binding_in_when_on_syntax.js","../../node_modules/inversify/es/syntax/binding_to_syntax.js","../../node_modules/inversify/es/container/container_snapshot.js","../../node_modules/inversify/es/container/lookup.js","../../node_modules/inversify/es/utils/clonable.js","../../node_modules/inversify/es/container/module_activation_store.js","../../node_modules/inversify/es/container/container.js","../../node_modules/inversify/es/annotation/decorator_utils.js","../../node_modules/inversify/es/utils/js.js","../../node_modules/inversify/es/annotation/injectable.js","../../node_modules/inversify/es/annotation/inject_base.js","../../node_modules/inversify/es/annotation/inject.js","../../node_modules/inversify/es/annotation/multi_inject.js","../../lib/inversify.types.ts","../../node_modules/tslib/tslib.es6.js","../../lib/model/EventTypeEnum.ts","../../lib/model/Constants.ts","../../lib/utils/EventEmitter.ts","../../lib/audioEditor/AudioContextManager.ts","../../lib/filters/interfaces/AbstractAudioElement.ts","../../lib/utils/Functions.ts","../../lib/audioEditor/AudioEditor.ts","../../lib/audioEditor/AudioProcessor.ts","../../lib/audioEditor/BufferManager.ts","../../lib/audioEditor/FilterManager.ts","../../lib/audioEditor/RendererManager.ts","../../lib/recorder/getRecorderWorker.ts","../../lib/recorder/Recorder.ts","../../lib/audioEditor/SaveBufferManager.ts","../../lib/bufferPlayer/BufferPlayer.ts","../../lib/services/BufferFetcherService.ts","../../lib/services/BufferDecoderService.ts","../../lib/filters/interfaces/AbstractAudioRenderer.ts","../../lib/filters/interfaces/AbstractAudioFilter.ts","../../lib/workletPolyfill/AudioParamPolyfill.ts","../../lib/workletPolyfill/WorkletScriptProcessorNodeAdapter.ts","../../lib/workletPolyfill/RegisterProcessorPolyfill.ts","../../lib/workletPolyfill/SimpleAudioWorkletProcessor.ts","../../lib/workletPolyfill/AudioWorkletProcessorPolyfill.ts","../../lib/filters/interfaces/AbstractAudioFilterWorklet.ts","../../lib/filters/worklets/BitCrusher.worklet.ts","../../lib/utils/DelayBuffer.ts","../../lib/filters/worklets/Limiter.worklet.ts","../../lib/filters/LimiterFilter.ts","../../node_modules/soundtouchjs/dist/soundtouch.js","../../lib/filters/worklets/SoundtouchWrapperFilterWorkletNode.ts","../../lib/utils/Vocoder.ts","../../lib/filters/worklets/Passthrough.worklet.ts","../../lib/utils/TimerSaveTime.ts","../../lib/voiceRecorder/VoiceRecorder.ts","../../lib/inversify.config.ts","../../lib/filters/SountouchWrapperFilter.ts","../../lib/filters/ReturnAudioRenderer.ts","../../lib/filters/BassBoosterFilter.ts","../../lib/filters/BitCrusherFilter.ts","../../lib/filters/EchoFilter.ts","../../lib/filters/HighPassFilter.ts","../../lib/filters/LowPassFilter.ts","../../lib/filters/ReverbFilter.ts","../../lib/filters/TelephonizerFilter.ts","../../lib/filters/VocoderFilter.ts","../../lib/filters/PassThroughFilter.ts","../../lib/services/GenericConfigService.ts","../../lib/utils/SoundStudioFactory.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","export var NAMED_TAG = 'named';\r\nexport var NAME_TAG = 'name';\r\nexport var UNMANAGED_TAG = 'unmanaged';\r\nexport var OPTIONAL_TAG = 'optional';\r\nexport var INJECT_TAG = 'inject';\r\nexport var MULTI_INJECT_TAG = 'multi_inject';\r\nexport var TAGGED = 'inversify:tagged';\r\nexport var TAGGED_PROP = 'inversify:tagged_props';\r\nexport var PARAM_TYPES = 'inversify:paramtypes';\r\nexport var DESIGN_PARAM_TYPES = 'design:paramtypes';\r\nexport var POST_CONSTRUCT = 'post_construct';\r\nexport var PRE_DESTROY = 'pre_destroy';\r\nfunction getNonCustomTagKeys() {\r\n return [\r\n INJECT_TAG,\r\n MULTI_INJECT_TAG,\r\n NAME_TAG,\r\n UNMANAGED_TAG,\r\n NAMED_TAG,\r\n OPTIONAL_TAG,\r\n ];\r\n}\r\nexport var NON_CUSTOM_TAG_KEYS = getNonCustomTagKeys();\r\n","var BindingScopeEnum = {\r\n Request: 'Request',\r\n Singleton: 'Singleton',\r\n Transient: 'Transient'\r\n};\r\nvar BindingTypeEnum = {\r\n ConstantValue: 'ConstantValue',\r\n Constructor: 'Constructor',\r\n DynamicValue: 'DynamicValue',\r\n Factory: 'Factory',\r\n Function: 'Function',\r\n Instance: 'Instance',\r\n Invalid: 'Invalid',\r\n Provider: 'Provider'\r\n};\r\nvar TargetTypeEnum = {\r\n ClassProperty: 'ClassProperty',\r\n ConstructorArgument: 'ConstructorArgument',\r\n Variable: 'Variable'\r\n};\r\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\r\n","var idCounter = 0;\r\nfunction id() {\r\n return idCounter++;\r\n}\r\nexport { id };\r\n","import { BindingScopeEnum, BindingTypeEnum } from '../constants/literal_types';\r\nimport { id } from '../utils/id';\r\nvar Binding = (function () {\r\n function Binding(serviceIdentifier, scope) {\r\n this.id = id();\r\n this.activated = false;\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.scope = scope;\r\n this.type = BindingTypeEnum.Invalid;\r\n this.constraint = function (request) { return true; };\r\n this.implementationType = null;\r\n this.cache = null;\r\n this.factory = null;\r\n this.provider = null;\r\n this.onActivation = null;\r\n this.onDeactivation = null;\r\n this.dynamicValue = null;\r\n }\r\n Binding.prototype.clone = function () {\r\n var clone = new Binding(this.serviceIdentifier, this.scope);\r\n clone.activated = (clone.scope === BindingScopeEnum.Singleton) ? this.activated : false;\r\n clone.implementationType = this.implementationType;\r\n clone.dynamicValue = this.dynamicValue;\r\n clone.scope = this.scope;\r\n clone.type = this.type;\r\n clone.factory = this.factory;\r\n clone.provider = this.provider;\r\n clone.constraint = this.constraint;\r\n clone.onActivation = this.onActivation;\r\n clone.onDeactivation = this.onDeactivation;\r\n clone.cache = this.cache;\r\n return clone;\r\n };\r\n return Binding;\r\n}());\r\nexport { Binding };\r\n","export var DUPLICATED_INJECTABLE_DECORATOR = 'Cannot apply @injectable decorator multiple times.';\r\nexport var DUPLICATED_METADATA = 'Metadata key was used more than once in a parameter:';\r\nexport var NULL_ARGUMENT = 'NULL argument';\r\nexport var KEY_NOT_FOUND = 'Key Not Found';\r\nexport var AMBIGUOUS_MATCH = 'Ambiguous match found for serviceIdentifier:';\r\nexport var CANNOT_UNBIND = 'Could not unbind serviceIdentifier:';\r\nexport var NOT_REGISTERED = 'No matching bindings found for serviceIdentifier:';\r\nexport var MISSING_INJECTABLE_ANNOTATION = 'Missing required @injectable annotation in:';\r\nexport var MISSING_INJECT_ANNOTATION = 'Missing required @inject or @multiInject annotation in:';\r\nexport var UNDEFINED_INJECT_ANNOTATION = function (name) {\r\n return \"@inject called with undefined this could mean that the class \" + name + \" has \" +\r\n 'a circular dependency problem. You can use a LazyServiceIdentifier to ' +\r\n 'overcome this limitation.';\r\n};\r\nexport var CIRCULAR_DEPENDENCY = 'Circular dependency found:';\r\nexport var NOT_IMPLEMENTED = 'Sorry, this feature is not fully implemented yet.';\r\nexport var INVALID_BINDING_TYPE = 'Invalid binding type:';\r\nexport var NO_MORE_SNAPSHOTS_AVAILABLE = 'No snapshot available to restore.';\r\nexport var INVALID_MIDDLEWARE_RETURN = 'Invalid return type in middleware. Middleware must return!';\r\nexport var INVALID_FUNCTION_BINDING = 'Value provided to function binding must be a function!';\r\nexport var LAZY_IN_SYNC = function (key) { return \"You are attempting to construct '\" + key + \"' in a synchronous way\\n but it has asynchronous dependencies.\"; };\r\nexport var INVALID_TO_SELF_VALUE = 'The toSelf function can only be applied when a constructor is ' +\r\n 'used as service identifier';\r\nexport var INVALID_DECORATOR_OPERATION = 'The @inject @multiInject @tagged and @named decorators ' +\r\n 'must be applied to the parameters of a class constructor or a class property.';\r\nexport var ARGUMENTS_LENGTH_MISMATCH = function () {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n return 'The number of constructor arguments in the derived class ' +\r\n (values[0] + \" must be >= than the number of constructor arguments of its base class.\");\r\n};\r\nexport var CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = 'Invalid Container constructor argument. Container options ' +\r\n 'must be an object.';\r\nexport var CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = 'Invalid Container option. Default scope must ' +\r\n 'be a string (\"singleton\" or \"transient\").';\r\nexport var CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = 'Invalid Container option. Auto bind injectable must ' +\r\n 'be a boolean';\r\nexport var CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = 'Invalid Container option. Skip base check must ' +\r\n 'be a boolean';\r\nexport var MULTIPLE_PRE_DESTROY_METHODS = 'Cannot apply @preDestroy decorator multiple times in the same class';\r\nexport var MULTIPLE_POST_CONSTRUCT_METHODS = 'Cannot apply @postConstruct decorator multiple times in the same class';\r\nexport var ASYNC_UNBIND_REQUIRED = 'Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)';\r\nexport var POST_CONSTRUCT_ERROR = function (clazz, errorMessage) { return \"@postConstruct error in class \" + clazz + \": \" + errorMessage; };\r\nexport var PRE_DESTROY_ERROR = function (clazz, errorMessage) { return \"@preDestroy error in class \" + clazz + \": \" + errorMessage; };\r\nexport var ON_DEACTIVATION_ERROR = function (clazz, errorMessage) { return \"onDeactivation() error in class \" + clazz + \": \" + errorMessage; };\r\nexport var CIRCULAR_DEPENDENCY_IN_FACTORY = function (factoryType, serviceIdentifier) {\r\n return \"It looks like there is a circular dependency in one of the '\" + factoryType + \"' bindings. Please investigate bindings with \" +\r\n (\"service identifier '\" + serviceIdentifier + \"'.\");\r\n};\r\nexport var STACK_OVERFLOW = 'Maximum call stack size exceeded';\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar MetadataReader = (function () {\r\n function MetadataReader() {\r\n }\r\n MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) {\r\n var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc);\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);\r\n return {\r\n compilerGeneratedMetadata: compilerGeneratedMetadata,\r\n userGeneratedMetadata: userGeneratedMetadata || {}\r\n };\r\n };\r\n MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) {\r\n var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || [];\r\n return userGeneratedMetadata;\r\n };\r\n return MetadataReader;\r\n}());\r\nexport { MetadataReader };\r\n","export var BindingCount = {\r\n MultipleBindingsAvailable: 2,\r\n NoBindingsAvailable: 0,\r\n OnlyOneBindingAvailable: 1\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nexport function isStackOverflowExeption(error) {\r\n return (error instanceof RangeError ||\r\n error.message === ERROR_MSGS.STACK_OVERFLOW);\r\n}\r\nexport var tryAndThrowErrorIfStackOverflow = function (fn, errorCallback) {\r\n try {\r\n return fn();\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n error = errorCallback();\r\n }\r\n throw error;\r\n }\r\n};\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nfunction getServiceIdentifierAsString(serviceIdentifier) {\r\n if (typeof serviceIdentifier === 'function') {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier.name;\r\n }\r\n else if (typeof serviceIdentifier === 'symbol') {\r\n return serviceIdentifier.toString();\r\n }\r\n else {\r\n var _serviceIdentifier = serviceIdentifier;\r\n return _serviceIdentifier;\r\n }\r\n}\r\nfunction listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) {\r\n var registeredBindingsList = '';\r\n var registeredBindings = getBindings(container, serviceIdentifier);\r\n if (registeredBindings.length !== 0) {\r\n registeredBindingsList = '\\nRegistered bindings:';\r\n registeredBindings.forEach(function (binding) {\r\n var name = 'Object';\r\n if (binding.implementationType !== null) {\r\n name = getFunctionName(binding.implementationType);\r\n }\r\n registeredBindingsList = registeredBindingsList + \"\\n \" + name;\r\n if (binding.constraint.metaData) {\r\n registeredBindingsList = registeredBindingsList + \" - \" + binding.constraint.metaData;\r\n }\r\n });\r\n }\r\n return registeredBindingsList;\r\n}\r\nfunction alreadyDependencyChain(request, serviceIdentifier) {\r\n if (request.parentRequest === null) {\r\n return false;\r\n }\r\n else if (request.parentRequest.serviceIdentifier === serviceIdentifier) {\r\n return true;\r\n }\r\n else {\r\n return alreadyDependencyChain(request.parentRequest, serviceIdentifier);\r\n }\r\n}\r\nfunction dependencyChainToString(request) {\r\n function _createStringArr(req, result) {\r\n if (result === void 0) { result = []; }\r\n var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier);\r\n result.push(serviceIdentifier);\r\n if (req.parentRequest !== null) {\r\n return _createStringArr(req.parentRequest, result);\r\n }\r\n return result;\r\n }\r\n var stringArr = _createStringArr(request);\r\n return stringArr.reverse().join(' --> ');\r\n}\r\nfunction circularDependencyToException(request) {\r\n request.childRequests.forEach(function (childRequest) {\r\n if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) {\r\n var services = dependencyChainToString(childRequest);\r\n throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + \" \" + services);\r\n }\r\n else {\r\n circularDependencyToException(childRequest);\r\n }\r\n });\r\n}\r\nfunction listMetadataForTarget(serviceIdentifierString, target) {\r\n if (target.isTagged() || target.isNamed()) {\r\n var m_1 = '';\r\n var namedTag = target.getNamedTag();\r\n var otherTags = target.getCustomTags();\r\n if (namedTag !== null) {\r\n m_1 += namedTag.toString() + '\\n';\r\n }\r\n if (otherTags !== null) {\r\n otherTags.forEach(function (tag) {\r\n m_1 += tag.toString() + '\\n';\r\n });\r\n }\r\n return \" \" + serviceIdentifierString + \"\\n \" + serviceIdentifierString + \" - \" + m_1;\r\n }\r\n else {\r\n return \" \" + serviceIdentifierString;\r\n }\r\n}\r\nfunction getFunctionName(func) {\r\n if (func.name) {\r\n return func.name;\r\n }\r\n else {\r\n var name_1 = func.toString();\r\n var match = name_1.match(/^function\\s*([^\\s(]+)/);\r\n return match ? match[1] : \"Anonymous function: \" + name_1;\r\n }\r\n}\r\nfunction getSymbolDescription(symbol) {\r\n return symbol.toString().slice(7, -1);\r\n}\r\nexport { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription };\r\n","import { id } from '../utils/id';\r\nvar Context = (function () {\r\n function Context(container) {\r\n this.id = id();\r\n this.container = container;\r\n }\r\n Context.prototype.addPlan = function (plan) {\r\n this.plan = plan;\r\n };\r\n Context.prototype.setCurrentRequest = function (currentRequest) {\r\n this.currentRequest = currentRequest;\r\n };\r\n return Context;\r\n}());\r\nexport { Context };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nvar Metadata = (function () {\r\n function Metadata(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n Metadata.prototype.toString = function () {\r\n if (this.key === METADATA_KEY.NAMED_TAG) {\r\n return \"named: \" + String(this.value).toString() + \" \";\r\n }\r\n else {\r\n return \"tagged: { key:\" + this.key.toString() + \", value: \" + String(this.value) + \" }\";\r\n }\r\n };\r\n return Metadata;\r\n}());\r\nexport { Metadata };\r\n","var Plan = (function () {\r\n function Plan(parentContext, rootRequest) {\r\n this.parentContext = parentContext;\r\n this.rootRequest = rootRequest;\r\n }\r\n return Plan;\r\n}());\r\nexport { Plan };\r\n","var LazyServiceIdentifier = (function () {\r\n function LazyServiceIdentifier(cb) {\r\n this._cb = cb;\r\n }\r\n LazyServiceIdentifier.prototype.unwrap = function () {\r\n return this._cb();\r\n };\r\n return LazyServiceIdentifier;\r\n}());\r\nexport { LazyServiceIdentifier };\r\n","var QueryableString = (function () {\r\n function QueryableString(str) {\r\n this.str = str;\r\n }\r\n QueryableString.prototype.startsWith = function (searchString) {\r\n return this.str.indexOf(searchString) === 0;\r\n };\r\n QueryableString.prototype.endsWith = function (searchString) {\r\n var reverseString = '';\r\n var reverseSearchString = searchString.split('').reverse().join('');\r\n reverseString = this.str.split('').reverse().join('');\r\n return this.startsWith.call({ str: reverseString }, reverseSearchString);\r\n };\r\n QueryableString.prototype.contains = function (searchString) {\r\n return (this.str.indexOf(searchString) !== -1);\r\n };\r\n QueryableString.prototype.equals = function (compareString) {\r\n return this.str === compareString;\r\n };\r\n QueryableString.prototype.value = function () {\r\n return this.str;\r\n };\r\n return QueryableString;\r\n}());\r\nexport { QueryableString };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { id } from '../utils/id';\r\nimport { getSymbolDescription } from '../utils/serialization';\r\nimport { Metadata } from './metadata';\r\nimport { QueryableString } from './queryable_string';\r\nvar Target = (function () {\r\n function Target(type, identifier, serviceIdentifier, namedOrTagged) {\r\n this.id = id();\r\n this.type = type;\r\n this.serviceIdentifier = serviceIdentifier;\r\n var queryableName = typeof identifier === 'symbol' ? getSymbolDescription(identifier) : identifier;\r\n this.name = new QueryableString(queryableName || '');\r\n this.identifier = identifier;\r\n this.metadata = new Array();\r\n var metadataItem = null;\r\n if (typeof namedOrTagged === 'string') {\r\n metadataItem = new Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged);\r\n }\r\n else if (namedOrTagged instanceof Metadata) {\r\n metadataItem = namedOrTagged;\r\n }\r\n if (metadataItem !== null) {\r\n this.metadata.push(metadataItem);\r\n }\r\n }\r\n Target.prototype.hasTag = function (key) {\r\n for (var _i = 0, _a = this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Target.prototype.isArray = function () {\r\n return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG);\r\n };\r\n Target.prototype.matchesArray = function (name) {\r\n return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name);\r\n };\r\n Target.prototype.isNamed = function () {\r\n return this.hasTag(METADATA_KEY.NAMED_TAG);\r\n };\r\n Target.prototype.isTagged = function () {\r\n return this.metadata.some(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n };\r\n Target.prototype.isOptional = function () {\r\n return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true);\r\n };\r\n Target.prototype.getNamedTag = function () {\r\n if (this.isNamed()) {\r\n return this.metadata.filter(function (m) { return m.key === METADATA_KEY.NAMED_TAG; })[0];\r\n }\r\n return null;\r\n };\r\n Target.prototype.getCustomTags = function () {\r\n if (this.isTagged()) {\r\n return this.metadata.filter(function (metadata) { return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; }); });\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n Target.prototype.matchesNamedTag = function (name) {\r\n return this.matchesTag(METADATA_KEY.NAMED_TAG)(name);\r\n };\r\n Target.prototype.matchesTag = function (key) {\r\n var _this = this;\r\n return function (value) {\r\n for (var _i = 0, _a = _this.metadata; _i < _a.length; _i++) {\r\n var m = _a[_i];\r\n if (m.key === key && m.value === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n };\r\n return Target;\r\n}());\r\nexport { Target };\r\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { LazyServiceIdentifier } from '../annotation/lazy_service_identifier';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFunctionName } from '../utils/serialization';\r\nimport { Target } from './target';\r\nfunction getDependencies(metadataReader, func) {\r\n var constructorName = getFunctionName(func);\r\n return getTargets(metadataReader, constructorName, func, false);\r\n}\r\nfunction getTargets(metadataReader, constructorName, func, isBaseClass) {\r\n var metadata = metadataReader.getConstructorMetadata(func);\r\n var serviceIdentifiers = metadata.compilerGeneratedMetadata;\r\n if (serviceIdentifiers === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var constructorArgsMetadata = metadata.userGeneratedMetadata;\r\n var keys = Object.keys(constructorArgsMetadata);\r\n var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);\r\n var hasOptionalParameters = keys.length > func.length;\r\n var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;\r\n var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);\r\n var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);\r\n var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);\r\n return targets;\r\n}\r\nfunction getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {\r\n var targetMetadata = constructorArgsMetadata[index.toString()] || [];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var isManaged = metadata.unmanaged !== true;\r\n var serviceIdentifier = serviceIdentifiers[index];\r\n var injectIdentifier = metadata.inject || metadata.multiInject;\r\n serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);\r\n if (serviceIdentifier instanceof LazyServiceIdentifier) {\r\n serviceIdentifier = serviceIdentifier.unwrap();\r\n }\r\n if (isManaged) {\r\n var isObject = serviceIdentifier === Object;\r\n var isFunction = serviceIdentifier === Function;\r\n var isUndefined = serviceIdentifier === undefined;\r\n var isUnknownType = isObject || isFunction || isUndefined;\r\n if (!isBaseClass && isUnknownType) {\r\n var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + \" argument \" + index + \" in class \" + constructorName + \".\";\r\n throw new Error(msg);\r\n }\r\n var target = new Target(TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n return target;\r\n }\r\n return null;\r\n}\r\nfunction getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {\r\n var targets = [];\r\n for (var i = 0; i < iterations; i++) {\r\n var index = i;\r\n var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);\r\n if (target !== null) {\r\n targets.push(target);\r\n }\r\n }\r\n return targets;\r\n}\r\nfunction _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {\r\n var serviceIdentifier = (inject || multiInject);\r\n if (serviceIdentifier === undefined) {\r\n var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + \" for property \" + String(propertyName) + \" in class \" + className + \".\";\r\n throw new Error(msg);\r\n }\r\n return serviceIdentifier;\r\n}\r\nfunction getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {\r\n var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);\r\n var targets = [];\r\n var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);\r\n var stringKeys = Object.keys(classPropsMetadata);\r\n var keys = stringKeys.concat(symbolKeys);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var key = keys_1[_i];\r\n var targetMetadata = classPropsMetadata[key];\r\n var metadata = formatTargetMetadata(targetMetadata);\r\n var identifier = metadata.targetName || key;\r\n var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);\r\n var target = new Target(TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);\r\n target.metadata = targetMetadata;\r\n targets.push(target);\r\n }\r\n var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);\r\n targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);\r\n }\r\n return targets;\r\n}\r\nfunction getBaseClassDependencyCount(metadataReader, func) {\r\n var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;\r\n if (baseConstructor !== Object) {\r\n var baseConstructorName = getFunctionName(baseConstructor);\r\n var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);\r\n var metadata = targets.map(function (t) { return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; }); });\r\n var unmanagedCount = [].concat.apply([], metadata).length;\r\n var dependencyCount = targets.length - unmanagedCount;\r\n if (dependencyCount > 0) {\r\n return dependencyCount;\r\n }\r\n else {\r\n return getBaseClassDependencyCount(metadataReader, baseConstructor);\r\n }\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nfunction formatTargetMetadata(targetMetadata) {\r\n var targetMetadataMap = {};\r\n targetMetadata.forEach(function (m) {\r\n targetMetadataMap[m.key.toString()] = m.value;\r\n });\r\n return {\r\n inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],\r\n multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],\r\n targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],\r\n unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]\r\n };\r\n}\r\nexport { getDependencies, getBaseClassDependencyCount, getFunctionName };\r\n","import { id } from '../utils/id';\r\nvar Request = (function () {\r\n function Request(serviceIdentifier, parentContext, parentRequest, bindings, target) {\r\n this.id = id();\r\n this.serviceIdentifier = serviceIdentifier;\r\n this.parentContext = parentContext;\r\n this.parentRequest = parentRequest;\r\n this.target = target;\r\n this.childRequests = [];\r\n this.bindings = (Array.isArray(bindings) ? bindings : [bindings]);\r\n this.requestScope = parentRequest === null\r\n ? new Map()\r\n : null;\r\n }\r\n Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) {\r\n var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);\r\n this.childRequests.push(child);\r\n return child;\r\n };\r\n return Request;\r\n}());\r\nexport { Request };\r\n","import { BindingCount } from '../bindings/binding_count';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isStackOverflowExeption } from '../utils/exceptions';\r\nimport { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier } from '../utils/serialization';\r\nimport { Context } from './context';\r\nimport { Metadata } from './metadata';\r\nimport { Plan } from './plan';\r\nimport { getBaseClassDependencyCount, getDependencies, getFunctionName } from './reflection_utils';\r\nimport { Request } from './request';\r\nimport { Target } from './target';\r\nfunction getBindingDictionary(cntnr) {\r\n return cntnr._bindingDictionary;\r\n}\r\nfunction _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {\r\n var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;\r\n var injectMetadata = new Metadata(metadataKey, serviceIdentifier);\r\n var target = new Target(targetType, name, serviceIdentifier, injectMetadata);\r\n if (key !== undefined) {\r\n var tagMetadata = new Metadata(key, value);\r\n target.metadata.push(tagMetadata);\r\n }\r\n return target;\r\n}\r\nfunction _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {\r\n var bindings = getBindings(context.container, target.serviceIdentifier);\r\n var activeBindings = [];\r\n if (bindings.length === BindingCount.NoBindingsAvailable &&\r\n context.container.options.autoBindInjectable &&\r\n typeof target.serviceIdentifier === 'function' &&\r\n metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {\r\n context.container.bind(target.serviceIdentifier).toSelf();\r\n bindings = getBindings(context.container, target.serviceIdentifier);\r\n }\r\n if (!avoidConstraints) {\r\n activeBindings = bindings.filter(function (binding) {\r\n var request = new Request(binding.serviceIdentifier, context, parentRequest, binding, target);\r\n return binding.constraint(request);\r\n });\r\n }\r\n else {\r\n activeBindings = bindings;\r\n }\r\n _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);\r\n return activeBindings;\r\n}\r\nfunction _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {\r\n switch (bindings.length) {\r\n case BindingCount.NoBindingsAvailable:\r\n if (target.isOptional()) {\r\n return bindings;\r\n }\r\n else {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.NOT_REGISTERED;\r\n msg += listMetadataForTarget(serviceIdentifierString, target);\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n case BindingCount.OnlyOneBindingAvailable:\r\n return bindings;\r\n case BindingCount.MultipleBindingsAvailable:\r\n default:\r\n if (!target.isArray()) {\r\n var serviceIdentifierString = getServiceIdentifierAsString(serviceIdentifier);\r\n var msg = ERROR_MSGS.AMBIGUOUS_MATCH + \" \" + serviceIdentifierString;\r\n msg += listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);\r\n throw new Error(msg);\r\n }\r\n else {\r\n return bindings;\r\n }\r\n }\r\n}\r\nfunction _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {\r\n var activeBindings;\r\n var childRequest;\r\n if (parentRequest === null) {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);\r\n childRequest = new Request(serviceIdentifier, context, null, activeBindings, target);\r\n var thePlan = new Plan(context, childRequest);\r\n context.addPlan(thePlan);\r\n }\r\n else {\r\n activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);\r\n childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);\r\n }\r\n activeBindings.forEach(function (binding) {\r\n var subChildRequest = null;\r\n if (target.isArray()) {\r\n subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);\r\n }\r\n else {\r\n if (binding.cache) {\r\n return;\r\n }\r\n subChildRequest = childRequest;\r\n }\r\n if (binding.type === BindingTypeEnum.Instance && binding.implementationType !== null) {\r\n var dependencies = getDependencies(metadataReader, binding.implementationType);\r\n if (!context.container.options.skipBaseClassChecks) {\r\n var baseClassDependencyCount = getBaseClassDependencyCount(metadataReader, binding.implementationType);\r\n if (dependencies.length < baseClassDependencyCount) {\r\n var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(getFunctionName(binding.implementationType));\r\n throw new Error(error);\r\n }\r\n }\r\n dependencies.forEach(function (dependency) {\r\n _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);\r\n });\r\n }\r\n });\r\n}\r\nfunction getBindings(container, serviceIdentifier) {\r\n var bindings = [];\r\n var bindingDictionary = getBindingDictionary(container);\r\n if (bindingDictionary.hasKey(serviceIdentifier)) {\r\n bindings = bindingDictionary.get(serviceIdentifier);\r\n }\r\n else if (container.parent !== null) {\r\n bindings = getBindings(container.parent, serviceIdentifier);\r\n }\r\n return bindings;\r\n}\r\nfunction plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {\r\n if (avoidConstraints === void 0) { avoidConstraints = false; }\r\n var context = new Context(container);\r\n var target = _createTarget(isMultiInject, targetType, serviceIdentifier, '', key, value);\r\n try {\r\n _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);\r\n return context;\r\n }\r\n catch (error) {\r\n if (isStackOverflowExeption(error)) {\r\n circularDependencyToException(context.plan.rootRequest);\r\n }\r\n throw error;\r\n }\r\n}\r\nfunction createMockRequest(container, serviceIdentifier, key, value) {\r\n var target = new Target(TargetTypeEnum.Variable, '', serviceIdentifier, new Metadata(key, value));\r\n var context = new Context(container);\r\n var request = new Request(serviceIdentifier, context, null, [], target);\r\n return request;\r\n}\r\nexport { plan, createMockRequest, getBindingDictionary };\r\n","function isPromise(object) {\r\n var isObjectOrFunction = (typeof object === 'object' && object !== null) || typeof object === 'function';\r\n return isObjectOrFunction && typeof object.then === \"function\";\r\n}\r\nfunction isPromiseOrContainsPromise(object) {\r\n if (isPromise(object)) {\r\n return true;\r\n }\r\n return Array.isArray(object) && object.some(isPromise);\r\n}\r\nexport { isPromise, isPromiseOrContainsPromise };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { BindingScopeEnum } from '../constants/literal_types';\r\nimport { isPromise } from '../utils/async';\r\nexport var tryGetFromScope = function (requestScope, binding) {\r\n if ((binding.scope === BindingScopeEnum.Singleton) && binding.activated) {\r\n return binding.cache;\r\n }\r\n if (binding.scope === BindingScopeEnum.Request &&\r\n requestScope.has(binding.id)) {\r\n return requestScope.get(binding.id);\r\n }\r\n return null;\r\n};\r\nexport var saveToScope = function (requestScope, binding, result) {\r\n if (binding.scope === BindingScopeEnum.Singleton) {\r\n _saveToSingletonScope(binding, result);\r\n }\r\n if (binding.scope === BindingScopeEnum.Request) {\r\n _saveToRequestScope(requestScope, binding, result);\r\n }\r\n};\r\nvar _saveToRequestScope = function (requestScope, binding, result) {\r\n if (!requestScope.has(binding.id)) {\r\n requestScope.set(binding.id, result);\r\n }\r\n};\r\nvar _saveToSingletonScope = function (binding, result) {\r\n binding.cache = result;\r\n binding.activated = true;\r\n if (isPromise(result)) {\r\n void _saveAsyncResultToSingletonScope(binding, result);\r\n }\r\n};\r\nvar _saveAsyncResultToSingletonScope = function (binding, asyncResult) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n result = _a.sent();\r\n binding.cache = result;\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n binding.cache = null;\r\n binding.activated = false;\r\n throw ex_1;\r\n case 3: return [2];\r\n }\r\n });\r\n}); };\r\n","export var FactoryType;\r\n(function (FactoryType) {\r\n FactoryType[\"DynamicValue\"] = \"toDynamicValue\";\r\n FactoryType[\"Factory\"] = \"toFactory\";\r\n FactoryType[\"Provider\"] = \"toProvider\";\r\n})(FactoryType || (FactoryType = {}));\r\n","import { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { FactoryType } from './factory_type';\r\nexport var multiBindToService = function (container) {\r\n return function (service) {\r\n return function () {\r\n var types = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n types[_i] = arguments[_i];\r\n }\r\n return types.forEach(function (t) { return container.bind(t).toService(service); });\r\n };\r\n };\r\n};\r\nexport var ensureFullyBound = function (binding) {\r\n var boundValue = null;\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n boundValue = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n case BindingTypeEnum.Instance:\r\n boundValue = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.DynamicValue:\r\n boundValue = binding.dynamicValue;\r\n break;\r\n case BindingTypeEnum.Provider:\r\n boundValue = binding.provider;\r\n break;\r\n case BindingTypeEnum.Factory:\r\n boundValue = binding.factory;\r\n break;\r\n }\r\n if (boundValue === null) {\r\n var serviceIdentifierAsString = getServiceIdentifierAsString(binding.serviceIdentifier);\r\n throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + \" \" + serviceIdentifierAsString);\r\n }\r\n};\r\nexport var getFactoryDetails = function (binding) {\r\n switch (binding.type) {\r\n case BindingTypeEnum.Factory:\r\n return { factory: binding.factory, factoryType: FactoryType.Factory };\r\n case BindingTypeEnum.Provider:\r\n return { factory: binding.provider, factoryType: FactoryType.Provider };\r\n case BindingTypeEnum.DynamicValue:\r\n return { factory: binding.dynamicValue, factoryType: FactoryType.DynamicValue };\r\n default:\r\n throw new Error(\"Unexpected factory type \" + binding.type);\r\n }\r\n};\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR } from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nfunction _resolveRequests(childRequests, resolveRequest) {\r\n return childRequests.reduce(function (resolvedRequests, childRequest) {\r\n var injection = resolveRequest(childRequest);\r\n var targetType = childRequest.target.type;\r\n if (targetType === TargetTypeEnum.ConstructorArgument) {\r\n resolvedRequests.constructorInjections.push(injection);\r\n }\r\n else {\r\n resolvedRequests.propertyRequests.push(childRequest);\r\n resolvedRequests.propertyInjections.push(injection);\r\n }\r\n if (!resolvedRequests.isAsync) {\r\n resolvedRequests.isAsync = isPromiseOrContainsPromise(injection);\r\n }\r\n return resolvedRequests;\r\n }, { constructorInjections: [], propertyInjections: [], propertyRequests: [], isAsync: false });\r\n}\r\nfunction _createInstance(constr, childRequests, resolveRequest) {\r\n var result;\r\n if (childRequests.length > 0) {\r\n var resolved = _resolveRequests(childRequests, resolveRequest);\r\n var createInstanceWithInjectionsArg = __assign(__assign({}, resolved), { constr: constr });\r\n if (resolved.isAsync) {\r\n result = createInstanceWithInjectionsAsync(createInstanceWithInjectionsArg);\r\n }\r\n else {\r\n result = createInstanceWithInjections(createInstanceWithInjectionsArg);\r\n }\r\n }\r\n else {\r\n result = new constr();\r\n }\r\n return result;\r\n}\r\nfunction createInstanceWithInjections(args) {\r\n var _a;\r\n var instance = new ((_a = args.constr).bind.apply(_a, __spreadArray([void 0], args.constructorInjections, false)))();\r\n args.propertyRequests.forEach(function (r, index) {\r\n var property = r.target.identifier;\r\n var injection = args.propertyInjections[index];\r\n if (!r.target.isOptional() || injection !== undefined) {\r\n instance[property] = injection;\r\n }\r\n });\r\n return instance;\r\n}\r\nfunction createInstanceWithInjectionsAsync(args) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var constructorInjections, propertyInjections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, possiblyWaitInjections(args.constructorInjections)];\r\n case 1:\r\n constructorInjections = _a.sent();\r\n return [4, possiblyWaitInjections(args.propertyInjections)];\r\n case 2:\r\n propertyInjections = _a.sent();\r\n return [2, createInstanceWithInjections(__assign(__assign({}, args), { constructorInjections: constructorInjections, propertyInjections: propertyInjections }))];\r\n }\r\n });\r\n });\r\n}\r\nfunction possiblyWaitInjections(possiblePromiseinjections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var injections, _i, possiblePromiseinjections_1, injection;\r\n return __generator(this, function (_a) {\r\n injections = [];\r\n for (_i = 0, possiblePromiseinjections_1 = possiblePromiseinjections; _i < possiblePromiseinjections_1.length; _i++) {\r\n injection = possiblePromiseinjections_1[_i];\r\n if (Array.isArray(injection)) {\r\n injections.push(Promise.all(injection));\r\n }\r\n else {\r\n injections.push(injection);\r\n }\r\n }\r\n return [2, Promise.all(injections)];\r\n });\r\n });\r\n}\r\nfunction _getInstanceAfterPostConstruct(constr, result) {\r\n var postConstructResult = _postConstruct(constr, result);\r\n if (isPromise(postConstructResult)) {\r\n return postConstructResult.then(function () { return result; });\r\n }\r\n else {\r\n return result;\r\n }\r\n}\r\nfunction _postConstruct(constr, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr);\r\n try {\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw new Error(POST_CONSTRUCT_ERROR(constr.name, e.message));\r\n }\r\n }\r\n }\r\n}\r\nfunction _validateInstanceResolution(binding, constr) {\r\n if (binding.scope !== BindingScopeEnum.Singleton) {\r\n _throwIfHandlingDeactivation(binding, constr);\r\n }\r\n}\r\nfunction _throwIfHandlingDeactivation(binding, constr) {\r\n var scopeErrorMessage = \"Class cannot be instantiated in \" + (binding.scope === BindingScopeEnum.Request ?\r\n 'request' :\r\n 'transient') + \" scope.\";\r\n if (typeof binding.onDeactivation === 'function') {\r\n throw new Error(ON_DEACTIVATION_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constr)) {\r\n throw new Error(PRE_DESTROY_ERROR(constr.name, scopeErrorMessage));\r\n }\r\n}\r\nfunction resolveInstance(binding, constr, childRequests, resolveRequest) {\r\n _validateInstanceResolution(binding, constr);\r\n var result = _createInstance(constr, childRequests, resolveRequest);\r\n if (isPromise(result)) {\r\n return result.then(function (resolvedResult) { return _getInstanceAfterPostConstruct(constr, resolvedResult); });\r\n }\r\n else {\r\n return _getInstanceAfterPostConstruct(constr, result);\r\n }\r\n}\r\nexport { resolveInstance };\r\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingTypeEnum } from '../constants/literal_types';\r\nimport { getBindingDictionary } from '../planning/planner';\r\nimport { saveToScope, tryGetFromScope } from '../scope/scope';\r\nimport { isPromise } from '../utils/async';\r\nimport { getFactoryDetails, ensureFullyBound } from '../utils/binding_utils';\r\nimport { tryAndThrowErrorIfStackOverflow } from '../utils/exceptions';\r\nimport { resolveInstance } from './instantiation';\r\nvar _resolveRequest = function (requestScope) {\r\n return function (request) {\r\n request.parentContext.setCurrentRequest(request);\r\n var bindings = request.bindings;\r\n var childRequests = request.childRequests;\r\n var targetIsAnArray = request.target && request.target.isArray();\r\n var targetParentIsNotAnArray = !request.parentRequest ||\r\n !request.parentRequest.target ||\r\n !request.target ||\r\n !request.parentRequest.target.matchesArray(request.target.serviceIdentifier);\r\n if (targetIsAnArray && targetParentIsNotAnArray) {\r\n return childRequests.map(function (childRequest) {\r\n var _f = _resolveRequest(requestScope);\r\n return _f(childRequest);\r\n });\r\n }\r\n else {\r\n if (request.target.isOptional() && bindings.length === 0) {\r\n return undefined;\r\n }\r\n var binding = bindings[0];\r\n return _resolveBinding(requestScope, request, binding);\r\n }\r\n };\r\n};\r\nvar _resolveFactoryFromBinding = function (binding, context) {\r\n var factoryDetails = getFactoryDetails(binding);\r\n return tryAndThrowErrorIfStackOverflow(function () { return factoryDetails.factory.bind(binding)(context); }, function () { return new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryDetails.factoryType, context.currentRequest.serviceIdentifier.toString())); });\r\n};\r\nvar _getResolvedFromBinding = function (requestScope, request, binding) {\r\n var result;\r\n var childRequests = request.childRequests;\r\n ensureFullyBound(binding);\r\n switch (binding.type) {\r\n case BindingTypeEnum.ConstantValue:\r\n case BindingTypeEnum.Function:\r\n result = binding.cache;\r\n break;\r\n case BindingTypeEnum.Constructor:\r\n result = binding.implementationType;\r\n break;\r\n case BindingTypeEnum.Instance:\r\n result = resolveInstance(binding, binding.implementationType, childRequests, _resolveRequest(requestScope));\r\n break;\r\n default:\r\n result = _resolveFactoryFromBinding(binding, request.parentContext);\r\n }\r\n return result;\r\n};\r\nvar _resolveInScope = function (requestScope, binding, resolveFromBinding) {\r\n var result = tryGetFromScope(requestScope, binding);\r\n if (result !== null) {\r\n return result;\r\n }\r\n result = resolveFromBinding();\r\n saveToScope(requestScope, binding, result);\r\n return result;\r\n};\r\nvar _resolveBinding = function (requestScope, request, binding) {\r\n return _resolveInScope(requestScope, binding, function () {\r\n var result = _getResolvedFromBinding(requestScope, request, binding);\r\n if (isPromise(result)) {\r\n result = result.then(function (resolved) { return _onActivation(request, binding, resolved); });\r\n }\r\n else {\r\n result = _onActivation(request, binding, result);\r\n }\r\n return result;\r\n });\r\n};\r\nfunction _onActivation(request, binding, resolved) {\r\n var result = _bindingActivation(request.parentContext, binding, resolved);\r\n var containersIterator = _getContainersIterator(request.parentContext.container);\r\n var container;\r\n var containersIteratorResult = containersIterator.next();\r\n do {\r\n container = containersIteratorResult.value;\r\n var context_1 = request.parentContext;\r\n var serviceIdentifier = request.serviceIdentifier;\r\n var activationsIterator = _getContainerActivationsForService(container, serviceIdentifier);\r\n if (isPromise(result)) {\r\n result = _activateContainerAsync(activationsIterator, context_1, result);\r\n }\r\n else {\r\n result = _activateContainer(activationsIterator, context_1, result);\r\n }\r\n containersIteratorResult = containersIterator.next();\r\n } while (containersIteratorResult.done !== true && !getBindingDictionary(container).hasKey(request.serviceIdentifier));\r\n return result;\r\n}\r\nvar _bindingActivation = function (context, binding, previousResult) {\r\n var result;\r\n if (typeof binding.onActivation === 'function') {\r\n result = binding.onActivation(context, previousResult);\r\n }\r\n else {\r\n result = previousResult;\r\n }\r\n return result;\r\n};\r\nvar _activateContainer = function (activationsIterator, context, result) {\r\n var activation = activationsIterator.next();\r\n while (!activation.done) {\r\n result = activation.value(context, result);\r\n if (isPromise(result)) {\r\n return _activateContainerAsync(activationsIterator, context, result);\r\n }\r\n activation = activationsIterator.next();\r\n }\r\n return result;\r\n};\r\nvar _activateContainerAsync = function (activationsIterator, context, resultPromise) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result, activation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, resultPromise];\r\n case 1:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n _a.label = 2;\r\n case 2:\r\n if (!!activation.done) return [3, 4];\r\n return [4, activation.value(context, result)];\r\n case 3:\r\n result = _a.sent();\r\n activation = activationsIterator.next();\r\n return [3, 2];\r\n case 4: return [2, result];\r\n }\r\n });\r\n}); };\r\nvar _getContainerActivationsForService = function (container, serviceIdentifier) {\r\n var activations = container._activations;\r\n return activations.hasKey(serviceIdentifier) ? activations.get(serviceIdentifier).values() : [].values();\r\n};\r\nvar _getContainersIterator = function (container) {\r\n var containersStack = [container];\r\n var parent = container.parent;\r\n while (parent !== null) {\r\n containersStack.push(parent);\r\n parent = parent.parent;\r\n }\r\n var getNextContainer = function () {\r\n var nextContainer = containersStack.pop();\r\n if (nextContainer !== undefined) {\r\n return { done: false, value: nextContainer };\r\n }\r\n else {\r\n return { done: true, value: undefined };\r\n }\r\n };\r\n var containersIterator = {\r\n next: getNextContainer,\r\n };\r\n return containersIterator;\r\n};\r\nfunction resolve(context) {\r\n var _f = _resolveRequest(context.plan.rootRequest.requestScope);\r\n return _f(context.plan.rootRequest);\r\n}\r\nexport { resolve };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { Metadata } from '../planning/metadata';\r\nvar traverseAncerstors = function (request, constraint) {\r\n var parent = request.parentRequest;\r\n if (parent !== null) {\r\n return constraint(parent) ? true : traverseAncerstors(parent, constraint);\r\n }\r\n else {\r\n return false;\r\n }\r\n};\r\nvar taggedConstraint = function (key) { return function (value) {\r\n var constraint = function (request) {\r\n return request !== null && request.target !== null && request.target.matchesTag(key)(value);\r\n };\r\n constraint.metaData = new Metadata(key, value);\r\n return constraint;\r\n}; };\r\nvar namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG);\r\nvar typeConstraint = function (type) { return function (request) {\r\n var binding = null;\r\n if (request !== null) {\r\n binding = request.bindings[0];\r\n if (typeof type === 'string') {\r\n var serviceIdentifier = binding.serviceIdentifier;\r\n return serviceIdentifier === type;\r\n }\r\n else {\r\n var constructor = request.bindings[0].implementationType;\r\n return type === constructor;\r\n }\r\n }\r\n return false;\r\n}; };\r\nexport { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { namedConstraint, taggedConstraint, traverseAncerstors, typeConstraint } from './constraint_helpers';\r\nvar BindingWhenSyntax = (function () {\r\n function BindingWhenSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingWhenSyntax.prototype.when = function (constraint) {\r\n this._binding.constraint = constraint;\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetNamed = function (name) {\r\n this._binding.constraint = namedConstraint(name);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetIsDefault = function () {\r\n this._binding.constraint = function (request) {\r\n if (request === null) {\r\n return false;\r\n }\r\n var targetIsDefault = (request.target !== null) &&\r\n (!request.target.isNamed()) &&\r\n (!request.target.isTagged());\r\n return targetIsDefault;\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n this._binding.constraint = taggedConstraint(tag)(value);\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenInjectedInto = function (parent) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && typeConstraint(parent)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && namedConstraint(name)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenParentTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && taggedConstraint(tag)(value)(request.parentRequest);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, typeConstraint(ancestor));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, namedConstraint(name));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, taggedConstraint(tag)(value));\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n BindingWhenSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n this._binding.constraint = function (request) {\r\n return request !== null && !traverseAncerstors(request, constraint);\r\n };\r\n return new BindingOnSyntax(this._binding);\r\n };\r\n return BindingWhenSyntax;\r\n}());\r\nexport { BindingWhenSyntax };\r\n","import { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingOnSyntax = (function () {\r\n function BindingOnSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingOnSyntax.prototype.onActivation = function (handler) {\r\n this._binding.onActivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n BindingOnSyntax.prototype.onDeactivation = function (handler) {\r\n this._binding.onDeactivation = handler;\r\n return new BindingWhenSyntax(this._binding);\r\n };\r\n return BindingOnSyntax;\r\n}());\r\nexport { BindingOnSyntax };\r\n","import { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingWhenOnSyntax = (function () {\r\n function BindingWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n }\r\n BindingWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingWhenOnSyntax;\r\n}());\r\nexport { BindingWhenOnSyntax };\r\n","import { BindingScopeEnum } from '../constants/literal_types';\r\nimport { BindingWhenOnSyntax } from './binding_when_on_syntax';\r\nvar BindingInSyntax = (function () {\r\n function BindingInSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingInSyntax.prototype.inRequestScope = function () {\r\n this._binding.scope = BindingScopeEnum.Request;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inSingletonScope = function () {\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingInSyntax.prototype.inTransientScope = function () {\r\n this._binding.scope = BindingScopeEnum.Transient;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n return BindingInSyntax;\r\n}());\r\nexport { BindingInSyntax };\r\n","import { BindingInSyntax } from './binding_in_syntax';\r\nimport { BindingOnSyntax } from './binding_on_syntax';\r\nimport { BindingWhenSyntax } from './binding_when_syntax';\r\nvar BindingInWhenOnSyntax = (function () {\r\n function BindingInWhenOnSyntax(binding) {\r\n this._binding = binding;\r\n this._bindingWhenSyntax = new BindingWhenSyntax(this._binding);\r\n this._bindingOnSyntax = new BindingOnSyntax(this._binding);\r\n this._bindingInSyntax = new BindingInSyntax(binding);\r\n }\r\n BindingInWhenOnSyntax.prototype.inRequestScope = function () {\r\n return this._bindingInSyntax.inRequestScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inSingletonScope = function () {\r\n return this._bindingInSyntax.inSingletonScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.inTransientScope = function () {\r\n return this._bindingInSyntax.inTransientScope();\r\n };\r\n BindingInWhenOnSyntax.prototype.when = function (constraint) {\r\n return this._bindingWhenSyntax.when(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetNamed = function (name) {\r\n return this._bindingWhenSyntax.whenTargetNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetIsDefault = function () {\r\n return this._bindingWhenSyntax.whenTargetIsDefault();\r\n };\r\n BindingInWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenTargetTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenInjectedInto = function (parent) {\r\n return this._bindingWhenSyntax.whenInjectedInto(parent);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentNamed = function (name) {\r\n return this._bindingWhenSyntax.whenParentNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenParentTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenParentTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) {\r\n return this._bindingWhenSyntax.whenNoAncestorIs(ancestor);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenAnyAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) {\r\n return this._bindingWhenSyntax.whenNoAncestorNamed(name);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) {\r\n return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) {\r\n return this._bindingWhenSyntax.whenNoAncestorMatches(constraint);\r\n };\r\n BindingInWhenOnSyntax.prototype.onActivation = function (handler) {\r\n return this._bindingOnSyntax.onActivation(handler);\r\n };\r\n BindingInWhenOnSyntax.prototype.onDeactivation = function (handler) {\r\n return this._bindingOnSyntax.onDeactivation(handler);\r\n };\r\n return BindingInWhenOnSyntax;\r\n}());\r\nexport { BindingInWhenOnSyntax };\r\n","import * as ERROR_MSGS from \"../constants/error_msgs\";\r\nimport { BindingScopeEnum, BindingTypeEnum } from \"../constants/literal_types\";\r\nimport { BindingInWhenOnSyntax } from \"./binding_in_when_on_syntax\";\r\nimport { BindingWhenOnSyntax } from \"./binding_when_on_syntax\";\r\nvar BindingToSyntax = (function () {\r\n function BindingToSyntax(binding) {\r\n this._binding = binding;\r\n }\r\n BindingToSyntax.prototype.to = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Instance;\r\n this._binding.implementationType = constructor;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toSelf = function () {\r\n if (typeof this._binding.serviceIdentifier !== \"function\") {\r\n throw new Error(\"\" + ERROR_MSGS.INVALID_TO_SELF_VALUE);\r\n }\r\n var self = this._binding.serviceIdentifier;\r\n return this.to(self);\r\n };\r\n BindingToSyntax.prototype.toConstantValue = function (value) {\r\n this._binding.type = BindingTypeEnum.ConstantValue;\r\n this._binding.cache = value;\r\n this._binding.dynamicValue = null;\r\n this._binding.implementationType = null;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toDynamicValue = function (func) {\r\n this._binding.type = BindingTypeEnum.DynamicValue;\r\n this._binding.cache = null;\r\n this._binding.dynamicValue = func;\r\n this._binding.implementationType = null;\r\n return new BindingInWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toConstructor = function (constructor) {\r\n this._binding.type = BindingTypeEnum.Constructor;\r\n this._binding.implementationType = constructor;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFactory = function (factory) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = factory;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toFunction = function (func) {\r\n if (typeof func !== \"function\") {\r\n throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);\r\n }\r\n var bindingWhenOnSyntax = this.toConstantValue(func);\r\n this._binding.type = BindingTypeEnum.Function;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return bindingWhenOnSyntax;\r\n };\r\n BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n var autofactory = function () { return context.container.get(serviceIdentifier); };\r\n return autofactory;\r\n };\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toAutoNamedFactory = function (serviceIdentifier) {\r\n this._binding.type = BindingTypeEnum.Factory;\r\n this._binding.factory = function (context) {\r\n return function (named) { return context.container.getNamed(serviceIdentifier, named); };\r\n };\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toProvider = function (provider) {\r\n this._binding.type = BindingTypeEnum.Provider;\r\n this._binding.provider = provider;\r\n this._binding.scope = BindingScopeEnum.Singleton;\r\n return new BindingWhenOnSyntax(this._binding);\r\n };\r\n BindingToSyntax.prototype.toService = function (service) {\r\n this.toDynamicValue(function (context) { return context.container.get(service); });\r\n };\r\n return BindingToSyntax;\r\n}());\r\nexport { BindingToSyntax };\r\n","var ContainerSnapshot = (function () {\r\n function ContainerSnapshot() {\r\n }\r\n ContainerSnapshot.of = function (bindings, middleware, activations, deactivations, moduleActivationStore) {\r\n var snapshot = new ContainerSnapshot();\r\n snapshot.bindings = bindings;\r\n snapshot.middleware = middleware;\r\n snapshot.deactivations = deactivations;\r\n snapshot.activations = activations;\r\n snapshot.moduleActivationStore = moduleActivationStore;\r\n return snapshot;\r\n };\r\n return ContainerSnapshot;\r\n}());\r\nexport { ContainerSnapshot };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { isClonable } from '../utils/clonable';\r\nvar Lookup = (function () {\r\n function Lookup() {\r\n this._map = new Map();\r\n }\r\n Lookup.prototype.getMap = function () {\r\n return this._map;\r\n };\r\n Lookup.prototype.add = function (serviceIdentifier, value) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (value === null || value === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n entry.push(value);\r\n }\r\n else {\r\n this._map.set(serviceIdentifier, [value]);\r\n }\r\n };\r\n Lookup.prototype.get = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n var entry = this._map.get(serviceIdentifier);\r\n if (entry !== undefined) {\r\n return entry;\r\n }\r\n else {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.remove = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n if (!this._map.delete(serviceIdentifier)) {\r\n throw new Error(ERROR_MSGS.KEY_NOT_FOUND);\r\n }\r\n };\r\n Lookup.prototype.removeIntersection = function (lookup) {\r\n var _this = this;\r\n this.traverse(function (serviceIdentifier, value) {\r\n var lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;\r\n if (lookupActivations !== undefined) {\r\n var filteredValues = value.filter(function (lookupValue) {\r\n return !lookupActivations.some(function (moduleActivation) { return lookupValue === moduleActivation; });\r\n });\r\n _this._setValue(serviceIdentifier, filteredValues);\r\n }\r\n });\r\n };\r\n Lookup.prototype.removeByCondition = function (condition) {\r\n var _this = this;\r\n var removals = [];\r\n this._map.forEach(function (entries, key) {\r\n var updatedEntries = [];\r\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n var entry = entries_1[_i];\r\n var remove = condition(entry);\r\n if (remove) {\r\n removals.push(entry);\r\n }\r\n else {\r\n updatedEntries.push(entry);\r\n }\r\n }\r\n _this._setValue(key, updatedEntries);\r\n });\r\n return removals;\r\n };\r\n Lookup.prototype.hasKey = function (serviceIdentifier) {\r\n if (serviceIdentifier === null || serviceIdentifier === undefined) {\r\n throw new Error(ERROR_MSGS.NULL_ARGUMENT);\r\n }\r\n return this._map.has(serviceIdentifier);\r\n };\r\n Lookup.prototype.clone = function () {\r\n var copy = new Lookup();\r\n this._map.forEach(function (value, key) {\r\n value.forEach(function (b) { return copy.add(key, isClonable(b) ? b.clone() : b); });\r\n });\r\n return copy;\r\n };\r\n Lookup.prototype.traverse = function (func) {\r\n this._map.forEach(function (value, key) {\r\n func(key, value);\r\n });\r\n };\r\n Lookup.prototype._setValue = function (serviceIdentifier, value) {\r\n if (value.length > 0) {\r\n this._map.set(serviceIdentifier, value);\r\n }\r\n else {\r\n this._map.delete(serviceIdentifier);\r\n }\r\n };\r\n return Lookup;\r\n}());\r\nexport { Lookup };\r\n","function isClonable(obj) {\r\n return (typeof obj === 'object')\r\n && (obj !== null)\r\n && ('clone' in obj)\r\n && typeof obj.clone === 'function';\r\n}\r\nexport { isClonable };\r\n","import { Lookup } from './lookup';\r\nvar ModuleActivationStore = (function () {\r\n function ModuleActivationStore() {\r\n this._map = new Map();\r\n }\r\n ModuleActivationStore.prototype.remove = function (moduleId) {\r\n if (this._map.has(moduleId)) {\r\n var handlers = this._map.get(moduleId);\r\n this._map.delete(moduleId);\r\n return handlers;\r\n }\r\n return this._getEmptyHandlersStore();\r\n };\r\n ModuleActivationStore.prototype.addDeactivation = function (moduleId, serviceIdentifier, onDeactivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onDeactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n ModuleActivationStore.prototype.addActivation = function (moduleId, serviceIdentifier, onActivation) {\r\n this._getModuleActivationHandlers(moduleId)\r\n .onActivations.add(serviceIdentifier, onActivation);\r\n };\r\n ModuleActivationStore.prototype.clone = function () {\r\n var clone = new ModuleActivationStore();\r\n this._map.forEach(function (handlersStore, moduleId) {\r\n clone._map.set(moduleId, {\r\n onActivations: handlersStore.onActivations.clone(),\r\n onDeactivations: handlersStore.onDeactivations.clone(),\r\n });\r\n });\r\n return clone;\r\n };\r\n ModuleActivationStore.prototype._getModuleActivationHandlers = function (moduleId) {\r\n var moduleActivationHandlers = this._map.get(moduleId);\r\n if (moduleActivationHandlers === undefined) {\r\n moduleActivationHandlers = this._getEmptyHandlersStore();\r\n this._map.set(moduleId, moduleActivationHandlers);\r\n }\r\n return moduleActivationHandlers;\r\n };\r\n ModuleActivationStore.prototype._getEmptyHandlersStore = function () {\r\n var handlersStore = {\r\n onActivations: new Lookup(),\r\n onDeactivations: new Lookup()\r\n };\r\n return handlersStore;\r\n };\r\n return ModuleActivationStore;\r\n}());\r\nexport { ModuleActivationStore };\r\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nimport { Binding } from '../bindings/binding';\r\nimport * as ERROR_MSGS from '../constants/error_msgs';\r\nimport { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { MetadataReader } from '../planning/metadata_reader';\r\nimport { createMockRequest, getBindingDictionary, plan } from '../planning/planner';\r\nimport { resolve } from '../resolution/resolver';\r\nimport { BindingToSyntax } from '../syntax/binding_to_syntax';\r\nimport { isPromise, isPromiseOrContainsPromise } from '../utils/async';\r\nimport { id } from '../utils/id';\r\nimport { getServiceIdentifierAsString } from '../utils/serialization';\r\nimport { ContainerSnapshot } from './container_snapshot';\r\nimport { Lookup } from './lookup';\r\nimport { ModuleActivationStore } from './module_activation_store';\r\nvar Container = (function () {\r\n function Container(containerOptions) {\r\n var options = containerOptions || {};\r\n if (typeof options !== 'object') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);\r\n }\r\n if (options.defaultScope === undefined) {\r\n options.defaultScope = BindingScopeEnum.Transient;\r\n }\r\n else if (options.defaultScope !== BindingScopeEnum.Singleton &&\r\n options.defaultScope !== BindingScopeEnum.Transient &&\r\n options.defaultScope !== BindingScopeEnum.Request) {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);\r\n }\r\n if (options.autoBindInjectable === undefined) {\r\n options.autoBindInjectable = false;\r\n }\r\n else if (typeof options.autoBindInjectable !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);\r\n }\r\n if (options.skipBaseClassChecks === undefined) {\r\n options.skipBaseClassChecks = false;\r\n }\r\n else if (typeof options.skipBaseClassChecks !== 'boolean') {\r\n throw new Error(\"\" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);\r\n }\r\n this.options = {\r\n autoBindInjectable: options.autoBindInjectable,\r\n defaultScope: options.defaultScope,\r\n skipBaseClassChecks: options.skipBaseClassChecks\r\n };\r\n this.id = id();\r\n this._bindingDictionary = new Lookup();\r\n this._snapshots = [];\r\n this._middleware = null;\r\n this._activations = new Lookup();\r\n this._deactivations = new Lookup();\r\n this.parent = null;\r\n this._metadataReader = new MetadataReader();\r\n this._moduleActivationStore = new ModuleActivationStore();\r\n }\r\n Container.merge = function (container1, container2) {\r\n var containers = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n containers[_i - 2] = arguments[_i];\r\n }\r\n var container = new Container();\r\n var targetContainers = __spreadArray([container1, container2], containers, true).map(function (targetContainer) { return getBindingDictionary(targetContainer); });\r\n var bindingDictionary = getBindingDictionary(container);\r\n function copyDictionary(origin, destination) {\r\n origin.traverse(function (_key, value) {\r\n value.forEach(function (binding) {\r\n destination.add(binding.serviceIdentifier, binding.clone());\r\n });\r\n });\r\n }\r\n targetContainers.forEach(function (targetBindingDictionary) {\r\n copyDictionary(targetBindingDictionary, bindingDictionary);\r\n });\r\n return container;\r\n };\r\n Container.prototype.load = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n var getHelpers = this._getContainerModuleHelpersFactory();\r\n for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {\r\n var currentModule = modules_1[_a];\r\n var containerModuleHelpers = getHelpers(currentModule.id);\r\n currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);\r\n }\r\n };\r\n Container.prototype.loadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n getHelpers = this._getContainerModuleHelpersFactory();\r\n _a = 0, modules_2 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_2.length)) return [3, 4];\r\n currentModule = modules_2[_a];\r\n containerModuleHelpers = getHelpers(currentModule.id);\r\n return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unload = function () {\r\n var _this = this;\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n modules.forEach(function (module) {\r\n var deactivations = _this._removeModuleBindings(module.id);\r\n _this._deactivateSingletons(deactivations);\r\n _this._removeModuleHandlers(module.id);\r\n });\r\n };\r\n Container.prototype.unloadAsync = function () {\r\n var modules = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n modules[_i] = arguments[_i];\r\n }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, modules_3, module_1, deactivations;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = 0, modules_3 = modules;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_a < modules_3.length)) return [3, 4];\r\n module_1 = modules_3[_a];\r\n deactivations = this._removeModuleBindings(module_1.id);\r\n return [4, this._deactivateSingletonsAsync(deactivations)];\r\n case 2:\r\n _b.sent();\r\n this._removeModuleHandlers(module_1.id);\r\n _b.label = 3;\r\n case 3:\r\n _a++;\r\n return [3, 1];\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.bind = function (serviceIdentifier) {\r\n var scope = this.options.defaultScope || BindingScopeEnum.Transient;\r\n var binding = new Binding(serviceIdentifier, scope);\r\n this._bindingDictionary.add(serviceIdentifier, binding);\r\n return new BindingToSyntax(binding);\r\n };\r\n Container.prototype.rebind = function (serviceIdentifier) {\r\n this.unbind(serviceIdentifier);\r\n return this.bind(serviceIdentifier);\r\n };\r\n Container.prototype.rebindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, this.unbindAsync(serviceIdentifier)];\r\n case 1:\r\n _a.sent();\r\n return [2, this.bind(serviceIdentifier)];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbind = function (serviceIdentifier) {\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n this._deactivateSingletons(bindings);\r\n }\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n };\r\n Container.prototype.unbindAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var bindings;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];\r\n bindings = this._bindingDictionary.get(serviceIdentifier);\r\n return [4, this._deactivateSingletonsAsync(bindings)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n this._removeServiceFromDictionary(serviceIdentifier);\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.unbindAll = function () {\r\n var _this = this;\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n _this._deactivateSingletons(value);\r\n });\r\n this._bindingDictionary = new Lookup();\r\n };\r\n Container.prototype.unbindAllAsync = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var promises;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n promises = [];\r\n this._bindingDictionary.traverse(function (_key, value) {\r\n promises.push(_this._deactivateSingletonsAsync(value));\r\n });\r\n return [4, Promise.all(promises)];\r\n case 1:\r\n _a.sent();\r\n this._bindingDictionary = new Lookup();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype.onActivation = function (serviceIdentifier, onActivation) {\r\n this._activations.add(serviceIdentifier, onActivation);\r\n };\r\n Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {\r\n this._deactivations.add(serviceIdentifier, onDeactivation);\r\n };\r\n Container.prototype.isBound = function (serviceIdentifier) {\r\n var bound = this._bindingDictionary.hasKey(serviceIdentifier);\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBound(serviceIdentifier);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.isCurrentBound = function (serviceIdentifier) {\r\n return this._bindingDictionary.hasKey(serviceIdentifier);\r\n };\r\n Container.prototype.isBoundNamed = function (serviceIdentifier, named) {\r\n return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {\r\n var bound = false;\r\n if (this._bindingDictionary.hasKey(serviceIdentifier)) {\r\n var bindings = this._bindingDictionary.get(serviceIdentifier);\r\n var request_1 = createMockRequest(this, serviceIdentifier, key, value);\r\n bound = bindings.some(function (b) { return b.constraint(request_1); });\r\n }\r\n if (!bound && this.parent) {\r\n bound = this.parent.isBoundTagged(serviceIdentifier, key, value);\r\n }\r\n return bound;\r\n };\r\n Container.prototype.snapshot = function () {\r\n this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));\r\n };\r\n Container.prototype.restore = function () {\r\n var snapshot = this._snapshots.pop();\r\n if (snapshot === undefined) {\r\n throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);\r\n }\r\n this._bindingDictionary = snapshot.bindings;\r\n this._activations = snapshot.activations;\r\n this._deactivations = snapshot.deactivations;\r\n this._middleware = snapshot.middleware;\r\n this._moduleActivationStore = snapshot.moduleActivationStore;\r\n };\r\n Container.prototype.createChild = function (containerOptions) {\r\n var child = new Container(containerOptions || this.options);\r\n child.parent = this;\r\n return child;\r\n };\r\n Container.prototype.applyMiddleware = function () {\r\n var middlewares = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n middlewares[_i] = arguments[_i];\r\n }\r\n var initial = (this._middleware) ? this._middleware : this._planAndResolve();\r\n this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);\r\n };\r\n Container.prototype.applyCustomMetadataReader = function (metadataReader) {\r\n this._metadataReader = metadataReader;\r\n };\r\n Container.prototype.get = function (serviceIdentifier) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAsync = function (serviceIdentifier) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var getArgs;\r\n return __generator(this, function (_a) {\r\n getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\r\n return [2, this._get(getArgs)];\r\n });\r\n });\r\n };\r\n Container.prototype.getNamed = function (serviceIdentifier, named) {\r\n return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getNamedAsync = function (serviceIdentifier, named) {\r\n return this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAll = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllAsync = function (serviceIdentifier) {\r\n var getArgs = this._getAllArgs(serviceIdentifier);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getButThrowIfAsync(getArgs);\r\n };\r\n Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {\r\n var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);\r\n return this._getAll(getArgs);\r\n };\r\n Container.prototype.getAllNamed = function (serviceIdentifier, named) {\r\n return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {\r\n return this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);\r\n };\r\n Container.prototype.resolve = function (constructorFunction) {\r\n var isBound = this.isBound(constructorFunction);\r\n if (!isBound) {\r\n this.bind(constructorFunction).toSelf();\r\n }\r\n var resolved = this.get(constructorFunction);\r\n if (!isBound) {\r\n this.unbind(constructorFunction);\r\n }\r\n return resolved;\r\n };\r\n Container.prototype._preDestroy = function (constructor, instance) {\r\n var _a, _b;\r\n if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {\r\n var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);\r\n return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);\r\n }\r\n };\r\n Container.prototype._removeModuleHandlers = function (moduleId) {\r\n var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);\r\n this._activations.removeIntersection(moduleActivationsHandlers.onActivations);\r\n this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);\r\n };\r\n Container.prototype._removeModuleBindings = function (moduleId) {\r\n return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });\r\n };\r\n Container.prototype._deactivate = function (binding, instance) {\r\n var _this = this;\r\n var constructor = Object.getPrototypeOf(instance).constructor;\r\n try {\r\n if (this._deactivations.hasKey(binding.serviceIdentifier)) {\r\n var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());\r\n if (isPromise(result)) {\r\n return this._handleDeactivationError(result.then(function () { return _this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor); }), constructor);\r\n }\r\n }\r\n var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);\r\n if (isPromise(propagateDeactivationResult)) {\r\n return this._handleDeactivationError(propagateDeactivationResult, constructor);\r\n }\r\n }\r\n catch (ex) {\r\n if (ex instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));\r\n }\r\n }\r\n };\r\n Container.prototype._handleDeactivationError = function (asyncResult, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ex_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4, asyncResult];\r\n case 1:\r\n _a.sent();\r\n return [3, 3];\r\n case 2:\r\n ex_1 = _a.sent();\r\n if (ex_1 instanceof Error) {\r\n throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));\r\n }\r\n return [3, 3];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {\r\n var _this = this;\r\n var deactivation = deactivationsIterator.next();\r\n while (deactivation.value) {\r\n var result = deactivation.value(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () {\r\n return _this._deactivateContainerAsync(instance, deactivationsIterator);\r\n });\r\n }\r\n deactivation = deactivationsIterator.next();\r\n }\r\n };\r\n Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var deactivation;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n deactivation = deactivationsIterator.next();\r\n _a.label = 1;\r\n case 1:\r\n if (!deactivation.value) return [3, 3];\r\n return [4, deactivation.value(instance)];\r\n case 2:\r\n _a.sent();\r\n deactivation = deactivationsIterator.next();\r\n return [3, 1];\r\n case 3: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._getContainerModuleHelpersFactory = function () {\r\n var _this = this;\r\n var setModuleId = function (bindingToSyntax, moduleId) {\r\n bindingToSyntax._binding.moduleId = moduleId;\r\n };\r\n var getBindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.bind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getUnbindFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbind(serviceIdentifier);\r\n };\r\n };\r\n var getUnbindAsyncFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.unbindAsync(serviceIdentifier);\r\n };\r\n };\r\n var getIsboundFunction = function () {\r\n return function (serviceIdentifier) {\r\n return _this.isBound(serviceIdentifier);\r\n };\r\n };\r\n var getRebindFunction = function (moduleId) {\r\n return function (serviceIdentifier) {\r\n var bindingToSyntax = _this.rebind(serviceIdentifier);\r\n setModuleId(bindingToSyntax, moduleId);\r\n return bindingToSyntax;\r\n };\r\n };\r\n var getOnActivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onActivation) {\r\n _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);\r\n _this.onActivation(serviceIdentifier, onActivation);\r\n };\r\n };\r\n var getOnDeactivationFunction = function (moduleId) {\r\n return function (serviceIdentifier, onDeactivation) {\r\n _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);\r\n _this.onDeactivation(serviceIdentifier, onDeactivation);\r\n };\r\n };\r\n return function (mId) { return ({\r\n bindFunction: getBindFunction(mId),\r\n isboundFunction: getIsboundFunction(),\r\n onActivationFunction: getOnActivationFunction(mId),\r\n onDeactivationFunction: getOnDeactivationFunction(mId),\r\n rebindFunction: getRebindFunction(mId),\r\n unbindFunction: getUnbindFunction(),\r\n unbindAsyncFunction: getUnbindAsyncFunction()\r\n }); };\r\n };\r\n Container.prototype._getAll = function (getArgs) {\r\n return Promise.all(this._get(getArgs));\r\n };\r\n Container.prototype._get = function (getArgs) {\r\n var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });\r\n if (this._middleware) {\r\n var middlewareResult = this._middleware(planAndResolveArgs);\r\n if (middlewareResult === undefined || middlewareResult === null) {\r\n throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);\r\n }\r\n return middlewareResult;\r\n }\r\n return this._planAndResolve()(planAndResolveArgs);\r\n };\r\n Container.prototype._getButThrowIfAsync = function (getArgs) {\r\n var result = this._get(getArgs);\r\n if (isPromiseOrContainsPromise(result)) {\r\n throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));\r\n }\r\n return result;\r\n };\r\n Container.prototype._getAllArgs = function (serviceIdentifier) {\r\n var getAllArgs = {\r\n avoidConstraints: true,\r\n isMultiInject: true,\r\n serviceIdentifier: serviceIdentifier,\r\n };\r\n return getAllArgs;\r\n };\r\n Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {\r\n var getNotAllArgs = {\r\n avoidConstraints: false,\r\n isMultiInject: isMultiInject,\r\n serviceIdentifier: serviceIdentifier,\r\n key: key,\r\n value: value,\r\n };\r\n return getNotAllArgs;\r\n };\r\n Container.prototype._planAndResolve = function () {\r\n var _this = this;\r\n return function (args) {\r\n var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);\r\n context = args.contextInterceptor(context);\r\n var result = resolve(context);\r\n return result;\r\n };\r\n };\r\n Container.prototype._deactivateIfSingleton = function (binding) {\r\n var _this = this;\r\n if (!binding.activated) {\r\n return;\r\n }\r\n if (isPromise(binding.cache)) {\r\n return binding.cache.then(function (resolved) { return _this._deactivate(binding, resolved); });\r\n }\r\n return this._deactivate(binding, binding.cache);\r\n };\r\n Container.prototype._deactivateSingletons = function (bindings) {\r\n for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n var binding = bindings_1[_i];\r\n var result = this._deactivateIfSingleton(binding);\r\n if (isPromise(result)) {\r\n throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);\r\n }\r\n }\r\n };\r\n Container.prototype._deactivateSingletonsAsync = function (bindings) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4, Promise.all(bindings.map(function (b) { return _this._deactivateIfSingleton(b); }))];\r\n case 1:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {\r\n if (this.parent) {\r\n return this._deactivate.bind(this.parent)(binding, instance);\r\n }\r\n else {\r\n return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);\r\n }\r\n };\r\n Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.parent) return [3, 2];\r\n return [4, this._deactivate.bind(this.parent)(binding, instance)];\r\n case 1:\r\n _a.sent();\r\n return [3, 4];\r\n case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];\r\n case 3:\r\n _a.sent();\r\n _a.label = 4;\r\n case 4: return [2];\r\n }\r\n });\r\n });\r\n };\r\n Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {\r\n try {\r\n this._bindingDictionary.remove(serviceIdentifier);\r\n }\r\n catch (e) {\r\n throw new Error(ERROR_MSGS.CANNOT_UNBIND + \" \" + getServiceIdentifierAsString(serviceIdentifier));\r\n }\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {\r\n var _this = this;\r\n if (typeof binding.onDeactivation === 'function') {\r\n var result = binding.onDeactivation(instance);\r\n if (isPromise(result)) {\r\n return result.then(function () { return _this._preDestroy(constructor, instance); });\r\n }\r\n }\r\n return this._preDestroy(constructor, instance);\r\n };\r\n Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(typeof binding.onDeactivation === 'function')) return [3, 2];\r\n return [4, binding.onDeactivation(instance)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [4, this._preDestroy(constructor, instance)];\r\n case 3:\r\n _a.sent();\r\n return [2];\r\n }\r\n });\r\n });\r\n };\r\n return Container;\r\n}());\r\nexport { Container };\r\n","import * as ERROR_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { getFirstArrayDuplicate } from '../utils/js';\r\nfunction targetIsConstructorFunction(target) {\r\n return target.prototype !== undefined;\r\n}\r\nfunction _throwIfMethodParameter(parameterName) {\r\n if (parameterName !== undefined) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n}\r\nfunction tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {\r\n _throwIfMethodParameter(parameterName);\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);\r\n}\r\nfunction tagProperty(annotationTarget, propertyName, metadata) {\r\n if (targetIsConstructorFunction(annotationTarget)) {\r\n throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);\r\n }\r\n _tagParameterOrProperty(METADATA_KEY.TAGGED_PROP, annotationTarget.constructor, propertyName, metadata);\r\n}\r\nfunction _ensureNoMetadataKeyDuplicates(metadata) {\r\n var metadatas = [];\r\n if (Array.isArray(metadata)) {\r\n metadatas = metadata;\r\n var duplicate = getFirstArrayDuplicate(metadatas.map(function (md) { return md.key; }));\r\n if (duplicate !== undefined) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + duplicate.toString());\r\n }\r\n }\r\n else {\r\n metadatas = [metadata];\r\n }\r\n return metadatas;\r\n}\r\nfunction _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {\r\n var metadatas = _ensureNoMetadataKeyDuplicates(metadata);\r\n var paramsOrPropertiesMetadata = {};\r\n if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) {\r\n paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget);\r\n }\r\n var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];\r\n if (paramOrPropertyMetadata === undefined) {\r\n paramOrPropertyMetadata = [];\r\n }\r\n else {\r\n var _loop_1 = function (m) {\r\n if (metadatas.some(function (md) { return md.key === m.key; })) {\r\n throw new Error(ERROR_MSGS.DUPLICATED_METADATA + \" \" + m.key.toString());\r\n }\r\n };\r\n for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) {\r\n var m = paramOrPropertyMetadata_1[_i];\r\n _loop_1(m);\r\n }\r\n }\r\n paramOrPropertyMetadata.push.apply(paramOrPropertyMetadata, metadatas);\r\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\r\n Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\r\n}\r\nfunction createTaggedDecorator(metadata) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (typeof indexOrPropertyDescriptor === 'number') {\r\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\r\n }\r\n else {\r\n tagProperty(target, targetKey, metadata);\r\n }\r\n };\r\n}\r\nfunction _decorate(decorators, target) {\r\n Reflect.decorate(decorators, target);\r\n}\r\nfunction _param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); };\r\n}\r\nfunction decorate(decorator, target, parameterIndexOrProperty) {\r\n if (typeof parameterIndexOrProperty === 'number') {\r\n _decorate([_param(parameterIndexOrProperty, decorator)], target);\r\n }\r\n else if (typeof parameterIndexOrProperty === 'string') {\r\n Reflect.decorate([decorator], target, parameterIndexOrProperty);\r\n }\r\n else {\r\n _decorate([decorator], target);\r\n }\r\n}\r\nexport { decorate, tagParameter, tagProperty, createTaggedDecorator };\r\n","export function getFirstArrayDuplicate(array) {\r\n var seenValues = new Set();\r\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\r\n var entry = array_1[_i];\r\n if (seenValues.has(entry)) {\r\n return entry;\r\n }\r\n else {\r\n seenValues.add(entry);\r\n }\r\n }\r\n return undefined;\r\n}\r\n","import * as ERRORS_MSGS from '../constants/error_msgs';\r\nimport * as METADATA_KEY from '../constants/metadata_keys';\r\nfunction injectable() {\r\n return function (target) {\r\n if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) {\r\n throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR);\r\n }\r\n var types = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || [];\r\n Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types, target);\r\n return target;\r\n };\r\n}\r\nexport { injectable };\r\n","import { UNDEFINED_INJECT_ANNOTATION } from '../constants/error_msgs';\r\nimport { Metadata } from '../planning/metadata';\r\nimport { createTaggedDecorator } from './decorator_utils';\r\nexport function injectBase(metadataKey) {\r\n return function (serviceIdentifier) {\r\n return function (target, targetKey, indexOrPropertyDescriptor) {\r\n if (serviceIdentifier === undefined) {\r\n var className = typeof target === 'function' ? target.name : target.constructor.name;\r\n throw new Error(UNDEFINED_INJECT_ANNOTATION(className));\r\n }\r\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(target, targetKey, indexOrPropertyDescriptor);\r\n };\r\n };\r\n}\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar inject = injectBase(METADATA_KEY.INJECT_TAG);\r\nexport { inject };\r\n","import * as METADATA_KEY from '../constants/metadata_keys';\r\nimport { injectBase } from './inject_base';\r\nvar multiInject = injectBase(METADATA_KEY.MULTI_INJECT_TAG);\r\nexport { multiInject };\r\n","const TYPES = {\n AudioContextManager: Symbol.for(\"AudioContextManager\"),\n AudioEditor: Symbol.for(\"AudioEditor\"),\n AudioProcessor: Symbol.for(\"AudioProcessor\"),\n BufferManager: Symbol.for(\"BufferManager\"),\n FilterManager: Symbol.for(\"FilterManager\"),\n RendererManager: Symbol.for(\"RendererManager\"),\n SaveBufferManager: Symbol.for(\"SaveBufferManager\"),\n ConfigService: Symbol.for(\"ConfigService\"),\n EventEmitter: Symbol.for(\"EventEmitter\"),\n BufferPlayer: Symbol.for(\"BufferPlayer\"),\n BufferDecoderService: Symbol.for(\"BufferDecoderService\"),\n BufferFetcherService: Symbol.for(\"BufferFetcherService\"),\n AudioBuffersToFetch: Symbol.for(\"AudioBuffersToFetch\"),\n Renderers: Symbol.for(\"Renderers\"),\n Filters: Symbol.for(\"Filters\"),\n EntryPointFilter: Symbol.for(\"EntryPointFilter\"),\n VoiceRecorder: Symbol.for(\"VoiceRecorder\")\n};\n\nexport { TYPES };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum EventType {\n LOADING_BUFFERS = \"loadingBuffers\",\n LOADING_BUFFERS_ERROR = \"loadingBuffersError\",\n FETCHING_BUFFERS = \"fetchingBuffers\",\n FETCHING_BUFFERS_ERROR = \"fetchingBuffersError\",\n FINISHED_FETCHING_BUFFERS = \"finishedFetchingBuffers\",\n LOADED_BUFFERS = \"loadedBuffers\",\n COMPATIBILITY_MODE_AUTO_ENABLED = \"compatibilityModeAutoEnabled\",\n RENDERING_AUDIO_PROBLEM_DETECTED = \"renderingAudioProblemDetected\",\n AUDIO_RENDERING_FINISHED = \"audioRenderingFinished\",\n OFFLINE_AUDIO_RENDERING_FINISHED = \"offlineAudioRenderingFinished\",\n PLAYING_STOPPED = \"playingStopped\",\n PLAYING_STARTED = \"playingStarted\",\n PLAYING_FINISHED = \"playingFinished\",\n PLAYING_UPDATE = \"playingUpdate\",\n RECORDER_INIT = \"recorderInit\",\n RECORDER_SUCCESS = \"recorderSuccess\",\n RECORDER_ERROR = \"recorderError\",\n RECORDER_UPDATE_CONSTRAINTS = \"recorderUpdateConstraints\",\n RECORDER_RECORDING = \"recorderRecording\",\n RECORDER_STOPPED = \"recorderStopped\",\n RECORDER_PAUSED = \"recorderPaused\",\n RECORDER_RESETED = \"recorderReseted\",\n RECORDER_COUNT_UPDATE = \"recorderCountUpdate\",\n SAMPLE_RATE_CHANGED = \"sampleRateChanged\",\n DECODING_AUDIO_FILE = \"decodingAudioFile\",\n DECODED_AUDIO_FILE = \"decodedAudioFile\",\n ERROR_DECODING_AUDIO_FILE = \"errorDecodingAudioFile\",\n RECORDER_NOT_FOUND_ERROR = \"recorderNotFoundError\",\n RECORDER_UNKNOWN_ERROR = \"recorderUnknownError\",\n UPDATE_AUDIO_TREATMENT_PERCENT = \"updateAudioTreatmentPercent\",\n UPDATE_REMAINING_TIME_ESTIMATED = \"updateRemainingTimeEstimated\",\n CANCELLED_AND_LOADED_INITIAL_AUDIO = \"cancelledAndLoadedInitialAudio\",\n CANCELLING_AUDIO_PROCESSING = \"cancellingAudioProcessing\"\n};\n","const Constants = {\n AUDIO_EDITOR: \"audioEditor\",\n VOICE_RECORDER: \"voiceRecorder\",\n BUFFER_PLAYER: \"bufferPlayer\",\n AUDIO_CONTEXT_MANAGER: \"audioContextManager\",\n AUDIO_PROCESSOR: \"audioProcessor\",\n BUFFER_MANAGER: \"bufferManager\",\n FILTER_MANAGER: \"filterManager\",\n RENDERER_MANAGER: \"rendererManager\",\n SAVE_BUFFER_MANAGER: \"saveBufferManager\",\n EXPORT_WAV_COMMAND: \"exportWAV\",\n EXPORT_MP3_COMMAND: \"exportMP3\",\n AUDIO_WAV: \"audio/wav\",\n AUDIO_MP3: \"audio/mp3\",\n RECORD_COMMAND: \"record\",\n INIT_COMMAND: \"init\",\n FILTERS_NAMES: {\n REVERB: \"reverb\",\n ECHO: \"echo\",\n BASS_BOOST: \"bassboost\",\n BITCRUSHER: \"bitcrusher\",\n HIGH_PASS: \"highpass\",\n LIMITER: \"limiter\",\n LOW_PASS: \"lowpass\",\n PASSTHROUGH: \"passthroughfilter\",\n RETURN_AUDIO: \"returnAudio\",\n SOUNDTOUCH: \"soundtouch\",\n TELEPHONIZER: \"telephonizer\",\n VOCODER: \"vocoder\"\n },\n WORKLET_PATHS: {\n BITCRUSHER: \"BitCrusher.worklet.js\",\n LIMITER: \"Limiter.worklet.js\",\n SOUNDTOUCH: \"Soundtouch.worklet.js\",\n RECORDER_WORKLET: \"RecorderWorklet.js\",\n PASSTHROUGH: \"Passthrough.worklet.js\"\n },\n WORKLET_NAMES: {\n BITCRUSHER: \"bitcrusher-processor\",\n LIMITER: \"limiter-processor\",\n SOUNDTOUCH: \"soundtouch-worklet\",\n RECORDER_WORKLET: \"recorder-worklet\",\n PASSTHROUGH: \"passthrough\"\n },\n PREFERENCES_KEYS: {\n COMPATIBILITY_MODE_ENABLED: \"compatibility-mode-enabled\",\n COMPATIBILITY_MODE_CHECKED: \"compatibility-mode-checked\",\n ENABLE_AUDIO_WORKLET: \"enable-audio-worklet\",\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: \"enable-soundtouch-audio-worklet\",\n BUFFER_SIZE: \"buffer-size\",\n SAMPLE_RATE: \"sample-rate\",\n DISABLE_INITIAL_RENDERING: \"disable-initial-rendering\",\n BITRATE_MP3: \"bitrate-mp3\"\n },\n // Enable or disable the use of Audio Worklet version of Soundtouch\n // If disabled, the ScriptProcessorNode version is used\n ENABLE_SOUNDTOUCH_AUDIO_WORKLET: true,\n ENABLE_AUDIO_WORKLET: true,\n ENABLE_RECORDER_AUDIO_WORKLET: true,\n SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE: 16384,\n DEFAULT_REVERB_ENVIRONMENT: {\n name: \"Medium Damping Cave E002 M2S\",\n url: \"impulse_response.wav\",\n size: 1350278,\n addDuration: 4,\n link: \"http://www.cksde.com/p_6_250.htm\"\n },\n VOCODER_MODULATOR: \"modulator.mp3\",\n DEFAULT_BUFFER_SIZE: 0,\n VALID_BUFFER_SIZE: [0, 256, 512, 1024, 2048, 4096, 8192, 16384],\n VALID_MP3_BITRATES: [32, 64, 96, 128, 160, 256, 320],\n DEFAULT_SAMPLE_RATE: 0, // 0 = AUTO\n VALID_SAMPLE_RATES: [0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000],\n // Interval used by the treatment percent counter. The event will be dispatched each ms defined here\n TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL: 100,\n // Smoothing factor for the time couting estimation (between 0 and 1)\n TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR: 0.9,\n // Disable initial rendering (when opening audio file or buffer)\n DISABLE_INITIAL_RENDERING: true,\n // Default save format\n DEFAULT_SAVE_FORMAT: \"wav\",\n // Default bitrate for the MP3 encoder\n DEFAULT_MP3_BITRATE: 320\n};\n\nexport default Constants;\n","import { injectable } from \"inversify\";\nimport AudioEditorEvents from \"../model/AudioEditorEvent\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default class EventEmitter implements EventEmitterInterface {\n listeners: AudioEditorEvents = {};\n \n constructor() {\n this.listeners = {};\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event].push(callback);\n }\n\n emit(event: string, data?: string | number | AudioBuffer) {\n if (this.listeners[event]) {\n this.listeners[event].forEach(callback => {\n callback(data);\n });\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.listeners[event]) {\n this.listeners[event] = this.listeners[event].filter(cb => cb !== callback);\n }\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport Constants from \"@/model/Constants\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioContextManager implements AudioContextManagerInterface {\n\n /** The current event emitter */\n private eventEmitter: EventEmitterInterface | undefined;\n\n /** The config service */\n private configService: ConfigService | null;\n\n /** The current audio context */\n private _currentContext: AudioContext | null | undefined;\n\n /** The old audio context */\n private oldAudioContext: AudioContext | null | undefined;\n\n /** The previous sample rate setting */\n private previousSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n constructor(\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService | null) {\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n\n this.setup();\n }\n\n private setup() {\n if (this.configService) {\n this.previousSampleRate = this.configService.getSampleRate();\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.previousSampleRate);\n }\n }\n\n if (!this.currentContext) {\n this.createNewContext(this.previousSampleRate);\n }\n }\n\n createNewContextIfNeeded(principalBuffer?: AudioBuffer | null) {\n const isCompatibilityModeEnabled = this.configService && this.configService.isCompatibilityModeEnabled();\n\n if (isCompatibilityModeEnabled && principalBuffer) {\n // If compatibility mode is enabled, we use the sample rate of the input audio buffer\n if (this.currentSampleRate != principalBuffer.sampleRate) {\n this.createNewContext(principalBuffer.sampleRate);\n this.previousSampleRate = principalBuffer.sampleRate;\n\n return true;\n }\n } else {\n // Otherwise we change the context if the sample rate has changed\n let currentSampleRate = Constants.DEFAULT_SAMPLE_RATE;\n\n if (this.configService) {\n currentSampleRate = this.configService.getSampleRate();\n }\n\n // If sample rate setting has changed, create a new audio context\n if (currentSampleRate != this.previousSampleRate) {\n this.createNewContext(currentSampleRate);\n this.previousSampleRate = currentSampleRate;\n\n return true;\n }\n }\n\n return false;\n }\n\n /** \n * Stop previous audio context and create a new one\n * @param sampleRate New sample rate\n */\n createNewContext(sampleRate: number) {\n if (this._currentContext) {\n this.oldAudioContext = this._currentContext;\n this.destroyOldContext();\n }\n\n const options: AudioContextOptions = {\n latencyHint: \"interactive\"\n };\n\n if (sampleRate != 0) {\n options.sampleRate = sampleRate;\n }\n\n this._currentContext = new AudioContext(options);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.SAMPLE_RATE_CHANGED, this.currentSampleRate);\n }\n }\n\n /**\n * Destroy previous AudioContext\n */\n private destroyOldContext() {\n if (this.oldAudioContext) {\n this.oldAudioContext.close();\n this.oldAudioContext = null;\n }\n }\n\n get currentSampleRate(): number {\n if (this.currentContext) {\n return this.currentContext.sampleRate;\n }\n\n return 0;\n }\n\n get currentContext() {\n return this._currentContext;\n }\n}\n","import { inject, injectable } from \"inversify\";\nimport type { ConfigService } from \"../../services/interfaces/ConfigService\";\nimport { TYPES } from \"@/inversify.types\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\nimport type BufferDecoderServiceInterface from \"@/services/interfaces/BufferDecoderServiceInterface\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\n\n@injectable()\nexport default abstract class AbstractAudioElement {\n\n /** Is this element enabled? */\n private enabled = false;\n\n /** Is this element enabled by default? */\n private defaultEnabled = false;\n\n @inject(TYPES.BufferFetcherService)\n protected bufferFetcherService: BufferFetcherServiceInterface | null = null;\n\n @inject(TYPES.BufferDecoderService)\n protected bufferDecoderService: BufferDecoderServiceInterface | null = null;\n\n @inject(TYPES.ConfigService)\n protected configService: ConfigService | null = null;\n\n @inject(TYPES.EventEmitter)\n protected eventEmitter: EventEmitterInterface | null = null;\n\n /** Returns the order in which the filter/renderer needs to be applied */\n abstract get order(): number;\n\n /** Returns the id of this filter/renderer */\n abstract get id(): string;\n\n /** Is this filter/renderer enabled? */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /** Is this filter/renderer enabled by default? */\n isDefaultEnabled(): boolean {\n return this.defaultEnabled;\n }\n\n /** Set to true if this filter/renderer needs to be enabled by default */\n setDefaultEnabled(state: boolean) {\n this.defaultEnabled = state;\n }\n\n setEnabled(state: boolean) {\n this.enabled = state;\n }\n\n /** Enable this filter/renderer */\n enable() {\n this.setEnabled(true);\n }\n\n /** Disable this filter/renderer */\n disable() {\n this.setEnabled(false);\n }\n\n /** Toggle to enabled/disabled this filter */\n toggle() {\n this.setEnabled(!this.isEnabled());\n }\n\n injectDependencies(bufferFetcherService: BufferFetcherServiceInterface | null, bufferDecoderService: BufferDecoderServiceInterface | null, configService: ConfigService | null, eventEmitter: EventEmitterInterface | null) {\n this.bufferFetcherService = bufferFetcherService;\n this.bufferDecoderService = bufferDecoderService;\n this.configService = configService;\n this.eventEmitter = eventEmitter;\n }\n}\n","import { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport FilterManagerInterface from \"@/audioEditor/interfaces/FilterManagerInterface\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\n\nconst utilFunctions = {\n calcAudioDuration: (audio: AudioBuffer, speed: number) => {\n if (audio) {\n let duration = audio.duration + 1;\n\n if (speed) {\n duration = duration / speed;\n }\n\n return duration;\n }\n\n return 0;\n },\n loadAudioBuffer: async (context: AudioContext, file: File) => {\n const arrayBuffer = await utilFunctions.readAsArrayBufferPromisified(file);\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n return utilFunctions.decodeBuffer(context, audioBuffer);\n },\n readAsArrayBufferPromisified: (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = ev => {\n const result = ev?.target?.result;\n\n if (result instanceof ArrayBuffer) {\n resolve(result);\n } else {\n reject();\n }\n };\n\n if (file) {\n reader.readAsArrayBuffer(file); // Read the file\n }\n });\n },\n decodeBuffer: (context: AudioContext, buffer: AudioBuffer) => {\n if (buffer.numberOfChannels == 1) { // convert to stereo buffer\n context.resume();\n\n const duration = buffer.duration;\n const sampleRate = context.sampleRate;\n\n const newBuffer = context.createBuffer(2, sampleRate * duration + sampleRate * 2, sampleRate);\n\n // Original buffer data\n const sourceChannelData = buffer.getChannelData(0);\n\n // Destination buffers\n const channel0Data = newBuffer.getChannelData(0);\n const channel1Data = newBuffer.getChannelData(1);\n\n for (let i = 0; i < sourceChannelData.length; i++) {\n channel0Data[i] = sourceChannelData[i];\n channel1Data[i] = sourceChannelData[i];\n }\n\n return newBuffer;\n }\n\n return buffer;\n },\n convertAudioBufferToFloat32Array: (buffer: AudioBuffer) => {\n const array: Float32Array[] = [];\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n array.push(buffer.getChannelData(channel));\n }\n\n return array;\n },\n convertAudioParamToFloat32Array: (param: AudioParam, length: number) => {\n const array = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n array.set([param.value], i);\n }\n\n return array;\n },\n sumAudioBufferChannel(buffer: AudioBuffer, channel: number) {\n return buffer.getChannelData(channel).reduce((a, b) => a + b, 0);\n },\n sumAudioBuffer(buffer: AudioBuffer) {\n let sum = 0;\n\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n sum += this.sumAudioBufferChannel(buffer, channel);\n }\n\n return sum;\n },\n /**\n * This method checks if the browser is compatible with audio worklets\n * @param audioContext \n */\n isAudioWorkletCompatible(audioContext: BaseAudioContext) {\n if (typeof (audioContext) !== \"undefined\" && typeof (audioContext.audioWorklet) !== \"undefined\") {\n return true;\n }\n\n return false;\n },\n /**\n * Check that the setting value is correct\n * @param value FilterSettingValue\n */\n isSettingValueValid(value: FilterSettingValue) {\n return typeof (value) !== \"undefined\" && !isNaN(Number(value)) && !(typeof (value) === \"string\" && value.trim() === \"\");\n },\n /**\n * Calculate approximative audio duration according to enabled filters and their settings\n * @param speedAudio Current audio speed\n * @returns The audio duration\n */\n calculateAudioDuration(buffer: AudioBuffer, filterManager: FilterManagerInterface, speedAudio: number): number {\n if (buffer && filterManager) {\n const duration = this.calcAudioDuration(buffer, speedAudio);\n return duration + filterManager.getAddingTime();\n }\n\n return 0;\n },\n /**\n * Reset audio rendering progress\n */\n resetAudioRenderingProgress(eventEmitter: EventEmitterInterface | null) {\n if (eventEmitter) {\n eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, 0);\n eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n }\n },\n forceDownload(blob: Blob, filename: string) {\n const link = window.document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n window.document.body.appendChild(link);\n link.href = url;\n link.download = filename || \"output.wav\";\n link.click();\n URL.revokeObjectURL(url);\n }\n};\n\nexport default utilFunctions;\n","import AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"../filters/interfaces/AbstractAudioFilter\";\nimport AbstractAudioRenderer from \"../filters/interfaces/AbstractAudioRenderer\";\nimport utils from \"../utils/Functions\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport Constants from \"../model/Constants\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettings } from \"../model/filtersSettings/FilterSettings\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { FilterState } from \"../model/FilterState\";\nimport SaveBufferOptions from \"../model/SaveBufferOptions\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport AudioEditorInterface from \"./interfaces/AudioEditorInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\n\n@injectable()\nexport default class AudioEditor extends AbstractAudioElement implements AudioEditorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The renderer manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The save buffer manager */\n private saveBufferManager: SaveBufferManagerInterface | undefined;\n\n /** The save buffer manager */\n private audioProcessor: AudioProcessorInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The audio buffer to be processed */\n private principalBuffer: AudioBuffer | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.SaveBufferManager) saveBufferManager: SaveBufferManagerInterface,\n @inject(TYPES.AudioProcessor) audioProcessor: AudioProcessorInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface,\n @inject(TYPES.BufferPlayer) player: BufferPlayerInterface\n ) {\n super();\n\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.contextManager = contextManager;\n this.saveBufferManager = saveBufferManager;\n this.audioProcessor = audioProcessor;\n this.bufferManager = bufferManager;\n this.bufferPlayer = player;\n\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called just before starting playing audio, when compatibility mode is enabled\n this.bufferPlayer.onBeforePlaying(async () => {\n if (this.bufferPlayer && this.bufferPlayer.compatibilityMode\n && this.contextManager && this.contextManager.currentContext && this.audioProcessor) {\n await this.audioProcessor.setupOutput(this.principalBuffer, this.contextManager.currentContext);\n }\n });\n\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.bufferPlayer && this.bufferPlayer.loop) {\n this.bufferPlayer.start();\n }\n });\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n if (this.filterManager) {\n this.filterManager.addFilters(...filters);\n }\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n if (this.rendererManager) {\n this.rendererManager.addRenderers(...renderers);\n }\n }\n\n get currentSampleRate(): number {\n if (this.contextManager) {\n return this.contextManager.currentSampleRate;\n }\n\n return 0;\n }\n\n get defaultDeviceSampleRate(): number {\n const tempContext = new AudioContext();\n let sampleRate = 0;\n\n if (tempContext) {\n sampleRate = tempContext.sampleRate;\n tempContext.close();\n }\n\n return sampleRate;\n }\n\n async loadBufferFromFile(file: File) {\n this.principalBuffer = null;\n\n if (this.audioProcessor) {\n await this.audioProcessor.prepareContext(this.principalBuffer);\n }\n\n if (this.contextManager && this.contextManager.currentContext && this.bufferDecoderService && this.audioProcessor) {\n this.principalBuffer = await this.bufferDecoderService.decodeBufferFromFile(file);\n this.audioProcessor.initialRenderingDone = false;\n\n if (this.principalBuffer) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n } else {\n throw new Error(\"Error decoding audio file\");\n }\n\n utilFunctions.resetAudioRenderingProgress(this.eventEmitter);\n } else {\n throw new Error(\"Audio Context is not ready!\");\n }\n }\n\n loadBuffer(audioBuffer: AudioBuffer) {\n this.principalBuffer = audioBuffer;\n\n if (this.audioProcessor) {\n this.audioProcessor.sumInputBuffer = utils.sumAudioBuffer(this.principalBuffer);\n this.audioProcessor.initialRenderingDone = false;\n }\n }\n\n getOutputBuffer() {\n if (this.audioProcessor) {\n return this.audioProcessor.renderedBuffer;\n }\n\n return null;\n }\n\n async renderAudio(): Promise {\n if (this.audioProcessor) {\n return await this.audioProcessor.renderAudio(this.principalBuffer);\n }\n\n return false;\n }\n\n isAudioWorkletAvailable(): boolean {\n if (this.contextManager && this.contextManager.currentContext) {\n return utilFunctions.isAudioWorkletCompatible(this.contextManager.currentContext);\n }\n\n return false;\n }\n\n /** Filters settings */\n\n getFiltersState(): FilterState {\n if (this.filterManager && this.rendererManager) {\n return {\n ...this.filterManager.getFiltersState(),\n ...this.rendererManager.getRenderersState()\n };\n }\n\n return {};\n }\n\n getFiltersSettings(): Map {\n if (this.filterManager) {\n return this.filterManager.getFiltersSettings();\n }\n\n return new Map();\n }\n\n async reconnectNodesIfNeeded() {\n if (this.contextManager && this.bufferPlayer && this.bufferPlayer.compatibilityMode &&\n this.contextManager.currentContext && this.principalBuffer &&\n this.filterManager && this.filterManager.entrypointFilter) {\n await this.filterManager.connectNodes(this.contextManager.currentContext, this.principalBuffer, true, this.bufferPlayer.compatibilityMode);\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n this.bufferPlayer.speedAudio = speedAudio;\n this.bufferPlayer.duration = utilFunctions.calculateAudioDuration(this.principalBuffer, this.filterManager, speedAudio) * speedAudio;\n }\n }\n\n toggleFilter(filterId: string) {\n if (this.rendererManager) {\n this.rendererManager.toggleRenderer(filterId);\n }\n\n if (this.filterManager) {\n this.filterManager.toggleFilter(filterId);\n this.reconnectNodesIfNeeded();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n if (this.filterManager) {\n await this.filterManager.changeFilterSettings(filterId, settings);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n async resetFilterSettings(filterId: string) {\n if (this.filterManager) {\n await this.filterManager.resetFilterSettings(filterId);\n await this.reconnectNodesIfNeeded();\n }\n }\n\n resetAllFiltersState() {\n if (this.rendererManager) {\n this.rendererManager.resetAllRenderersState();\n }\n\n if (this.filterManager) {\n this.filterManager.resetAllFiltersState();\n this.reconnectNodesIfNeeded();\n }\n }\n\n /** Events and exit */\n\n exit() {\n if (this.bufferPlayer) {\n this.bufferPlayer.stop();\n this.bufferPlayer.reset();\n }\n\n this.cancelAudioRendering();\n this.principalBuffer = null;\n }\n\n cancelAudioRendering() {\n if (this.audioProcessor) {\n this.audioProcessor.cancelAudioRendering();\n }\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n off(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.off(event, callback);\n }\n }\n\n async saveBuffer(options?: SaveBufferOptions): Promise {\n if (this.saveBufferManager && this.audioProcessor) {\n return await this.saveBufferManager?.saveBuffer(this.audioProcessor.renderedBuffer, options);\n }\n\n return false;\n }\n\n set downloadingInitialData(state: boolean) {\n if (this.bufferManager) {\n this.bufferManager.downloadingInitialData = state;\n }\n }\n\n get downloadingInitialData(): boolean {\n if (this.bufferManager) {\n return this.bufferManager.downloadingInitialData;\n }\n\n return false;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_EDITOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport utils from \"../utils/Functions\";\nimport Constants from \"@/model/Constants\";\nimport AudioProcessorInterface from \"./interfaces/AudioProcessorInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport type RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class AudioProcessor extends AbstractAudioElement implements AudioProcessorInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The filter manager */\n private rendererManager: RendererManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** The save buffer manager */\n private bufferManager: BufferManagerInterface | undefined;\n\n /** The current offline context */\n private currentOfflineContext: OfflineAudioContext | null | undefined;\n\n /** The resulting audio buffer */\n private _renderedBuffer: AudioBuffer | null = null;\n\n /** true if the user wanted to cancel audio rendering */\n private audioRenderingLastCanceled = false;\n\n /** true if initial rendering for the current buffer was done */\n initialRenderingDone = false;\n /** The sum of all the samples of the input buffer,\n * used to detect the need to enable the compatibility mode */\n sumInputBuffer: number = 0;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.RendererManager) rendererManager: RendererManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface,\n @inject(TYPES.BufferManager) bufferManager: BufferManagerInterface) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n this.rendererManager = rendererManager;\n this.bufferManager = bufferManager;\n }\n\n async prepareContext(inputBuffer: AudioBuffer | null) {\n if (this.contextManager) {\n const changed = this.contextManager.createNewContextIfNeeded(inputBuffer);\n\n if (changed && this.bufferManager) {\n await this.bufferManager.resetBufferFetcher();\n }\n\n if (this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n }\n }\n\n async renderAudio(inputBuffer: AudioBuffer | null): Promise {\n await this.prepareContext(inputBuffer);\n\n if (!this.contextManager || !this.contextManager.currentContext) {\n throw new Error(\"AudioContext is not yet available\");\n }\n\n if (!this.filterManager) {\n throw new Error(\"Filter manager is not available\");\n }\n\n if (!this.rendererManager) {\n throw new Error(\"Renderer manager is not available\");\n }\n\n if (!this.filterManager.entrypointFilter) {\n throw new Error(\"Entrypoint filter is not available\");\n }\n\n if (!inputBuffer) {\n throw new Error(\"No principal buffer available\");\n }\n\n // If initial rendering is disabled and compatibility mode is disabled, we stop here\n if (!this.initialRenderingDone && this.configService && this.configService.isInitialRenderingDisabled() && !this.configService.isCompatibilityModeEnabled()) {\n this.loadInitialBuffer(inputBuffer);\n this.initialRenderingDone = true;\n return true;\n }\n\n // If switching from compatiblity mode to normal mode, we stop the audio player\n if (this.configService && this.bufferPlayer && !this.configService.isCompatibilityModeEnabled() && this.bufferPlayer.compatibilityMode) {\n this.bufferPlayer.stop();\n }\n\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n const durationAudio = utils.calculateAudioDuration(inputBuffer, this.filterManager, speedAudio);\n const offlineContext = new OfflineAudioContext(2, this.contextManager.currentContext.sampleRate * durationAudio, this.contextManager.currentContext.sampleRate);\n const outputContext = this.configService && this.configService.isCompatibilityModeEnabled() ? this.contextManager.currentContext : offlineContext;\n\n this._renderedBuffer = await this.rendererManager.executeAudioRenderers(inputBuffer, outputContext);\n this.currentOfflineContext = null;\n this.audioRenderingLastCanceled = false;\n\n\n utils.resetAudioRenderingProgress(this.eventEmitter);\n this.filterManager.setupTotalSamples(durationAudio, this.contextManager.currentContext);\n\n return await this.setupOutput(inputBuffer, outputContext, durationAudio, offlineContext);\n }\n\n private setupPlayerSpeed(bufferPlayer: BufferPlayerInterface) {\n if (this.filterManager && this.filterManager.entrypointFilter) {\n const speedAudio = this.filterManager.entrypointFilter.getSpeed();\n bufferPlayer.speedAudio = speedAudio;\n }\n }\n\n async setupOutput(inputBuffer: AudioBuffer | null, outputContext: BaseAudioContext, durationAudio?: number, offlineContext?: OfflineAudioContext): Promise {\n if (this._renderedBuffer && this.configService && this.eventEmitter && this.bufferPlayer && this.filterManager) {\n // Initialize worklets then connect the filter nodes\n await this.filterManager.initializeWorklets(outputContext);\n await this.filterManager.connectNodes(outputContext, this._renderedBuffer, false, this.configService.isCompatibilityModeEnabled());\n\n this.setupPlayerSpeed(this.bufferPlayer);\n\n // Standard mode\n if (!this.configService.isCompatibilityModeEnabled() && offlineContext && this.filterManager.currentNodes) {\n this.currentOfflineContext = offlineContext;\n this.filterManager.currentNodes.output.connect(outputContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n if (this.contextManager && !this.loadRenderedAudio(inputBuffer, renderedBuffer)) {\n return await this.setupOutput(inputBuffer, this.contextManager.currentContext!, durationAudio);\n }\n\n if (this.audioRenderingLastCanceled) {\n return false;\n }\n\n this.eventEmitter.emit(EventType.OFFLINE_AUDIO_RENDERING_FINISHED);\n } else { // Compatibility mode\n this.bufferPlayer.setCompatibilityMode(this.filterManager.currentNodes!.output, durationAudio);\n this.initialRenderingDone = true;\n }\n\n this.eventEmitter.emit(EventType.AUDIO_RENDERING_FINISHED);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Load rendered audio buffer into audio player\n * @param renderedBuffer Rendered audio buffer - AudioBuffer\n * @returns false if the rendred audio buffer is invalid, true otherwise\n */\n private loadRenderedAudio(inputBuffer: AudioBuffer | null, renderedBuffer: AudioBuffer): boolean {\n if (this.eventEmitter && this.bufferPlayer) {\n if (!this.audioRenderingLastCanceled) {\n const sumRenderedAudio = utils.sumAudioBuffer(renderedBuffer);\n\n if (sumRenderedAudio == 0 && this.sumInputBuffer !== 0) {\n if (this.configService && !this.configService.isCompatibilityModeChecked()) {\n this.setCompatibilityModeChecked(true);\n this.configService.enableCompatibilityMode();\n this.eventEmitter.emit(EventType.COMPATIBILITY_MODE_AUTO_ENABLED);\n\n return false;\n }\n\n this.eventEmitter.emit(EventType.RENDERING_AUDIO_PROBLEM_DETECTED);\n }\n\n this._renderedBuffer = renderedBuffer;\n this.bufferPlayer.loadBuffer(this._renderedBuffer);\n } else if (!this.initialRenderingDone) {\n this.loadInitialBuffer(inputBuffer);\n this.eventEmitter.emit(EventType.CANCELLED_AND_LOADED_INITIAL_AUDIO);\n }\n\n this.initialRenderingDone = true;\n }\n\n return true;\n }\n\n /**\n * Load the initial audio buffer to the buffer player\n */\n private loadInitialBuffer(inputBuffer: AudioBuffer | null) {\n if (this.bufferPlayer) {\n this._renderedBuffer = inputBuffer;\n this.bufferPlayer.loadBuffer(inputBuffer!);\n }\n }\n\n public cancelAudioRendering() {\n if (this.currentOfflineContext && !this.audioRenderingLastCanceled && this.filterManager) {\n this.audioRenderingLastCanceled = true;\n this.filterManager.disconnectOldNodes(false);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.CANCELLING_AUDIO_PROCESSING);\n }\n }\n }\n\n /**\n * Set compatibility/direct audio rendering mode already checked for auto enabling (if an error occurs rendering in offline context)\n * @param checked boolean\n */\n private setCompatibilityModeChecked(checked: boolean) {\n if (this.configService) {\n this.configService.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED, \"\" + checked);\n }\n }\n\n get renderedBuffer() {\n return this._renderedBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.AUDIO_PROCESSOR;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport Constants from \"@/model/Constants\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport EventEmitter from \"@/utils/EventEmitter\";\nimport BufferManagerInterface from \"./interfaces/BufferManagerInterface\";\nimport { inject, injectable } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport type BufferFetcherServiceInterface from \"@/services/interfaces/BufferFetcherServiceInterface\";\n\n@injectable()\nexport default class BufferManager extends AbstractAudioElement implements BufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** True if we are downloading initial buffer data */\n downloadingInitialData = false;\n\n /** List of audio buffers to fetch */\n private audioBuffersToFetch: string[] = [];\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.BufferFetcherService) bufferFetcherService: BufferFetcherServiceInterface,\n @inject(TYPES.EventEmitter) eventEmitter: EventEmitterInterface | null,\n @inject(TYPES.AudioBuffersToFetch) audioBuffersToFetch: string[]) {\n super();\n\n this.bufferFetcherService = bufferFetcherService;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.filterManager = filterManager;\n this.filterManager = filterManager;\n this.audioBuffersToFetch = audioBuffersToFetch;\n\n this.setup();\n }\n\n private setup() {\n if (this.audioBuffersToFetch.length > 0) {\n this.fetchBuffers(false);\n }\n }\n\n /**\n * Fetch default buffers from network\n * @param refetch true if we need to refetch the buffers\n */\n private async fetchBuffers(refetch: boolean) {\n if (this.downloadingInitialData || !this.bufferFetcherService) {\n return;\n }\n\n this.downloadingInitialData = true;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS);\n }\n\n try {\n await this.bufferFetcherService.fetchAllBuffers(this.audioBuffersToFetch);\n this.downloadingInitialData = false;\n\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADED_BUFFERS);\n }\n } catch (e) {\n if (this.eventEmitter && !refetch) {\n this.eventEmitter.emit(EventType.LOADING_BUFFERS_ERROR);\n }\n }\n }\n\n async resetBufferFetcher() {\n if (this.bufferFetcherService) {\n this.bufferFetcherService.reset();\n\n await this.fetchBuffers(true);\n\n if (this.filterManager) {\n await this.filterManager.resetFilterBuffers();\n }\n }\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_MANAGER;\n }\n}\n","import AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioFilter from \"@/filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"@/filters/interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"@/model/AudioNodes\";\nimport AbstractAudioFilterWorklet from \"@/filters/interfaces/AbstractAudioFilterWorklet\";\nimport { FilterState } from \"@/model/FilterState\";\nimport { FilterSettings } from \"@/model/filtersSettings/FilterSettings\";\nimport Constants from \"@/model/Constants\";\nimport FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport { inject, injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class FilterManager extends AbstractAudioElement implements FilterManagerInterface {\n\n /** A list of filters */\n private filters: AbstractAudioFilter[] = [];\n\n /** The entrypoint filter */\n private _entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null = null;\n\n /** The current connected nodes */\n private _currentNodes: AudioFilterNodes | null = null;\n\n constructor(\n @multiInject(TYPES.Filters) filters: AbstractAudioFilter[],\n @inject(TYPES.EntryPointFilter) entryPointFilter: (AbstractAudioFilter & AudioFilterEntrypointInterface) | null\n ) {\n super();\n\n this.filters = filters;\n this._entryPointFilter = entryPointFilter;\n\n this.setup();\n }\n\n private setup() {\n for (const filter of this.filters) {\n filter.initializeDefaultSettings();\n }\n }\n\n addFilters(...filters: AbstractAudioFilter[]) {\n for (const filter of filters) {\n filter.initializeDefaultSettings();\n filter.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.filters.push(...filters);\n }\n\n getFiltersState(): FilterState {\n const state: FilterState = {};\n\n this.filters.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n getFiltersSettings(): Map {\n const settings = new Map();\n\n for (const filter of this.filters) {\n settings.set(filter.id, filter.getSettings());\n }\n\n return settings;\n }\n\n toggleFilter(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n filter.toggle();\n }\n }\n\n async changeFilterSettings(filterId: string, settings: FilterSettings) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n for (const key of Object.keys(settings)) {\n await filter.setSetting(key, settings[key]);\n }\n }\n }\n\n async resetFilterSettings(filterId: string) {\n const filter = this.filters.find(f => f.id === filterId);\n\n if (filter) {\n await filter.resetSettings();\n }\n }\n\n resetAllFiltersState() {\n this.filters.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async connectNodes(context: BaseAudioContext, buffer: AudioBuffer, keepCurrentInputOutput: boolean, isCompatibilityMode: boolean) {\n if (!this._entryPointFilter) {\n return;\n }\n\n let entrypointNode: AudioNode | null = null;\n\n if (keepCurrentInputOutput && this._currentNodes) {\n entrypointNode = this._currentNodes.input;\n } else {\n const entrypointNodes = await this._entryPointFilter.getEntrypointNode(context, buffer, !isCompatibilityMode);\n entrypointNode = entrypointNodes.input;\n }\n\n const intermediateNodes: AudioFilterNodes[] = [];\n let previousNode: AudioNode | undefined = entrypointNode;\n\n this.disconnectOldNodes(keepCurrentInputOutput);\n\n // Sort by filter order, then remove the disabled filter (but always keep the last/output filter)\n const filters = this.filters\n .sort((a, b) => a.order - b.order)\n .filter((filter, index) => filter !== this._entryPointFilter && (filter.isEnabled() || index >= this.filters.length - 1));\n\n for (const filter of filters) {\n const node = filter.getNode(context);\n\n if (previousNode) {\n previousNode.connect(node.input);\n }\n\n previousNode = node.output;\n intermediateNodes.push(node);\n }\n\n if (this._entryPointFilter) {\n this._entryPointFilter.updateState();\n }\n\n this._currentNodes = {\n input: entrypointNode!,\n output: previousNode!,\n intermediateNodes: intermediateNodes\n .filter(n => n.input != previousNode && n.output != previousNode &&\n n.input != entrypointNode && n.output != entrypointNode)\n };\n }\n\n disconnectOldNodes(keepCurrentOutput: boolean) {\n if (this._currentNodes) {\n this._currentNodes.input.disconnect();\n\n if (!keepCurrentOutput) {\n this._currentNodes.output.disconnect();\n }\n\n if (this._currentNodes.intermediateNodes) {\n for (const intermediate of this._currentNodes.intermediateNodes) {\n intermediate.input.disconnect();\n intermediate.output.disconnect();\n }\n }\n }\n }\n\n async initializeWorklets(context: BaseAudioContext) {\n for (const filter of this.filters) {\n if (filter.isWorklet()) {\n await (filter as AbstractAudioFilterWorklet).initializeWorklet(context);\n }\n }\n }\n\n getAddingTime() {\n let duration = 0;\n\n for (const filter of this.filters) {\n if (filter.isEnabled()) {\n duration += filter.getAddingTime();\n }\n }\n\n return duration;\n }\n\n setupTotalSamples(durationAudio: number, currentContext: AudioContext | null) {\n if (currentContext) {\n const totalSamples = durationAudio * currentContext.sampleRate;\n\n for (const filter of this.filters) {\n filter.totalSamples = totalSamples;\n }\n }\n }\n\n async resetFilterBuffers() {\n for (const filter of this.filters) {\n await filter.bufferFetcherReseted();\n }\n }\n\n get entrypointFilter() {\n return this._entryPointFilter;\n }\n\n get currentNodes() {\n return this._currentNodes;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.FILTER_MANAGER;\n }\n}\n","import { injectable, multiInject } from \"inversify\";\nimport { TYPES } from \"@/inversify.types\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport AbstractAudioRenderer from \"@/filters/interfaces/AbstractAudioRenderer\";\nimport { FilterState } from \"@/model/FilterState\";\nimport Constants from \"@/model/Constants\";\nimport RendererManagerInterface from \"./interfaces/RendererManagerInterface\";\n\n@injectable()\nexport default class RendererManager extends AbstractAudioElement implements RendererManagerInterface {\n\n /** A list of renderers */\n private renderers: AbstractAudioRenderer[] = [];\n\n constructor(\n @multiInject(TYPES.Renderers) renderers: AbstractAudioRenderer[] = []) {\n super();\n\n this.renderers = renderers;\n }\n\n addRenderers(...renderers: AbstractAudioRenderer[]) {\n for (const renderer of renderers) {\n renderer.injectDependencies(this.bufferFetcherService, this.bufferDecoderService, this.configService, this.eventEmitter);\n }\n\n this.renderers.push(...renderers);\n }\n\n getRenderersState(): FilterState {\n const state: FilterState = {};\n\n this.renderers.forEach(filter => {\n state[filter.id] = filter.isEnabled();\n });\n\n return state;\n }\n\n toggleRenderer(rendererId: string) {\n const renderer = this.renderers.find(f => f.id === rendererId);\n\n if (renderer) {\n renderer.toggle();\n }\n }\n\n resetAllRenderersState() {\n this.renderers.forEach(element => {\n if (element.isDefaultEnabled()) {\n element.enable();\n } else {\n element.disable();\n }\n });\n }\n\n async executeAudioRenderers(buffer: AudioBuffer, outputContext: AudioContext | OfflineAudioContext) {\n let currentBuffer = buffer;\n\n for (const renderer of this.renderers.sort((a, b) => a.order - b.order)) {\n if (renderer.isEnabled()) {\n currentBuffer = await renderer.renderAudio(outputContext, currentBuffer);\n }\n }\n\n return currentBuffer;\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.RENDERER_MANAGER;\n }\n}\n","export default function getRecorderWorker(workerBasePath?: string): Worker {\n return new Worker((workerBasePath ? workerBasePath : \"\") + \"RecorderWorker.js\");\n};\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { RecorderCallback, RecorderCallbacks } from \"../model/RecorderCallback\";\nimport type RecorderConfig from \"../model/RecorderConfig\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport RecorderWorkletMessage from \"../model/RecorderWorkletMessage\";\nimport utilFunctions from \"../utils/Functions\";\nimport getRecorderWorker from \"./getRecorderWorker\";\nimport RecorderInterface from \"./interfaces/RecorderInterface\";\n\n@injectable()\nexport class Recorder implements RecorderInterface {\n\n // Inline Worker\n private worker: Worker | null = null;\n private node: ScriptProcessorNode | AudioWorkletNode | null = null;\n private context: BaseAudioContext | null = null;\n\n private config: RecorderConfig = {\n bufferLen: 4096,\n sampleRate: 44100,\n numChannels: 2,\n mimeType: \"audio/wav\",\n workletBasePath: \"worklets/\",\n workerBasePath: \"workers/\",\n bitrate: Constants.DEFAULT_MP3_BITRATE,\n callback: () => { }\n };\n\n private callbacks: RecorderCallbacks = {\n getBuffer: [],\n exportWAV: [],\n exportMP3: []\n };\n\n recording = false;\n\n constructor(cfg: RecorderConfig) {\n Object.assign(this.config, cfg);\n }\n\n async setup(source: AudioNode) {\n if (this.node) { // Disconnect previous node\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n\n this.node.disconnect();\n }\n\n if (source) {\n this.context = source.context;\n\n await this.createRecorderNode();\n\n if (this.node && this.context) {\n source.connect(this.node);\n this.node.connect(this.context.destination); //this should not be necessary\n }\n }\n\n if (this.context && !this.worker) {\n this.worker = getRecorderWorker(this.config.workerBasePath);\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"init\",\n config: {\n sampleRate: this.context.sampleRate,\n numChannels: this.config.numChannels,\n bitrate: this.config.bitrate\n }\n });\n\n this.worker.onmessage = (e: RecorderWorkerMessage) => {\n let callbacks = null;\n\n switch (e.data.command) {\n case \"getBuffer\":\n callbacks = this.callbacks.getBuffer;\n break;\n case Constants.EXPORT_WAV_COMMAND:\n callbacks = this.callbacks.exportWAV;\n break;\n case Constants.EXPORT_MP3_COMMAND:\n callbacks = this.callbacks.exportMP3;\n break;\n }\n\n if (callbacks) {\n const cb = callbacks.pop();\n if (typeof cb == \"function\") {\n (cb as RecorderCallback)(e.data.data);\n }\n }\n };\n }\n }\n }\n\n\n private async createRecorderNode() {\n if (this.context) {\n if (utilFunctions.isAudioWorkletCompatible(this.context) && Constants.ENABLE_RECORDER_AUDIO_WORKLET) {\n try {\n await this.createRecorderWorklet();\n } catch(e) {\n this.createRecorderScriptProcessorNode();\n }\n } else {\n this.createRecorderScriptProcessorNode();\n }\n }\n }\n\n private async createRecorderWorklet() {\n if (this.context) {\n await this.context.audioWorklet.addModule(this.config.workletBasePath + Constants.WORKLET_PATHS.RECORDER_WORKLET);\n\n this.node = new AudioWorkletNode(this.context, Constants.WORKLET_NAMES.RECORDER_WORKLET);\n\n if (this.node && this.node.port) {\n const numChannelParameter = this.node.parameters.get(\"numChannels\");\n\n if(numChannelParameter) {\n numChannelParameter.value = this.config.numChannels;\n numChannelParameter.setValueAtTime(this.config.numChannels, 0);\n }\n\n this.node.port.onmessage = (e: MessageEvent) => {\n if (this.worker && e.data.command == \"record\" && e.data.buffer.length > 0) {\n this.worker.postMessage({\n command: \"record\",\n buffer: e.data.buffer\n });\n }\n };\n }\n }\n }\n\n private createRecorderScriptProcessorNode() {\n if (this.context) {\n this.node = (this.context.createScriptProcessor).call(this.context,\n this.config.bufferLen, this.config.numChannels, this.config.numChannels);\n\n this.node.onaudioprocess = (e) => {\n if (!this.recording) return;\n\n const buffer = [];\n for (let channel = 0; channel < this.config.numChannels; channel++) {\n buffer.push(e.inputBuffer.getChannelData(channel));\n }\n\n if (this.worker) {\n this.worker.postMessage({\n command: \"record\",\n buffer: buffer\n });\n }\n };\n }\n }\n\n record() {\n this.recording = true;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"record\");\n }\n }\n\n stop() {\n this.recording = false;\n\n if (this.node instanceof AudioWorkletNode) {\n this.node.port.postMessage(\"stop\");\n }\n }\n\n clear() {\n if (this.worker) {\n this.worker.postMessage({ command: \"clear\" });\n }\n }\n\n kill() {\n this.clear();\n this.stop();\n\n if (this.worker) {\n this.worker.terminate();\n }\n }\n\n getBuffer(cb: RecorderCallback) {\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.getBuffer.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({ command: \"getBuffer\" });\n }\n }\n\n exportWAV(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportWAV.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_WAV_COMMAND,\n type: mimeType\n });\n }\n }\n\n exportMP3(cb: RecorderCallback, mimeType?: string) {\n mimeType = mimeType || this.config.mimeType;\n cb = cb || this.config.callback;\n if (!cb) throw new Error(\"Callback not set\");\n\n this.callbacks.exportMP3.push(cb);\n\n if (this.worker) {\n this.worker.postMessage({\n command: Constants.EXPORT_MP3_COMMAND,\n type: mimeType\n });\n }\n } \n};\n\nexport default Recorder;\n","import { inject, injectable } from \"inversify\";\nimport { TYPES } from \"../inversify.types\";\nimport { Recorder } from \"../recorder/Recorder\";\nimport { EventType } from \"@/model/EventTypeEnum\";\nimport AbstractAudioElement from \"@/filters/interfaces/AbstractAudioElement\";\nimport SaveBufferOptions from \"@/model/SaveBufferOptions\";\nimport Constants from \"@/model/Constants\";\nimport RecorderWorkerMessage from \"../model/RecorderWorkerMessage\";\nimport getRecorderWorker from \"../recorder/getRecorderWorker\";\nimport SaveBufferManagerInterface from \"./interfaces/SaveBufferManagerInteface\";\nimport type BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport type FilterManagerInterface from \"./interfaces/FilterManagerInterface\";\nimport AudioContextManagerInterface from \"./interfaces/AudioContextManagerInterface\";\nimport utilFunctions from \"@/utils/Functions\";\n\n@injectable()\nexport default class SaveBufferManager extends AbstractAudioElement implements SaveBufferManagerInterface {\n\n /** The filter manager */\n private filterManager: FilterManagerInterface | undefined;\n\n /** The context manager */\n private contextManager: AudioContextManagerInterface | undefined;\n\n /** The audio player */\n private bufferPlayer: BufferPlayerInterface | undefined;\n\n /** If we are currently processing and downloading the buffer */\n private savingBuffer = false;\n /** Callback used when saving audio */\n private playingStoppedCallback: (() => void) | null = null;\n\n constructor(\n @inject(TYPES.FilterManager) filterManager: FilterManagerInterface,\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined,\n @inject(TYPES.BufferPlayer) bufferPlayer: BufferPlayerInterface\n ) {\n super();\n\n this.contextManager = contextManager;\n this.bufferPlayer = bufferPlayer;\n this.filterManager = filterManager;\n\n // Callback called just before starting audio player\n this.setup();\n }\n\n private setup() {\n if (this.bufferPlayer) {\n // Callback called when playing is finished\n this.bufferPlayer.on(EventType.PLAYING_FINISHED, () => {\n if (this.savingBuffer && this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n }\n }\n\n async saveBuffer(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n if (this.savingBuffer) {\n throw new Error(\"The buffer is currently saving\");\n }\n\n if (!this.bufferPlayer) {\n throw new Error(\"No buffer player was found\");\n }\n\n this.savingBuffer = true;\n\n let savingResult = false;\n\n if (!this.bufferPlayer.compatibilityMode) {\n savingResult = await this.saveBufferDirect(renderedBuffer, options);\n } else {\n savingResult = await this.saveBufferCompatibilityMode(options);\n }\n\n this.savingBuffer = false;\n\n return savingResult;\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is disabled\n * @param renderedBuffer The rendered buffer to save\n * @param options The save options\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferDirect(renderedBuffer: AudioBuffer | null, options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!renderedBuffer || (this.contextManager && !this.contextManager.currentContext)) {\n return reject(\"No rendered buffer or AudioContext not initialized\");\n }\n\n const worker = getRecorderWorker(this.configService?.getWorkerBasePath());\n\n if (worker) {\n const buffer: Float32Array[] = [];\n\n for (let i = 0; i < renderedBuffer.numberOfChannels; i++) {\n buffer.push(renderedBuffer.getChannelData(i));\n }\n\n worker.onmessage = (e: RecorderWorkerMessage) => {\n if (e.data.command == Constants.EXPORT_WAV_COMMAND || e.data.command == Constants.EXPORT_MP3_COMMAND) {\n this.downloadAudioBlob(e.data.data, options);\n }\n\n worker.terminate();\n this.savingBuffer = false;\n resolve(true);\n };\n\n worker.postMessage({\n command: Constants.INIT_COMMAND,\n config: {\n sampleRate: renderedBuffer.sampleRate,\n numChannels: 2,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n }\n });\n\n worker.postMessage({\n command: Constants.RECORD_COMMAND,\n buffer\n });\n\n worker.postMessage({\n command: options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\" ? Constants.EXPORT_MP3_COMMAND : Constants.EXPORT_WAV_COMMAND,\n type: Constants.AUDIO_WAV\n });\n }\n });\n }\n\n /**\n * Save the rendered audio to a buffer, when compatibility mode is enabled\n * @param options The save options - see SaveBufferOptions\n * @returns A promise resolved when the audio buffer is downloaded to the user\n */\n private saveBufferCompatibilityMode(options?: SaveBufferOptions): Promise {\n return new Promise((resolve, reject) => {\n if (!this.bufferPlayer) {\n return reject(\"No buffer player found\");\n }\n\n this.bufferPlayer.start().then(() => {\n if (!this.configService) {\n return reject(\"No config service found\");\n }\n\n if (!this.filterManager) {\n return reject(\"No filter manager found\");\n }\n\n const rec = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: options?.format == \"mp3\" ? Constants.AUDIO_MP3 : Constants.AUDIO_WAV,\n bitrate: options?.bitrate || Constants.DEFAULT_MP3_BITRATE\n });\n\n rec.setup(this.filterManager.currentNodes!.output).then(() => {\n rec.record();\n\n this.playingStoppedCallback = () => {\n rec.kill();\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n\n if (this.playingStoppedCallback) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n }\n\n resolve(true);\n };\n\n const finishedCallback = () => {\n if (this.playingStoppedCallback && this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n\n rec.stop();\n\n const downloadBlobCallback = (blob: Blob) => {\n this.downloadAudioBlob(blob, options);\n\n this.savingBuffer = false;\n\n if (this.eventEmitter) {\n this.eventEmitter.off(EventType.PLAYING_FINISHED, finishedCallback);\n }\n\n rec.kill();\n\n resolve(true);\n };\n\n if (options?.format === \"mp3\" || Constants.DEFAULT_SAVE_FORMAT === \"mp3\") {\n rec.exportMP3(downloadBlobCallback);\n } else {\n rec.exportWAV(downloadBlobCallback);\n }\n };\n\n if (this.eventEmitter) {\n this.eventEmitter.on(EventType.PLAYING_FINISHED, finishedCallback);\n this.eventEmitter.on(EventType.PLAYING_STOPPED, this.playingStoppedCallback);\n }\n });\n });\n });\n }\n\n /**\n * Download an audio Blob\n * @param blob The blob\n * @param options The save options - see SaveBufferOptions\n */\n private downloadAudioBlob(blob: Blob, options?: SaveBufferOptions) {\n utilFunctions.forceDownload(blob, \"audio-\" + new Date().toISOString() + \".\" + (options?.format || Constants.DEFAULT_SAVE_FORMAT));\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.SAVE_BUFFER_MANAGER;\n }\n}\n","/*\n * Copyright (C) 2019-2024 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The audio buffer player\n// Used to play the audio buffer, with time controls, pause/play, stop and loop\nimport { EventType } from \"../model/EventTypeEnum\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { TYPES } from \"../inversify.types\";\nimport { inject, injectable } from \"inversify\";\nimport BufferPlayerInterface from \"./interfaces/BufferPlayerInterface\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n// Also used in compatibility mode (which doesn't use audio buffer) with less functions (no time control)\n@injectable()\nexport default class BufferPlayer extends AbstractAudioElement implements BufferPlayerInterface {\n\n private _contextManager: AudioContextManagerInterface | undefined | null;\n\n private buffer: AudioBuffer | null = null;\n private source: AudioBufferSourceNode | null = null;\n currentTime = 0;\n displayTime = 0;\n duration = 0;\n private intervals: number[] = [];\n playing = false;\n loop = false;\n speedAudio = 1;\n private onBeforePlayingCallback: () => void = async () => { };\n\n compatibilityMode = false;\n currentNode: AudioNode | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | undefined | null) {\n super();\n\n this._contextManager = contextManager;\n }\n\n init(direct?: boolean) {\n this.playing = false;\n\n if (this._contextManager && this._contextManager.currentContext) {\n this._contextManager.currentContext.resume();\n\n if (!this.compatibilityMode && this.buffer) {\n if (this.source != null && !direct) this.source.disconnect();\n this.source = this._contextManager.currentContext.createBufferSource();\n this.source.buffer = this.buffer;\n this.duration = this.buffer.duration * this.speedAudio;\n this.source.connect(this._contextManager.currentContext.destination);\n }\n }\n\n this.updateInfos();\n }\n\n loadBuffer(buffer: AudioBuffer) {\n this.compatibilityMode = false;\n this.reset();\n this.buffer = buffer;\n this.init();\n }\n\n setCompatibilityMode(currentNode: AudioNode, duration?: number) {\n this.compatibilityMode = true;\n this.reset();\n this.init();\n\n if (duration != null) {\n this.duration = duration * this.speedAudio;\n }\n\n this.currentNode = currentNode;\n this.updateInfos();\n }\n\n reset(direct?: boolean) {\n this.clearIntervals();\n\n this.currentTime = 0;\n this.displayTime = 0;\n\n if (!direct) {\n this.stop();\n }\n }\n\n stop() {\n this.clearIntervals();\n\n if (this.source != undefined && this.source != null && this.playing) {\n this.source.stop(0);\n this.playing = false;\n }\n\n if (this.currentNode) {\n this.currentNode.disconnect();\n\n if (this.compatibilityMode) {\n this.currentTime = 0;\n this.displayTime = 0;\n }\n }\n\n this.eventEmitter?.emit(EventType.PLAYING_STOPPED);\n this.updateInfos();\n }\n\n /**\n * Clear old intervals\n */\n private clearIntervals() {\n for (const interval of this.intervals) {\n clearInterval(interval);\n }\n\n this.intervals = [];\n }\n\n async start(direct?: boolean) {\n if (this.source || this.compatibilityMode) {\n if (!direct) {\n this.stop();\n }\n\n this.init(direct);\n\n await this.onBeforePlayingCallback();\n\n this.eventEmitter?.emit(EventType.PLAYING_STARTED);\n\n if (!this.compatibilityMode) {\n if (this.source) {\n this.source.start(0, direct ? 0 : this.currentTime / this.speedAudio);\n this.playing = true;\n } else {\n return;\n }\n } else {\n if (this.currentNode && this._contextManager && this._contextManager.currentContext) {\n this.currentNode.connect(this._contextManager.currentContext.destination);\n } else {\n return;\n }\n }\n\n let startTime = performance.now();\n\n this.intervals.push(window.setInterval(() => {\n const timeNow = performance.now();\n const nextTime = timeNow - startTime;\n startTime = timeNow;\n\n this.currentTime += (nextTime / 1000) * this.speedAudio;\n this.displayTime = this.currentTime;\n\n if (this.currentTime > this.duration) {\n if (this.loop) {\n if (!this.compatibilityMode) {\n this.reset(direct);\n this.start();\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n }\n } else {\n this.eventEmitter?.emit(EventType.PLAYING_FINISHED);\n this.reset(direct);\n }\n } else {\n this.updateInfos();\n }\n }, 100));\n }\n }\n\n async playDirect() {\n if (!this.compatibilityMode) {\n this.start(true);\n } else {\n // Play direct is not possible when compatibility mode is enabled\n this.start(false);\n }\n }\n\n pause() {\n this.stop();\n }\n\n /** Send an event to update the informations of this player */\n private updateInfos() {\n this.eventEmitter?.emit(EventType.PLAYING_UPDATE);\n }\n\n setTimePercent(percent: number) {\n if (!this.compatibilityMode) {\n this.currentTime = Math.round(this.duration * (percent / 100));\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n setTime(time: number) {\n if (!this.compatibilityMode) {\n this.currentTime = time;\n this.displayTime = this.currentTime;\n\n if (this.playing) {\n this.pause();\n this.start();\n } else {\n this.updateInfos();\n }\n }\n }\n\n onBeforePlaying(callback: () => void) {\n this.onBeforePlayingCallback = callback;\n }\n\n toggleLoop() {\n this.loop = !this.loop;\n }\n\n on(event: string, callback: EventEmitterCallback) {\n if (this.eventEmitter) {\n this.eventEmitter.on(event, callback);\n }\n }\n\n get currentTimeDisplay() {\n return (\"0\" + Math.trunc(this.displayTime / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.displayTime % 60)).slice(-2);\n }\n\n get maxTimeDisplay() {\n return (\"0\" + Math.trunc(this.duration / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.duration % 60)).slice(-2);\n }\n\n get percent() {\n return (100 - Math.round((this.duration - this.displayTime) / this.duration * 100));\n }\n\n get remainingTimeDisplay() {\n return (\"0\" + Math.trunc((this.duration - this.displayTime) / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc((this.duration - this.displayTime) % 60)).slice(-2);\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n return Constants.BUFFER_PLAYER;\n }\n}\n","import { EventType } from \"../model/EventTypeEnum\";\nimport type { ConfigService } from \"./interfaces/ConfigService\";\nimport utilFunctions from \"../utils/Functions\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport BufferFetcherServiceInterface from \"./interfaces/BufferFetcherServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferFetcherService implements BufferFetcherServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private buffers: Map = new Map();\n private bufferErrors: string[] = [];\n private eventEmitter: EventEmitterInterface | null;\n private configService: ConfigService | null = null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.ConfigService) configService: ConfigService,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n this.configService = configService;\n }\n\n async fetchBuffer(bufferURI: string, force?: boolean) {\n const realBufferURI = (this.configService ? this.configService.getSoundBasePath() : \"\") + bufferURI;\n\n if(this.buffers.get(this.getKeyFromLocation(realBufferURI)) != null && !force) {\n return;\n }\n\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS, realBufferURI);\n\n try {\n const response = await fetch(realBufferURI);\n\n if(!response.ok) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n } else {\n const arrayBuffer = await response.arrayBuffer();\n\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await this.contextManager.currentContext.decodeAudioData(arrayBuffer);\n this.buffers.set(this.getKeyFromLocation(realBufferURI), utilFunctions.decodeBuffer(this.contextManager.currentContext, buffer));\n }\n }\n \n this.eventEmitter?.emit(EventType.FINISHED_FETCHING_BUFFERS, realBufferURI);\n } catch(e) {\n this.bufferErrors.push(realBufferURI);\n this.eventEmitter?.emit(EventType.FETCHING_BUFFERS_ERROR, realBufferURI);\n throw EventType.FETCHING_BUFFERS_ERROR;\n }\n }\n\n async fetchAllBuffers(bufferURIs: string[]) {\n for(const uri of bufferURIs) {\n await this.fetchBuffer(uri);\n }\n }\n\n getAudioBuffer(filename: string): AudioBuffer | undefined {\n return this.buffers.get(this.getKeyFromLocation(filename));\n }\n\n async getOrFetchAudioBuffer(filename: string): Promise {\n if(this.getAudioBuffer(filename) == null) {\n await this.fetchBuffer(filename);\n }\n\n return this.getAudioBuffer(filename);\n }\n\n getDownloadedBuffersList(): string[] {\n return Array.from(this.buffers.keys());\n }\n\n private getKeyFromLocation(location: string) {\n return location.substring(location.lastIndexOf(\"/\") + 1);\n }\n\n reset() {\n this.buffers.clear();\n }\n}\n","import type AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport EventEmitter from \"../utils/EventEmitter\";\nimport utilFunctions from \"../utils/Functions\";\nimport BufferDecoderServiceInterface from \"./interfaces/BufferDecoderServiceInterface\";\nimport { inject, injectable } from \"inversify\";\nimport type EventEmitterInterface from \"@/utils/interfaces/EventEmitterInterface\";\nimport { TYPES } from \"@/inversify.types\";\n\n@injectable()\nexport default class BufferDecoderService implements BufferDecoderServiceInterface {\n\n private contextManager: AudioContextManagerInterface;\n private eventEmitter: EventEmitterInterface | null;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface,\n @inject(TYPES.EventEmitter) eventEmitter?: EventEmitterInterface) {\n this.contextManager = contextManager;\n this.eventEmitter = eventEmitter || new EventEmitter();\n }\n\n async decodeBufferFromFile(file: File): Promise {\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODING_AUDIO_FILE);\n }\n\n try {\n if (this.contextManager && this.contextManager.currentContext) {\n const buffer = await utilFunctions.loadAudioBuffer(this.contextManager.currentContext, file);\n \n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n }\n \n return buffer;\n }\n } catch (e) {\n console.error(e);\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.DECODED_AUDIO_FILE);\n this.eventEmitter.emit(EventType.ERROR_DECODING_AUDIO_FILE);\n }\n }\n\n return null;\n }\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\n\nexport default abstract class AbstractAudioRenderer extends AbstractAudioElement {\n\n /** Render an AudioBuffer based on another input AudioBuffer */\n abstract renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise;\n}\n","import AbstractAudioElement from \"./AbstractAudioElement\";\nimport { AudioFilterNodes } from \"../../model/AudioNodes\";\nimport { FilterSettingValue, FilterSettings } from \"../../model/filtersSettings/FilterSettings\";\n\nexport default abstract class AbstractAudioFilter extends AbstractAudioElement {\n\n /** The default settings */\n private defaultSettings: FilterSettings | null = null;\n\n /** Total sample of the input audio buffer */\n protected _totalSamples = 0;\n\n /** Return a input and output AudioNode of the filter */\n abstract getNode(context: BaseAudioContext): AudioFilterNodes;\n\n /** Return an object with current settings of this filter */\n abstract getSettings(): FilterSettings;\n\n /** Set a filter setting */\n abstract setSetting(settingId: string, value: FilterSettingValue): Promise;\n\n /** Get the amount of time this filter add to the audio */\n getAddingTime(): number {\n return 0;\n }\n\n /** Store the default settings */\n public initializeDefaultSettings() {\n this.defaultSettings = this.getSettings();\n }\n\n /** Returns the default settings of this filter */\n public getDefaultSettings() {\n return this.defaultSettings;\n }\n\n /** Reset the default settings of this filter */\n public async resetSettings() {\n if (this.defaultSettings) {\n for (const key in this.defaultSettings) {\n if (this.defaultSettings && typeof (this.defaultSettings[key]) !== \"undefined\") {\n await this.setSetting(key, this.defaultSettings[key]);\n }\n }\n }\n }\n\n /** Return if the current filter use an audio worklet */\n public isWorklet() {\n return false;\n }\n\n /**\n * Called when the buffer fetcher was reseted\n * @returns boolean\n */\n public async bufferFetcherReseted(): Promise {\n return false;\n }\n\n set totalSamples(value: number) {\n this._totalSamples = value;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * This class is a polyfill for the standard web AudioParam class used by worklets\n */\nexport default class AudioParamPolyfill implements AudioParam {\n private _value: number = 0;\n private _minValue: number = 0;\n private _maxValue: number = Number.MAX_SAFE_INTEGER;\n private _defaultValue: number = 0;\n private context: BaseAudioContext | null = null;\n automationRate: AutomationRate = \"a-rate\";\n\n constructor(context: BaseAudioContext, defaultValue?: number) {\n this._defaultValue = defaultValue !== undefined ? defaultValue : 0;\n this._value = this._defaultValue;\n this.context = context;\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(newValue: number) {\n this._value = Math.max(this._minValue, Math.min(this._maxValue, newValue));\n }\n\n get minValue(): number {\n return this._minValue;\n }\n\n get maxValue(): number {\n return this._maxValue;\n }\n\n get defaultValue(): number {\n return this._defaultValue;\n }\n\n setValueAtTime(value: number, startTime: number): AudioParam {\n console.warn(\"setValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n linearRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"linearRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n exponentialRampToValueAtTime(value: number, endTime: number): AudioParam {\n console.warn(\"exponentialRampToValueAtTime used with AudioParamPolyfill, is not fully compatible with standard AudioParam\");\n this.value = value;\n return new AudioParamPolyfill(this.context!, value);\n }\n\n cancelAndHoldAtTime(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n cancelScheduledValues(cancelTime: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n\n setValueCurveAtTime(values: unknown, startTime: unknown, duration: unknown): AudioParam {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\nimport AudioParamPolyfill from \"./AudioParamPolyfill\";\nimport Functions from \"../utils/Functions\";\n\n/**\n * This class convert an audio worklet processor node to a script processor node\n * automagically. Highly experimental, and might not work with some WorkletProcessor\n */\nexport default class WorkletScriptProcessorNodeAdapter {\n\n private workletProcessor: SimpleAudioWorkletProcessor;\n private _parameters = new Map();\n private _port: MessagePort | null = null;\n private _scriptProcessorNode: ScriptProcessorNode | null;\n private currentContext: BaseAudioContext | null = null;\n\n constructor(context: BaseAudioContext, node: SimpleAudioWorkletProcessor, bufferSize?: number) {\n this.workletProcessor = node;\n this.currentContext = context;\n\n // Create a ScriptProcessorNode with the same number of input and output channels\n this._scriptProcessorNode = context.createScriptProcessor(\n bufferSize,\n 2,\n 2\n );\n\n this.setupPort();\n this.setupProcessor();\n this.setupWorkletScope(context);\n }\n\n private setupPort(): void {\n const messageChannel = new MessageChannel();\n\n messageChannel.port1.onmessage = (ev) => {\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.postMessage(ev.data);\n }\n };\n\n if(this.workletProcessor && this.workletProcessor.port2) {\n this.workletProcessor.port2.onmessage = (ev) => {\n messageChannel.port1.postMessage(ev.data);\n };\n }\n\n this._port = messageChannel.port2;\n }\n\n private setupProcessor() {\n if(!this._scriptProcessorNode) {\n return;\n }\n\n this._scriptProcessorNode.onaudioprocess = (ev: AudioProcessingEvent) => {\n if(this.workletProcessor) {\n const inputArray = [Functions.convertAudioBufferToFloat32Array(ev.inputBuffer)];\n const ouputArray = [Functions.convertAudioBufferToFloat32Array(ev.outputBuffer)];\n\n const records: [string, Float32Array][] = [];\n\n for (const [key, value] of this._parameters.entries()) {\n records.push([key, Functions.convertAudioParamToFloat32Array(value, 1)]);\n }\n\n const recordsMap: Record = Object.fromEntries(records);\n \n this.workletProcessor.process(inputArray, ouputArray, recordsMap);\n }\n };\n\n const descriptors = this.workletProcessor.defaultParameterDescriptors;\n\n if(descriptors) {\n descriptors.forEach(descriptor => {\n if(this.currentContext) {\n this._parameters.set(descriptor.name, new AudioParamPolyfill(this.currentContext, descriptor.defaultValue));\n }\n });\n }\n }\n\n private setupWorkletScope(context: BaseAudioContext) {\n if(typeof(window) !== \"undefined\") {\n window.sampleRate = context.sampleRate;\n }\n }\n\n get port() {\n return this._port;\n }\n\n get parameters(): AudioParamMap {\n return this._parameters;\n }\n\n get node() {\n return this._scriptProcessorNode;\n }\n\n get context() {\n return this._scriptProcessorNode?.context;\n }\n}\n","import SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\n/**\n * Polyfill for registerProcessor method used in AudioWorklets\n */\nexport default class RegisterProcessorPolyfill {\n\n private static processorsMap = new Map();\n\n static registerProcessor(processorName: string, processorClass: typeof SimpleAudioWorkletProcessor) {\n RegisterProcessorPolyfill.processorsMap.set(processorName, processorClass);\n }\n\n static getProcessor(processorName: string): SimpleAudioWorkletProcessor | null {\n const processor = RegisterProcessorPolyfill.processorsMap.get(processorName);\n\n if(processor) {\n return new processor();\n }\n\n return null;\n }\n};\n","/**\n * This class is the standard AudioWorkletProcessor interface\n */\nexport interface AudioWorkletProcessorInterface {\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean;\n get parameters(): AudioParamMap;\n get parameterDescriptors(): AudioParamMap;\n messageProcessor?: (event: MessageEvent) => void;\n}\n\ntype ParameterDescriptors = {\n name: string;\n defaultValue: number;\n}[];\n\n/**\n * This class is a polyfill for the AudioWorkletProcessor interface\n */\nexport default class SimpleAudioWorkletProcessor implements AudioWorkletProcessorInterface {\n private messageChannel: MessageChannel | null = null;\n messageProcessor?: ((event: MessageEvent) => void) | undefined;\n\n constructor() {\n this.messageChannel = new MessageChannel();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n return true;\n }\n\n get port(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port1;\n }\n\n get port2(): MessagePort | null {\n return this.messageChannel && this.messageChannel.port2;\n }\n\n get parameters(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get parameterDescriptors(): AudioParamMap {\n throw new Error(\"Method not implemented.\");\n }\n\n get defaultParameterDescriptors(): ParameterDescriptors {\n return [];\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RegisterProcessorPolyfill from \"./RegisterProcessorPolyfill\";\nimport SimpleAudioWorkletProcessor from \"./SimpleAudioWorkletProcessor\";\n\nif(typeof(window) !== \"undefined\" && !(\"AudioWorkletProcessor\" in window)) {\n (window as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (window as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n\nif(typeof(global) !== \"undefined\" && !(\"AudioWorkletProcessor\" in global)) {\n (global as any).AudioWorkletProcessor = SimpleAudioWorkletProcessor;\n (global as any).registerProcessor = RegisterProcessorPolyfill.registerProcessor;\n}\n","import WorkletScriptProcessorNodeAdapter from \"../../workletPolyfill/WorkletScriptProcessorNodeAdapter\";\nimport AbstractAudioFilter from \"./AbstractAudioFilter\";\nimport Constants from \"../../model/Constants\";\nimport \"../../workletPolyfill/AudioWorkletProcessorPolyfill\";\nimport RegisterProcessorPolyfill from \"../../workletPolyfill/RegisterProcessorPolyfill\";\nimport utilFunctions from \"../../utils/Functions\";\n\nexport default abstract class AbstractAudioFilterWorklet extends AbstractAudioFilter {\n\n protected currentWorkletNode: AudioWorkletNode | WorkletScriptProcessorNodeAdapter | null = null;\n\n protected fallbackToScriptProcessor = false;\n\n protected keepCurrentNodeIfPossible = false;\n\n /**\n * Return the worklet name (as registered with method registerProcessor)\n */\n abstract get workletName(): string;\n\n /**\n * Return the path to worklet file\n */\n abstract get workletPath(): string;\n\n /**\n * Receive event from the worklet\n */\n abstract receiveEvent(message: MessageEvent): void;\n\n /**\n * Initialize the audio worklet by loading the module\n * @param audioContext The audio context\n */\n async initializeWorklet(audioContext: BaseAudioContext): Promise {\n this.stop();\n\n if (!utilFunctions.isAudioWorkletCompatible(audioContext)) {\n console.error(\"Audio Worklets not supported on this browser. Fallback to ScriptProcessor\");\n this.fallbackToScriptProcessor = true;\n return;\n }\n\n const workletPath = (this.configService ? this.configService.getWorkletBasePath() : \"\") + this.workletPath;\n\n await audioContext.audioWorklet.addModule(workletPath)\n .catch(e => {\n console.error(`Error when loading Worklet (${workletPath}) for filter ${this.id}. Fallback to ScriptProcessor. Exception:`, e);\n this.fallbackToScriptProcessor = true;\n });\n }\n\n /**\n * This method checks if audio worklet are enabled\n * @param audioContext \n */\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n /**\n * Initialize the AudioWorkletNode or fallback to ScriptProcessorNode\n * @param context The audio context\n * @param workletName The worklet name\n */\n private initializeNode(context: BaseAudioContext, workletName: string) {\n if (this.isAudioWorkletEnabled() && !this.fallbackToScriptProcessor) {\n // Standard Audio Worklet\n this.currentWorkletNode = new AudioWorkletNode(context, workletName);\n } else {\n // Fallback to ScriptProcessorNode (polyfill)\n const processor = RegisterProcessorPolyfill.getProcessor(workletName);\n\n if (processor) {\n this.currentWorkletNode = new WorkletScriptProcessorNodeAdapter(context, processor, this.configService!.getBufferSize());\n } else {\n throw new Error(`No processor registered with name ${workletName} for filter ${this.id} to use the fallback/polyfill for AudioWorklet. Make sure you have created the class.`);\n }\n }\n\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.onmessage = message => this.receiveEvent(message);\n }\n }\n\n /**\n * Apply current settings to the audio worklet node.\n * Uses the getSettings method to extract the settings.\n */\n protected applyCurrentSettingsToWorklet() {\n if (this.currentWorkletNode && this.currentWorkletNode.parameters) {\n const currentSettings = this.getSettings();\n\n for (const settingKey of Object.keys(currentSettings)) {\n const settingFromWorklet = this.currentWorkletNode.parameters.get(settingKey);\n\n if (settingFromWorklet) {\n settingFromWorklet.value = currentSettings[settingKey] as number;\n settingFromWorklet.setValueAtTime(currentSettings[settingKey] as number, 0);\n }\n }\n }\n }\n\n /** Default implementation for GetNode - AbstractAudioFilterWorklet */\n getNode(context: BaseAudioContext) {\n if (!this.keepCurrentNodeIfPossible || !this.currentWorkletNode\n || this.currentWorkletNode.context != context) {\n this.stop();\n this.initializeNode(context, this.workletName);\n }\n\n this.applyCurrentSettingsToWorklet();\n this.setEnabled(this.isEnabled());\n\n if (this.currentWorkletNode) {\n if (this.currentWorkletNode instanceof WorkletScriptProcessorNodeAdapter) {\n return {\n input: this.currentWorkletNode.node!,\n output: this.currentWorkletNode.node!,\n };\n } else {\n return {\n input: this.currentWorkletNode,\n output: this.currentWorkletNode,\n };\n }\n }\n\n throw new Error(\"Worklet node has not yet been created\");\n }\n\n /**\n * Stop the current worklet node. The worklet need to respond to \"stop\" events.\n */\n stop() {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(\"stop\");\n this.currentWorkletNode.port.onmessage = null;\n }\n\n this.currentWorkletNode = null;\n }\n\n /**\n * Pass the current disabled/enabled state to the worklet.\n * The worklet need to respond to \"enable\"/\"disable\" events.\n * @param state The current disabled/enabled state\n */\n setEnabled(state: boolean): void {\n if (this.currentWorkletNode && this.currentWorkletNode.port) {\n this.currentWorkletNode.port.postMessage(state ? \"enable\" : \"disable\");\n }\n\n super.setEnabled(state);\n }\n\n public isWorklet(): boolean {\n return true;\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass BitCrusherProcessor extends AudioWorkletProcessor {\n private stopped = false;\n private phaser: number[] | null = null;\n private last: number[] | null = null;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"bits\", defaultValue: 16 },\n { name: \"normFreq\", defaultValue: 0.9 },\n ];\n }\n\n get defaultParameterDescriptors() {\n return BitCrusherProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n const step = 2 * Math.pow(1 / 2, parameters.bits[0]);\n const currentNormFreq = (1 - parameters.normFreq[0]) / (sampleRate / 48000);\n\n if (this.last == null) {\n this.last = new Array(input.length).fill(0);\n }\n\n if (this.phaser == null) {\n this.phaser = new Array(input.length).fill(0);\n }\n\n if (input && input[0]) {\n const blockSize = input[0].length;\n\n for (let channel = 0; channel < input.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp && out) {\n for (let i = 0; i < blockSize; i++) {\n this.phaser[channel] += currentNormFreq;\n\n if (this.phaser[channel] >= 1.0) {\n this.phaser[channel] -= 1.0;\n this.last[channel] = step * Math.floor((inp[i] * (1 / step)) + 0.5);\n }\n\n out[i] = this.last[channel];\n }\n }\n }\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n this.phaser = null;\n this.last = null;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.BITCRUSHER, BitCrusherProcessor);\n","export default class DelayBuffer {\n private _array: Float32Array = new Float32Array();\n private n: number = 0;\n private length: number = 0;\n private readPointer: number = 0;\n private writePointer: number = 0;\n\n constructor(n: number) {\n this.n = Math.floor(n);\n this.init();\n }\n\n init() {\n this._array = new Float32Array(2 * this.n);\n this.length = this._array.length;\n this.readPointer = 0;\n this.writePointer = this.n - 1;\n this._array.fill(0);\n }\n\n read() {\n const value = this._array[this.readPointer % this.length];\n this.readPointer = (this.readPointer + 1) % this.length;\n return value;\n }\n\n push(v: number) {\n this._array[this.writePointer % this.length] = v;\n this.writePointer = (this.writePointer + 1) % this.length;\n }\n\n reset() {\n this.init();\n }\n\n clear() {\n this._array = new Float32Array();\n this.length = 0;\n this.readPointer = 0;\n this.writePointer = 0;\n }\n\n sum() {\n return this._array.reduce((a, b) => a + b, 0);\n }\n}\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// Source: https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/ (https://web.archive.org/web/20220519100003/https://webaudiotech.com/2016/01/21/should-your-web-audio-app-have-a-limiter/)\n// Original code: https://webaudiotech.com/sites/limiter_comparison/limiter.js\n// Additions by Eliastik (eliastiksofts.com): Stereo and multi-channel support, code simplified in one object class (Limiter), converted into AudioWorklet\nimport Constants from \"../../model/Constants\";\nimport DelayBuffer from \"../../utils/DelayBuffer\";\n\nclass LimiterProcessor extends AudioWorkletProcessor {\n private delayBuffer: DelayBuffer[] = [];\n private envelopeSample = 0;\n private stopped = false;\n private disabled = false;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"reset\") {\n this.reset();\n } else if (event.data == \"stop\") {\n this.stop();\n } else if (event.data == \"disable\") {\n this.disabled = true;\n } else if (event.data == \"enable\") {\n this.disabled = false;\n }\n };\n }\n\n static get parameterDescriptors() {\n return [\n { name: \"preGain\", defaultValue: 0 },\n { name: \"postGain\", defaultValue: 0 },\n { name: \"attackTime\", defaultValue: 0 },\n { name: \"releaseTime\", defaultValue: 3 },\n { name: \"threshold\", defaultValue: -0.05 },\n { name: \"lookAheadTime\", defaultValue: 0 }\n ];\n }\n\n get defaultParameterDescriptors() {\n return LimiterProcessor.parameterDescriptors;\n }\n\n getEnvelope(data: Float32Array, attackTime: number, releaseTime: number, sampleRate: number) {\n const attackGain = Math.exp(-1 / (sampleRate * attackTime));\n const releaseGain = Math.exp(-1 / (sampleRate * releaseTime));\n\n const envelope = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n const envIn = Math.abs(data[i]);\n\n if (this.envelopeSample < envIn) {\n this.envelopeSample = envIn + attackGain * (this.envelopeSample - envIn);\n } else {\n this.envelopeSample = envIn + releaseGain * (this.envelopeSample - envIn);\n }\n\n envelope[i] = this.envelopeSample;\n }\n\n return envelope;\n }\n\n getMaxEnvelope(envelope: Float32Array[], channels: number, index: number) {\n let max = envelope[0][index];\n\n for (let channel = 0; channel < channels; channel++) {\n if (envelope[channel][index] > max) {\n max = envelope[channel][index];\n }\n }\n\n return max;\n }\n\n ampToDB(value: number) {\n return 20 * Math.log10(value);\n }\n\n dBToAmp(db: number) {\n return Math.pow(10, db / 20);\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean {\n if (this.stopped) return false;\n\n const inputBuffer = inputs[0];\n const outputBuffer = outputs[0];\n const envelopeData = [];\n\n // transform db to amplitude value\n const postGainAmp = this.dBToAmp(parameters.postGain[0]);\n const preGainAmp = this.dBToAmp(parameters.preGain[0]);\n\n // apply pre gain to signal\n // compute the envelope for each channel\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n // create a delay buffer\n if (this.delayBuffer[channel] == null) {\n this.delayBuffer[channel] = new DelayBuffer(parameters.lookAheadTime[0] * sampleRate);\n }\n\n // apply pre gain to signal\n if (inp && out) {\n for (let k = 0; k < inp.length; ++k) {\n if (!this.disabled) {\n out[k] = preGainAmp * inp[k];\n } else {\n out[k] = inp[k];\n }\n }\n }\n\n // compute the envelope\n if (!this.disabled && out) {\n envelopeData[channel] = this.getEnvelope(out, parameters.attackTime[0], parameters.releaseTime[0], sampleRate);\n }\n }\n\n for (let channel = 0; channel < outputBuffer.length; channel++) {\n const inp = inputBuffer[channel];\n const out = outputBuffer[channel];\n\n if (parameters.lookAheadTime[0] > 0 && out) {\n // write signal into buffer and read delayed signal\n for (let i = 0; i < out.length; i++) {\n this.delayBuffer[channel].push(out[i]);\n out[i] = this.delayBuffer[channel].read();\n }\n }\n\n // If disabled we don't apply the limitation to the audio\n if (this.disabled) {\n continue;\n }\n\n // limiter mode: slope is 1\n const slope = 1;\n\n if (inp && out) {\n for (let i = 0; i < inp.length; i++) {\n let gainDB = slope * (parameters.threshold[0] - this.ampToDB(this.getMaxEnvelope(envelopeData, outputBuffer.length, i))); // max gain\n\n // is gain below zero?\n gainDB = Math.min(0, gainDB);\n const gain = this.dBToAmp(gainDB);\n out[i] *= (gain * postGainAmp);\n }\n }\n }\n\n return true;\n }\n\n reset() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].reset();\n }\n }\n\n this.envelopeSample = 0;\n }\n\n stop() {\n for (let i = 0; i < this.delayBuffer.length; i++) {\n if (this.delayBuffer[i] != null) {\n this.delayBuffer[i].clear();\n }\n }\n\n this.delayBuffer = [];\n this.envelopeSample = 0;\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.LIMITER, LimiterProcessor);\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport LimiterSettings from \"../model/filtersSettings/LimiterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/Limiter.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LimiterFilter extends AbstractAudioFilterWorklet {\n private preGain = 0; // dB\n private postGain = 0; // dB\n private attackTime = 0; // s\n private releaseTime = 3; // s\n private threshold = -0.05; // dB\n private lookAheadTime = 0.1; // s\n\n constructor() {\n super();\n this.keepCurrentNodeIfPossible = true;\n this.enable();\n this.setDefaultEnabled(true);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.LIMITER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.LIMITER;\n }\n\n get order(): number {\n return 11;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LIMITER;\n }\n\n getAddingTime() {\n return this.lookAheadTime;\n }\n\n getSettings(): LimiterSettings {\n return {\n preGain: this.preGain,\n postGain: this.postGain,\n attackTime: this.attackTime,\n releaseTime: this.releaseTime,\n threshold: this.threshold,\n lookAheadTime: this.lookAheadTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"preGain\":\n this.preGain = parseFloat(value as string);\n break;\n case \"postGain\":\n this.postGain = parseFloat(value as string);\n break;\n case \"attackTime\":\n this.attackTime = parseFloat(value as string);\n break;\n case \"releaseTime\":\n this.releaseTime = parseFloat(value as string);\n break;\n case \"threshold\":\n this.threshold = parseFloat(value as string);\n break;\n case \"lookAheadTime\":\n this.lookAheadTime = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","/*\n * SoundTouch JS v0.1.30 audio processing library\n * Copyright (c) Olli Parviainen\n * Copyright (c) Ryan Berdeen\n * Copyright (c) Jakub Fiala\n * Copyright (c) Steve 'Cutter' Blades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n */\n\nclass FifoSampleBuffer {\n constructor() {\n this._vector = new Float32Array();\n this._position = 0;\n this._frameCount = 0;\n }\n get vector() {\n return this._vector;\n }\n get position() {\n return this._position;\n }\n get startIndex() {\n return this._position * 2;\n }\n get frameCount() {\n return this._frameCount;\n }\n get endIndex() {\n return (this._position + this._frameCount) * 2;\n }\n clear() {\n this.receive(this._frameCount);\n this.rewind();\n }\n put(numFrames) {\n this._frameCount += numFrames;\n }\n putSamples(samples, position, numFrames = 0) {\n position = position || 0;\n const sourceOffset = position * 2;\n if (!(numFrames >= 0)) {\n numFrames = (samples.length - sourceOffset) / 2;\n }\n const numSamples = numFrames * 2;\n this.ensureCapacity(numFrames + this._frameCount);\n const destOffset = this.endIndex;\n this.vector.set(samples.subarray(sourceOffset, sourceOffset + numSamples), destOffset);\n this._frameCount += numFrames;\n }\n putBuffer(buffer, position, numFrames = 0) {\n position = position || 0;\n if (!(numFrames >= 0)) {\n numFrames = buffer.frameCount - position;\n }\n this.putSamples(buffer.vector, buffer.position + position, numFrames);\n }\n receive(numFrames) {\n if (!(numFrames >= 0) || numFrames > this._frameCount) {\n numFrames = this.frameCount;\n }\n this._frameCount -= numFrames;\n this._position += numFrames;\n }\n receiveSamples(output, numFrames = 0) {\n const numSamples = numFrames * 2;\n const sourceOffset = this.startIndex;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n this.receive(numFrames);\n }\n extract(output, position = 0, numFrames = 0) {\n const sourceOffset = this.startIndex + position * 2;\n const numSamples = numFrames * 2;\n output.set(this._vector.subarray(sourceOffset, sourceOffset + numSamples));\n }\n ensureCapacity(numFrames = 0) {\n const minLength = parseInt(numFrames * 2);\n if (this._vector.length < minLength) {\n const newVector = new Float32Array(minLength);\n newVector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._vector = newVector;\n this._position = 0;\n } else {\n this.rewind();\n }\n }\n ensureAdditionalCapacity(numFrames = 0) {\n this.ensureCapacity(this._frameCount + numFrames);\n }\n rewind() {\n if (this._position > 0) {\n this._vector.set(this._vector.subarray(this.startIndex, this.endIndex));\n this._position = 0;\n }\n }\n}\n\nclass AbstractFifoSamplePipe {\n constructor(createBuffers) {\n if (createBuffers) {\n this._inputBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n } else {\n this._inputBuffer = this._outputBuffer = null;\n }\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n set inputBuffer(inputBuffer) {\n this._inputBuffer = inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n set outputBuffer(outputBuffer) {\n this._outputBuffer = outputBuffer;\n }\n clear() {\n this._inputBuffer.clear();\n this._outputBuffer.clear();\n }\n}\n\nclass RateTransposer extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this.reset();\n this._rate = 1;\n }\n set rate(rate) {\n this._rate = rate;\n }\n reset() {\n this.slopeCount = 0;\n this.prevSampleL = 0;\n this.prevSampleR = 0;\n }\n clone() {\n const result = new RateTransposer();\n result.rate = this._rate;\n return result;\n }\n process() {\n const numFrames = this._inputBuffer.frameCount;\n this._outputBuffer.ensureAdditionalCapacity(numFrames / this._rate + 1);\n const numFramesOutput = this.transpose(numFrames);\n this._inputBuffer.receive();\n this._outputBuffer.put(numFramesOutput);\n }\n transpose(numFrames = 0) {\n if (numFrames === 0) {\n return 0;\n }\n const src = this._inputBuffer.vector;\n const srcOffset = this._inputBuffer.startIndex;\n const dest = this._outputBuffer.vector;\n const destOffset = this._outputBuffer.endIndex;\n let used = 0;\n let i = 0;\n while (this.slopeCount < 1.0) {\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * this.prevSampleL + this.slopeCount * src[srcOffset];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * this.prevSampleR + this.slopeCount * src[srcOffset + 1];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n this.slopeCount -= 1.0;\n if (numFrames !== 1) {\n out: while (true) {\n while (this.slopeCount > 1.0) {\n this.slopeCount -= 1.0;\n used = used + 1;\n if (used >= numFrames - 1) {\n break out;\n }\n }\n const srcIndex = srcOffset + 2 * used;\n dest[destOffset + 2 * i] = (1.0 - this.slopeCount) * src[srcIndex] + this.slopeCount * src[srcIndex + 2];\n dest[destOffset + 2 * i + 1] = (1.0 - this.slopeCount) * src[srcIndex + 1] + this.slopeCount * src[srcIndex + 3];\n i = i + 1;\n this.slopeCount += this._rate;\n }\n }\n this.prevSampleL = src[srcOffset + 2 * numFrames - 2];\n this.prevSampleR = src[srcOffset + 2 * numFrames - 1];\n return i;\n }\n}\n\nclass FilterSupport {\n constructor(pipe) {\n this._pipe = pipe;\n }\n get pipe() {\n return this._pipe;\n }\n get inputBuffer() {\n return this._pipe.inputBuffer;\n }\n get outputBuffer() {\n return this._pipe.outputBuffer;\n }\n fillInputBuffer() {\n throw new Error('fillInputBuffer() not overridden');\n }\n fillOutputBuffer(numFrames = 0) {\n while (this.outputBuffer.frameCount < numFrames) {\n const numInputFrames = 8192 * 2 - this.inputBuffer.frameCount;\n this.fillInputBuffer(numInputFrames);\n if (this.inputBuffer.frameCount < 8192 * 2) {\n break;\n }\n this._pipe.process();\n }\n }\n clear() {\n this._pipe.clear();\n }\n}\n\nconst noop = function () {\n return;\n};\n\nclass SimpleFilter extends FilterSupport {\n constructor(sourceSound, pipe, callback = noop) {\n super(pipe);\n this.callback = callback;\n this.sourceSound = sourceSound;\n this.historyBufferSize = 22050;\n this._sourcePosition = 0;\n this.outputBufferPosition = 0;\n this._position = 0;\n }\n get position() {\n return this._position;\n }\n set position(position) {\n if (position > this._position) {\n throw new RangeError('New position may not be greater than current position');\n }\n const newOutputBufferPosition = this.outputBufferPosition - (this._position - position);\n if (newOutputBufferPosition < 0) {\n throw new RangeError('New position falls outside of history buffer');\n }\n this.outputBufferPosition = newOutputBufferPosition;\n this._position = position;\n }\n get sourcePosition() {\n return this._sourcePosition;\n }\n set sourcePosition(sourcePosition) {\n this.clear();\n this._sourcePosition = sourcePosition;\n }\n onEnd() {\n this.callback();\n }\n fillInputBuffer(numFrames = 0) {\n const samples = new Float32Array(numFrames * 2);\n const numFramesExtracted = this.sourceSound.extract(samples, numFrames, this._sourcePosition);\n this._sourcePosition += numFramesExtracted;\n this.inputBuffer.putSamples(samples, 0, numFramesExtracted);\n }\n extract(target, numFrames = 0) {\n this.fillOutputBuffer(this.outputBufferPosition + numFrames);\n const numFramesExtracted = Math.min(numFrames, this.outputBuffer.frameCount - this.outputBufferPosition);\n this.outputBuffer.extract(target, this.outputBufferPosition, numFramesExtracted);\n const currentFrames = this.outputBufferPosition + numFramesExtracted;\n this.outputBufferPosition = Math.min(this.historyBufferSize, currentFrames);\n this.outputBuffer.receive(Math.max(currentFrames - this.historyBufferSize, 0));\n this._position += numFramesExtracted;\n return numFramesExtracted;\n }\n handleSampleData(event) {\n this.extract(event.data, 4096);\n }\n clear() {\n super.clear();\n this.outputBufferPosition = 0;\n }\n}\n\nconst USE_AUTO_SEQUENCE_LEN = 0;\nconst DEFAULT_SEQUENCE_MS = USE_AUTO_SEQUENCE_LEN;\nconst USE_AUTO_SEEKWINDOW_LEN = 0;\nconst DEFAULT_SEEKWINDOW_MS = USE_AUTO_SEEKWINDOW_LEN;\nconst DEFAULT_OVERLAP_MS = 8;\nconst _SCAN_OFFSETS = [[124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806, 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0], [-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];\nconst AUTOSEQ_TEMPO_LOW = 0.5;\nconst AUTOSEQ_TEMPO_TOP = 2.0;\nconst AUTOSEQ_AT_MIN = 125.0;\nconst AUTOSEQ_AT_MAX = 50.0;\nconst AUTOSEQ_K = (AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEQ_C = AUTOSEQ_AT_MIN - AUTOSEQ_K * AUTOSEQ_TEMPO_LOW;\nconst AUTOSEEK_AT_MIN = 25.0;\nconst AUTOSEEK_AT_MAX = 15.0;\nconst AUTOSEEK_K = (AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW);\nconst AUTOSEEK_C = AUTOSEEK_AT_MIN - AUTOSEEK_K * AUTOSEQ_TEMPO_LOW;\nclass Stretch extends AbstractFifoSamplePipe {\n constructor(createBuffers) {\n super(createBuffers);\n this._quickSeek = true;\n this.midBufferDirty = false;\n this.midBuffer = null;\n this.overlapLength = 0;\n this.autoSeqSetting = true;\n this.autoSeekSetting = true;\n this._tempo = 1;\n this.setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);\n }\n clear() {\n super.clear();\n this.clearMidBuffer();\n }\n clearMidBuffer() {\n if (this.midBufferDirty) {\n this.midBufferDirty = false;\n this.midBuffer = null;\n }\n }\n setParameters(sampleRate, sequenceMs, seekWindowMs, overlapMs) {\n if (sampleRate > 0) {\n this.sampleRate = sampleRate;\n }\n if (overlapMs > 0) {\n this.overlapMs = overlapMs;\n }\n if (sequenceMs > 0) {\n this.sequenceMs = sequenceMs;\n this.autoSeqSetting = false;\n } else {\n this.autoSeqSetting = true;\n }\n if (seekWindowMs > 0) {\n this.seekWindowMs = seekWindowMs;\n this.autoSeekSetting = false;\n } else {\n this.autoSeekSetting = true;\n }\n this.calculateSequenceParameters();\n this.calculateOverlapLength(this.overlapMs);\n this.tempo = this._tempo;\n }\n set tempo(newTempo) {\n let intskip;\n this._tempo = newTempo;\n this.calculateSequenceParameters();\n this.nominalSkip = this._tempo * (this.seekWindowLength - this.overlapLength);\n this.skipFract = 0;\n intskip = Math.floor(this.nominalSkip + 0.5);\n this.sampleReq = Math.max(intskip + this.overlapLength, this.seekWindowLength) + this.seekLength;\n }\n get tempo() {\n return this._tempo;\n }\n get inputChunkSize() {\n return this.sampleReq;\n }\n get outputChunkSize() {\n return this.overlapLength + Math.max(0, this.seekWindowLength - 2 * this.overlapLength);\n }\n calculateOverlapLength(overlapInMsec = 0) {\n let newOvl;\n newOvl = this.sampleRate * overlapInMsec / 1000;\n newOvl = newOvl < 16 ? 16 : newOvl;\n newOvl -= newOvl % 8;\n this.overlapLength = newOvl;\n this.refMidBuffer = new Float32Array(this.overlapLength * 2);\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n }\n checkLimits(x, mi, ma) {\n return x < mi ? mi : x > ma ? ma : x;\n }\n calculateSequenceParameters() {\n let seq;\n let seek;\n if (this.autoSeqSetting) {\n seq = AUTOSEQ_C + AUTOSEQ_K * this._tempo;\n seq = this.checkLimits(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);\n this.sequenceMs = Math.floor(seq + 0.5);\n }\n if (this.autoSeekSetting) {\n seek = AUTOSEEK_C + AUTOSEEK_K * this._tempo;\n seek = this.checkLimits(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);\n this.seekWindowMs = Math.floor(seek + 0.5);\n }\n this.seekWindowLength = Math.floor(this.sampleRate * this.sequenceMs / 1000);\n this.seekLength = Math.floor(this.sampleRate * this.seekWindowMs / 1000);\n }\n set quickSeek(enable) {\n this._quickSeek = enable;\n }\n clone() {\n const result = new Stretch();\n result.tempo = this._tempo;\n result.setParameters(this.sampleRate, this.sequenceMs, this.seekWindowMs, this.overlapMs);\n return result;\n }\n seekBestOverlapPosition() {\n return this._quickSeek ? this.seekBestOverlapPositionStereoQuick() : this.seekBestOverlapPositionStereo();\n }\n seekBestOverlapPositionStereo() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let i = 0;\n this.preCalculateCorrelationReferenceStereo();\n bestOffset = 0;\n bestCorrelation = Number.MIN_VALUE;\n for (; i < this.seekLength; i = i + 1) {\n correlation = this.calculateCrossCorrelationStereo(2 * i, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = i;\n }\n }\n return bestOffset;\n }\n seekBestOverlapPositionStereoQuick() {\n let bestOffset;\n let bestCorrelation;\n let correlation;\n let scanCount = 0;\n let correlationOffset;\n let tempOffset;\n this.preCalculateCorrelationReferenceStereo();\n bestCorrelation = Number.MIN_VALUE;\n bestOffset = 0;\n correlationOffset = 0;\n tempOffset = 0;\n for (; scanCount < 4; scanCount = scanCount + 1) {\n let j = 0;\n while (_SCAN_OFFSETS[scanCount][j]) {\n tempOffset = correlationOffset + _SCAN_OFFSETS[scanCount][j];\n if (tempOffset >= this.seekLength) {\n break;\n }\n correlation = this.calculateCrossCorrelationStereo(2 * tempOffset, this.refMidBuffer);\n if (correlation > bestCorrelation) {\n bestCorrelation = correlation;\n bestOffset = tempOffset;\n }\n j = j + 1;\n }\n correlationOffset = bestOffset;\n }\n return bestOffset;\n }\n preCalculateCorrelationReferenceStereo() {\n let i = 0;\n let context;\n let temp;\n for (; i < this.overlapLength; i = i + 1) {\n temp = i * (this.overlapLength - i);\n context = i * 2;\n this.refMidBuffer[context] = this.midBuffer[context] * temp;\n this.refMidBuffer[context + 1] = this.midBuffer[context + 1] * temp;\n }\n }\n calculateCrossCorrelationStereo(mixingPosition, compare) {\n const mixing = this._inputBuffer.vector;\n mixingPosition += this._inputBuffer.startIndex;\n let correlation = 0;\n let i = 2;\n const calcLength = 2 * this.overlapLength;\n let mixingOffset;\n for (; i < calcLength; i = i + 2) {\n mixingOffset = i + mixingPosition;\n correlation += mixing[mixingOffset] * compare[i] + mixing[mixingOffset + 1] * compare[i + 1];\n }\n return correlation;\n }\n overlap(overlapPosition) {\n this.overlapStereo(2 * overlapPosition);\n }\n overlapStereo(inputPosition) {\n const input = this._inputBuffer.vector;\n inputPosition += this._inputBuffer.startIndex;\n const output = this._outputBuffer.vector;\n const outputPosition = this._outputBuffer.endIndex;\n let i = 0;\n let context;\n let tempFrame;\n const frameScale = 1 / this.overlapLength;\n let fi;\n let inputOffset;\n let outputOffset;\n for (; i < this.overlapLength; i = i + 1) {\n tempFrame = (this.overlapLength - i) * frameScale;\n fi = i * frameScale;\n context = 2 * i;\n inputOffset = context + inputPosition;\n outputOffset = context + outputPosition;\n output[outputOffset + 0] = input[inputOffset + 0] * fi + this.midBuffer[context + 0] * tempFrame;\n output[outputOffset + 1] = input[inputOffset + 1] * fi + this.midBuffer[context + 1] * tempFrame;\n }\n }\n process() {\n let offset;\n let temp;\n let overlapSkip;\n if (this.midBuffer === null) {\n if (this._inputBuffer.frameCount < this.overlapLength) {\n return;\n }\n this.midBuffer = new Float32Array(this.overlapLength * 2);\n this._inputBuffer.receiveSamples(this.midBuffer, this.overlapLength);\n }\n while (this._inputBuffer.frameCount >= this.sampleReq) {\n offset = this.seekBestOverlapPosition();\n this._outputBuffer.ensureAdditionalCapacity(this.overlapLength);\n this.overlap(Math.floor(offset));\n this._outputBuffer.put(this.overlapLength);\n temp = this.seekWindowLength - 2 * this.overlapLength;\n if (temp > 0) {\n this._outputBuffer.putBuffer(this._inputBuffer, offset + this.overlapLength, temp);\n }\n const start = this._inputBuffer.startIndex + 2 * (offset + this.seekWindowLength - this.overlapLength);\n this.midBuffer.set(this._inputBuffer.vector.subarray(start, start + 2 * this.overlapLength));\n this.skipFract += this.nominalSkip;\n overlapSkip = Math.floor(this.skipFract);\n this.skipFract -= overlapSkip;\n this._inputBuffer.receive(overlapSkip);\n }\n }\n}\n\nconst testFloatEqual = function (a, b) {\n return (a > b ? a - b : b - a) > 1e-10;\n};\n\nclass SoundTouch {\n constructor() {\n this.transposer = new RateTransposer(false);\n this.stretch = new Stretch(false);\n this._inputBuffer = new FifoSampleBuffer();\n this._intermediateBuffer = new FifoSampleBuffer();\n this._outputBuffer = new FifoSampleBuffer();\n this._rate = 0;\n this._tempo = 0;\n this.virtualPitch = 1.0;\n this.virtualRate = 1.0;\n this.virtualTempo = 1.0;\n this.calculateEffectiveRateAndTempo();\n }\n clear() {\n this.transposer.clear();\n this.stretch.clear();\n }\n clone() {\n const result = new SoundTouch();\n result.rate = this.rate;\n result.tempo = this.tempo;\n return result;\n }\n get rate() {\n return this._rate;\n }\n set rate(rate) {\n this.virtualRate = rate;\n this.calculateEffectiveRateAndTempo();\n }\n set rateChange(rateChange) {\n this._rate = 1.0 + 0.01 * rateChange;\n }\n get tempo() {\n return this._tempo;\n }\n set tempo(tempo) {\n this.virtualTempo = tempo;\n this.calculateEffectiveRateAndTempo();\n }\n set tempoChange(tempoChange) {\n this.tempo = 1.0 + 0.01 * tempoChange;\n }\n set pitch(pitch) {\n this.virtualPitch = pitch;\n this.calculateEffectiveRateAndTempo();\n }\n set pitchOctaves(pitchOctaves) {\n this.pitch = Math.exp(0.69314718056 * pitchOctaves);\n this.calculateEffectiveRateAndTempo();\n }\n set pitchSemitones(pitchSemitones) {\n this.pitchOctaves = pitchSemitones / 12.0;\n }\n get inputBuffer() {\n return this._inputBuffer;\n }\n get outputBuffer() {\n return this._outputBuffer;\n }\n calculateEffectiveRateAndTempo() {\n const previousTempo = this._tempo;\n const previousRate = this._rate;\n this._tempo = this.virtualTempo / this.virtualPitch;\n this._rate = this.virtualRate * this.virtualPitch;\n if (testFloatEqual(this._tempo, previousTempo)) {\n this.stretch.tempo = this._tempo;\n }\n if (testFloatEqual(this._rate, previousRate)) {\n this.transposer.rate = this._rate;\n }\n if (this._rate > 1.0) {\n if (this._outputBuffer != this.transposer.outputBuffer) {\n this.stretch.inputBuffer = this._inputBuffer;\n this.stretch.outputBuffer = this._intermediateBuffer;\n this.transposer.inputBuffer = this._intermediateBuffer;\n this.transposer.outputBuffer = this._outputBuffer;\n }\n } else {\n if (this._outputBuffer != this.stretch.outputBuffer) {\n this.transposer.inputBuffer = this._inputBuffer;\n this.transposer.outputBuffer = this._intermediateBuffer;\n this.stretch.inputBuffer = this._intermediateBuffer;\n this.stretch.outputBuffer = this._outputBuffer;\n }\n }\n }\n process() {\n if (this._rate > 1.0) {\n this.stretch.process();\n this.transposer.process();\n } else {\n this.transposer.process();\n this.stretch.process();\n }\n }\n}\n\nclass WebAudioBufferSource {\n constructor(buffer) {\n this.buffer = buffer;\n this._position = 0;\n }\n get dualChannel() {\n return this.buffer.numberOfChannels > 1;\n }\n get position() {\n return this._position;\n }\n set position(value) {\n this._position = value;\n }\n extract(target, numFrames = 0, position = 0) {\n this.position = position;\n let left = this.buffer.getChannelData(0);\n let right = this.dualChannel ? this.buffer.getChannelData(1) : this.buffer.getChannelData(0);\n let i = 0;\n for (; i < numFrames; i++) {\n target[i * 2] = left[i + position];\n target[i * 2 + 1] = right[i + position];\n }\n return Math.min(numFrames, left.length - position);\n }\n}\n\nconst getWebAudioNode = function (context, filter, sourcePositionCallback = noop, bufferSize = 4096) {\n const node = context.createScriptProcessor(bufferSize, 2, 2);\n const samples = new Float32Array(bufferSize * 2);\n node.onaudioprocess = event => {\n let left = event.outputBuffer.getChannelData(0);\n let right = event.outputBuffer.getChannelData(1);\n let framesExtracted = filter.extract(samples, bufferSize);\n sourcePositionCallback(filter.sourcePosition);\n if (framesExtracted === 0) {\n filter.onEnd();\n }\n let i = 0;\n for (; i < framesExtracted; i++) {\n left[i] = samples[i * 2];\n right[i] = samples[i * 2 + 1];\n }\n };\n return node;\n};\n\nconst pad = function (n, width, z) {\n z = z || '0';\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n};\nconst minsSecs = function (secs) {\n const mins = Math.floor(secs / 60);\n const seconds = secs - mins * 60;\n return `${mins}:${pad(parseInt(seconds), 2)}`;\n};\n\nconst onUpdate = function (sourcePosition) {\n const currentTimePlayed = this.timePlayed;\n const sampleRate = this.sampleRate;\n this.sourcePosition = sourcePosition;\n this.timePlayed = sourcePosition / sampleRate;\n if (currentTimePlayed !== this.timePlayed) {\n const timePlayed = new CustomEvent('play', {\n detail: {\n timePlayed: this.timePlayed,\n formattedTimePlayed: this.formattedTimePlayed,\n percentagePlayed: this.percentagePlayed\n }\n });\n this._node.dispatchEvent(timePlayed);\n }\n};\nclass PitchShifter {\n constructor(context, buffer, bufferSize, onEnd = noop) {\n this._soundtouch = new SoundTouch();\n const source = new WebAudioBufferSource(buffer);\n this.timePlayed = 0;\n this.sourcePosition = 0;\n this._filter = new SimpleFilter(source, this._soundtouch, onEnd);\n this._node = getWebAudioNode(context, this._filter, sourcePostion => onUpdate.call(this, sourcePostion), bufferSize);\n this.tempo = 1;\n this.rate = 1;\n this.duration = buffer.duration;\n this.sampleRate = context.sampleRate;\n this.listeners = [];\n }\n get formattedDuration() {\n return minsSecs(this.duration);\n }\n get formattedTimePlayed() {\n return minsSecs(this.timePlayed);\n }\n get percentagePlayed() {\n return 100 * this._filter.sourcePosition / (this.duration * this.sampleRate);\n }\n set percentagePlayed(perc) {\n this._filter.sourcePosition = parseInt(perc * this.duration * this.sampleRate);\n this.sourcePosition = this._filter.sourcePosition;\n this.timePlayed = this.sourcePosition / this.sampleRate;\n }\n get node() {\n return this._node;\n }\n set pitch(pitch) {\n this._soundtouch.pitch = pitch;\n }\n set pitchSemitones(semitone) {\n this._soundtouch.pitchSemitones = semitone;\n }\n set rate(rate) {\n this._soundtouch.rate = rate;\n }\n set tempo(tempo) {\n this._soundtouch.tempo = tempo;\n }\n connect(toNode) {\n this._node.connect(toNode);\n }\n disconnect() {\n this._node.disconnect();\n }\n on(eventName, cb) {\n this.listeners.push({\n name: eventName,\n cb: cb\n });\n this._node.addEventListener(eventName, event => cb(event.detail));\n }\n off(eventName = null) {\n let listeners = this.listeners;\n if (eventName) {\n listeners = listeners.filter(e => e.name === eventName);\n }\n listeners.forEach(e => {\n this._node.removeEventListener(e.name, event => e.cb(event.detail));\n });\n }\n}\n\nexport { AbstractFifoSamplePipe, PitchShifter, RateTransposer, SimpleFilter, SoundTouch, Stretch, WebAudioBufferSource, getWebAudioNode };\n//# sourceMappingURL=soundtouch.js.map\n","import SoundtouchWorkletMessage from \"../../model/SoundtouchWorkletMessage\";\nimport { SoundtouchWorkletOptionsWrapper } from \"../../model/SoundtouchWorkletOptionsWrapper\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet soundtouchWrapperFilterWorkletNodeClass: any;\n\nif(typeof(window) !== \"undefined\" && typeof(window.AudioWorkletNode) !== \"undefined\") {\n soundtouchWrapperFilterWorkletNodeClass = class SoundtouchWrapperFilterWorkletNode extends AudioWorkletNode {\n\n name: string = \"\";\n private running = false;\n private _tempo = 1;\n private _pitch = 1;\n\n constructor(context: BaseAudioContext, workletName: string, options: SoundtouchWorkletOptionsWrapper) {\n super(context, workletName, options);\n this.name = this.constructor.name;\n this.running = true;\n this.updateInterval = options.processorOptions.updateInterval;\n }\n\n async setup(tempo: number, pitch: number): Promise {\n return new Promise(resolve => {\n if(this.port) {\n this.port.onmessage = (ev: MessageEvent) => {\n if(ev && ev.data && ev.data.status === \"OK\" && ev.data.args[0] === \"setup\") {\n this.port.onmessage = this.messageProcessor.bind(this);\n resolve();\n }\n };\n \n this.port.postMessage({ command: \"setup\", args: [tempo, pitch] });\n\n this._tempo = tempo;\n this._pitch = pitch;\n }\n });\n }\n\n set updateInterval(value: number) {\n this.port.postMessage({ command: \"updateInterval\", args: [value] });\n }\n\n get node() {\n return this;\n }\n\n set tempo(value: number) {\n this.port.postMessage({ command: \"setTempo\", args: [value] });\n }\n\n set pitch(value: number) {\n this.port.postMessage({ command: \"setPitch\", args: [value] });\n }\n\n get tempo(): number {\n this.port.postMessage({ command: \"getTempo\", args: [] });\n return this._tempo;\n }\n\n get pitch(): number {\n this.port.postMessage({ command: \"getPitch\", args: [] });\n return this._pitch;\n }\n\n async stop() {\n if (!this.running) return;\n\n this.port.postMessage({ command: \"stop\", args: [] });\n this.disconnect();\n\n this.running = false;\n }\n\n messageProcessor(e: MessageEvent) {\n if (e.data.command) {\n const { command } = e.data;\n \n switch (command) {\n case \"End\":\n this.stop();\n break;\n default:\n break;\n }\n\n if (e.data.status) {\n const value = e.data.args[1];\n\n switch (e.data.args[0]) {\n case \"getTempo\":\n this._tempo = value as number;\n break;\n case \"getPitch\":\n this._pitch = value as number;\n break;\n default:\n break;\n }\n return;\n }\n }\n }\n };\n}\n\nexport default soundtouchWrapperFilterWorkletNodeClass;\n","/*\n * Copyright (c) 2012 The Chromium Authors. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Copyright (C) 2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\ninterface VocoderBand {\n frequency: number;\n}\n\nexport default class Vocoder {\n\n private FILTER_QUALITY = 6; // The Q value for the carrier and modulator filters\n private FOURIER_SIZE = 4096;\n private WAVETABLEBOOST = 40.0;\n private SAWTOOTHBOOST = 0.40;\n private oscillatorType = 4; // CUSTOM\n private oscillatorDetuneValue = 0;\n\n private audioContext: BaseAudioContext | null = null;\n private modulatorBuffer: AudioBuffer | undefined;\n private carrierBuffer: AudioBuffer | null = null;\n private modulatorNode: AudioBufferSourceNode | null = null;\n private vocoding = false;\n\n // These are \"placeholder\" gain nodes - because the modulator and carrier will get swapped in\n // as they are loaded, it's easier to connect these nodes to all the bands, and the \"real\"\n // modulator & carrier AudioBufferSourceNodes connect to these.\n private modulatorInput: GainNode | null = null;\n private carrierInput: GainNode | null = null;\n\n private modulatorGain: GainNode | null = null;\n private modulatorGainValue = 1.0;\n\n // noise node added to the carrier signal\n private noiseBuffer: AudioBuffer | null = null;\n private noiseNode: AudioBufferSourceNode | null = null;\n private noiseGain: GainNode | null = null;\n private noiseGainValue = 0.2;\n\n // Carrier sample gain\n private carrierSampleNode: AudioBufferSourceNode | null = null;\n private carrierSampleGain: GainNode | null = null;\n private carrierSampleGainValue = 0.0;\n\n // Carrier Synth oscillator stuff\n private oscillatorNode: OscillatorNode | null = null;\n private oscillatorGain: GainNode | null = null;\n private oscillatorGainValue = 1.0;\n private wavetable: PeriodicWave | null = null;\n private wavetableSignalGain: GainNode | null = null;\n\n // These are the arrays of nodes - the \"columns\" across the frequency band \"rows\"\n private modFilterBands: BiquadFilterNode[] | null = null; // tuned bandpass filters\n private modFilterPostGains: GainNode[] | null = null; // post-filter gains.\n private heterodynes: GainNode[] | null = null; // gain nodes used to multiply bandpass X sine\n private powers: number[] | null = null; // gain nodes used to multiply prev out by itself\n private lpFilters: BiquadFilterNode[] | null = null; // tuned LP filters to remove doubled copy of product\n private lpFilterPostGains: GainNode[] | null = null; // gain nodes for tuning input to waveshapers\n private carrierBands: BiquadFilterNode[] | null = null; // tuned bandpass filters, same as modFilterBands but in carrier chain\n private carrierFilterPostGains: GainNode[] | null = null; // post-bandpass gain adjustment\n private carrierBandGains: GainNode[] | null = null; // these are the \"control gains\" driven by the lpFilters\n\n private vocoderBands: VocoderBand[] | null = null;\n private numVocoderBands: number = 0;\n\n private hpFilterGain: GainNode | null = null;\n private outputGain: GainNode | null = null;\n\n // Initialization function for the page.\n constructor(ctx: BaseAudioContext, carrierB: AudioBuffer, modulatorB?: AudioBuffer) {\n this.audioContext = ctx;\n this.carrierBuffer = carrierB;\n this.modulatorBuffer = modulatorB;\n }\n\n init() {\n this.generateVocoderBands(55, 7040, 28);\n // Set up the vocoder chains\n this.setupVocoderGraph();\n this.vocode();\n }\n\n getNodes() {\n return {\n modulatorNode: this.modulatorNode,\n modulatorGain: this.modulatorGain,\n synthLevel: this.oscillatorGain,\n noiseNode: this.noiseGain,\n oscillatorNode: this.oscillatorNode,\n hpFilterGain: this.hpFilterGain,\n outputGain: this.outputGain\n };\n }\n\n private shutOffCarrier() {\n if (this.oscillatorNode && this.noiseNode && this.carrierSampleNode) {\n this.oscillatorNode.stop(0);\n this.oscillatorNode = null;\n this.noiseNode.stop(0);\n this.noiseNode = null;\n this.carrierSampleNode.stop(0);\n this.carrierSampleNode = null;\n }\n }\n\n selectSawtooth() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n if (this.oscillatorNode)\n this.oscillatorNode.type = \"sawtooth\";\n }\n\n selectWavetable() {\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n if (this.oscillatorNode && this.wavetable)\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n if (this.wavetableSignalGain)\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n }\n\n updateModGain(value: number) {\n this.modulatorGainValue = value;\n if (this.modulatorGain)\n this.modulatorGain.gain.value = value;\n }\n\n // sample-based carrier\n updateSampleLevel(value: number) {\n this.carrierSampleGainValue = value;\n if (this.carrierSampleGain)\n this.carrierSampleGain.gain.value = value;\n }\n\n // noise in carrier\n updateSynthLevel(value: number) {\n this.oscillatorGainValue = value;\n if (this.oscillatorGain)\n this.oscillatorGain.gain.value = value;\n }\n\n // noise in carrier\n updateNoiseLevel(value: number) {\n this.noiseGainValue = value;\n if (this.noiseGain)\n this.noiseGain.gain.value = value;\n }\n\n updateDetuneValue(value: number) {\n this.oscillatorDetuneValue = value;\n if (this.oscillatorNode)\n this.oscillatorNode.detune.value = value;\n }\n\n // this will algorithmically re-calculate vocoder bands, distributing evenly\n // from startFreq to endFreq, splitting evenly (logarhythmically) into a given numBands.\n // The function places this info into the global vocoderBands and numVocoderBands letiables.\n private generateVocoderBands(startFreq: number, endFreq: number, numBands: number) {\n // Remember: 1200 cents in octave, 100 cents per semitone\n\n const totalRangeInCents = 1200 * Math.log(endFreq / startFreq) / Math.LN2;\n const centsPerBand = totalRangeInCents / numBands;\n const scale = Math.pow(2, centsPerBand / 1200); // This is the scaling for successive bands\n\n this.vocoderBands = [];\n let currentFreq = startFreq;\n\n for (let i = 0; i < numBands; i++) {\n this.vocoderBands[i] = { frequency: currentFreq };\n //console.log( \"Band \" + i + \" centered at \" + currentFreq + \"Hz\" );\n currentFreq = currentFreq * scale;\n }\n\n this.numVocoderBands = numBands;\n }\n\n private loadNoiseBuffer() { // create a 5-second buffer of noise\n if (!this.audioContext) return;\n\n const lengthInSamples = 5 * this.audioContext.sampleRate;\n this.noiseBuffer = this.audioContext.createBuffer(1, lengthInSamples, this.audioContext.sampleRate);\n const bufferData = this.noiseBuffer.getChannelData(0);\n\n for (let i = 0; i < lengthInSamples; ++i) {\n bufferData[i] = (2 * Math.random() - 1); // -1 to +1\n }\n }\n\n private initBandpassFilters() {\n if (!this.audioContext) return;\n\n // When this function is called, the carrierNode and modulatorAnalyser\n // may not already be created. Create placeholder nodes for them.\n this.modulatorInput = this.audioContext.createGain();\n this.carrierInput = this.audioContext.createGain();\n\n if (this.modFilterBands == null)\n this.modFilterBands = [];\n\n if (this.modFilterPostGains == null)\n this.modFilterPostGains = [];\n\n if (this.heterodynes == null)\n this.heterodynes = [];\n\n if (this.powers == null)\n this.powers = [];\n\n if (this.lpFilters == null)\n this.lpFilters = [];\n\n if (this.lpFilterPostGains == null)\n this.lpFilterPostGains = [];\n\n if (this.carrierBands == null)\n this.carrierBands = [];\n\n if (this.carrierFilterPostGains == null)\n this.carrierFilterPostGains = [];\n\n if (this.carrierBandGains == null)\n this.carrierBandGains = [];\n\n const waveShaperCurve = new Float32Array(65536);\n // Populate with a \"curve\" that does an abs()\n const n = 65536;\n const n2 = n / 2;\n let x;\n\n for (let i = 0; i < n2; ++i) {\n x = i / n2;\n\n waveShaperCurve[n2 + i] = x;\n waveShaperCurve[n2 - i - 1] = x;\n }\n\n // Set up a high-pass filter to add back in the fricatives, etc.\n // (this isn't used by default in the \"production\" version, as I hid the slider)\n const hpFilter = this.audioContext.createBiquadFilter();\n hpFilter.type = \"highpass\";\n hpFilter.frequency.value = 8000; // or use vocoderBands[numVocoderBands-1].frequency;\n hpFilter.Q.value = 1; // no peaking\n this.modulatorInput.connect(hpFilter);\n\n this.hpFilterGain = this.audioContext.createGain();\n this.hpFilterGain.gain.value = 0.0;\n\n hpFilter.connect(this.hpFilterGain);\n\n if(this.modulatorBuffer) {\n this.hpFilterGain.connect(this.audioContext.destination);\n }\n\n //clear the arrays\n this.modFilterBands.length = 0;\n this.modFilterPostGains.length = 0;\n this.heterodynes.length = 0;\n this.powers.length = 0;\n this.lpFilters.length = 0;\n this.lpFilterPostGains.length = 0;\n this.carrierBands.length = 0;\n this.carrierFilterPostGains.length = 0;\n this.carrierBandGains.length = 0;\n\n this.outputGain = this.audioContext.createGain();\n\n if(this.modulatorBuffer) {\n this.outputGain.connect(this.audioContext.destination);\n }\n\n const rectifierCurve = new Float32Array(65536);\n for (let i = -32768; i < 32768; i++)\n rectifierCurve[i + 32768] = ((i > 0) ? i : -i) / 32768;\n\n for (let i = 0; i < this.numVocoderBands; i++) {\n // CREATE THE MODULATOR CHAIN\n // create the bandpass filter in the modulator chain\n const modulatorFilter = this.audioContext.createBiquadFilter();\n modulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n modulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n modulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n this.modulatorInput.connect(modulatorFilter);\n this.modFilterBands.push(modulatorFilter);\n\n // Now, create a second bandpass filter tuned to the same frequency -\n // this turns our second-order filter into a 4th-order filter,\n // which has a steeper rolloff/octave\n const secondModulatorFilter = this.audioContext.createBiquadFilter();\n secondModulatorFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondModulatorFilter.frequency.value = this.vocoderBands[i].frequency;\n secondModulatorFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //modulatorFilter.chainedFilter = secondModulatorFilter;\n modulatorFilter.connect(secondModulatorFilter);\n\n // create a post-filtering gain to bump the levels up.\n const modulatorFilterPostGain = this.audioContext.createGain();\n modulatorFilterPostGain.gain.value = 6;\n secondModulatorFilter.connect(modulatorFilterPostGain);\n this.modFilterPostGains.push(modulatorFilterPostGain);\n\n // Create the sine oscillator for the heterodyne\n const heterodyneOscillator = this.audioContext.createOscillator();\n if (this.vocoderBands)\n heterodyneOscillator.frequency.value = this.vocoderBands[i].frequency;\n\n heterodyneOscillator.start(0);\n\n // Create the node to multiply the sine by the modulator\n const heterodyne = this.audioContext.createGain();\n modulatorFilterPostGain.connect(heterodyne);\n heterodyne.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n heterodyneOscillator.connect(heterodyne.gain);\n\n const heterodynePostGain = this.audioContext.createGain();\n heterodynePostGain.gain.value = 2.0; // GUESS: boost\n heterodyne.connect(heterodynePostGain);\n this.heterodynes.push(heterodynePostGain);\n\n\n // Create the rectifier node\n const rectifier = this.audioContext.createWaveShaper();\n rectifier.curve = rectifierCurve;\n heterodynePostGain.connect(rectifier);\n\n // Create the lowpass filter to mask off the difference (near zero)\n const lpFilter = this.audioContext.createBiquadFilter();\n lpFilter.type = \"lowpass\"; // Lowpass filter\n lpFilter.frequency.value = 5.0; // Guesstimate! Mask off 20Hz and above.\n lpFilter.Q.value = 1; // don't need a peak\n this.lpFilters.push(lpFilter);\n rectifier.connect(lpFilter);\n\n const lpFilterPostGain = this.audioContext.createGain();\n lpFilterPostGain.gain.value = 1.0;\n lpFilter.connect(lpFilterPostGain);\n this.lpFilterPostGains.push(lpFilterPostGain);\n\n const waveshaper = this.audioContext.createWaveShaper();\n waveshaper.curve = waveShaperCurve;\n lpFilterPostGain.connect(waveshaper);\n\n\n // Create the bandpass filter in the carrier chain\n const carrierFilter = this.audioContext.createBiquadFilter();\n carrierFilter.type = \"bandpass\";\n if (this.vocoderBands)\n carrierFilter.frequency.value = this.vocoderBands[i].frequency;\n carrierFilter.Q.value = this.FILTER_QUALITY;\n this.carrierBands.push(carrierFilter);\n this.carrierInput.connect(carrierFilter);\n\n // We want our carrier filters to be 4th-order filter too.\n const secondCarrierFilter = this.audioContext.createBiquadFilter();\n secondCarrierFilter.type = \"bandpass\"; // Bandpass filter\n if (this.vocoderBands)\n secondCarrierFilter.frequency.value = this.vocoderBands[i].frequency;\n secondCarrierFilter.Q.value = this.FILTER_QUALITY; // initial quality\n //carrierFilter.chainedFilter = secondCarrierFilter;\n carrierFilter.connect(secondCarrierFilter);\n\n const carrierFilterPostGain = this.audioContext.createGain();\n carrierFilterPostGain.gain.value = 10.0;\n secondCarrierFilter.connect(carrierFilterPostGain);\n this.carrierFilterPostGains.push(carrierFilterPostGain);\n\n // Create the carrier band gain node\n const bandGain = this.audioContext.createGain();\n this.carrierBandGains.push(bandGain);\n carrierFilterPostGain.connect(bandGain);\n bandGain.gain.value = 0.0; // audio-rate inputs are summed with initial intrinsic value\n waveshaper.connect(bandGain.gain); // connect the lp controller\n\n bandGain.connect(this.outputGain);\n }\n\n\n // Now set up our wavetable stuff.\n const real = new Float32Array(this.FOURIER_SIZE);\n const imag = new Float32Array(this.FOURIER_SIZE);\n real[0] = 0.0;\n imag[0] = 0.0;\n for (let i = 1; i < this.FOURIER_SIZE; i++) {\n real[i] = 1.0;\n imag[i] = 1.0;\n }\n\n this.wavetable = this.audioContext.createPeriodicWave(real, imag);\n this.loadNoiseBuffer();\n }\n\n private setupVocoderGraph() {\n this.initBandpassFilters();\n }\n\n private createCarriersAndPlay(output: GainNode | null) {\n if(!this.audioContext || !output) return;\n\n this.carrierSampleNode = this.audioContext.createBufferSource();\n this.carrierSampleNode.buffer = this.carrierBuffer;\n this.carrierSampleNode.loop = true;\n\n this.carrierSampleGain = this.audioContext.createGain();\n this.carrierSampleGain.gain.value = this.carrierSampleGainValue;\n this.carrierSampleNode.connect(this.carrierSampleGain);\n this.carrierSampleGain.connect(output);\n\n // The wavetable signal needs a boost.\n this.wavetableSignalGain = this.audioContext.createGain();\n\n this.oscillatorNode = this.audioContext.createOscillator();\n if (this.oscillatorType == 4 && this.wavetable) { // wavetable\n this.oscillatorNode.setPeriodicWave(this.wavetable);\n this.wavetableSignalGain.gain.value = this.WAVETABLEBOOST;\n } else {\n //oscillatorNode.type = oscillatorType;\n this.wavetableSignalGain.gain.value = this.SAWTOOTHBOOST;\n }\n this.oscillatorNode.frequency.value = 110;\n this.oscillatorNode.detune.value = this.oscillatorDetuneValue;\n this.oscillatorNode.connect(this.wavetableSignalGain);\n\n this.oscillatorGain = this.audioContext.createGain();\n this.oscillatorGain.gain.value = this.oscillatorGainValue;\n\n this.wavetableSignalGain.connect(this.oscillatorGain);\n this.oscillatorGain.connect(output);\n\n this.noiseNode = this.audioContext.createBufferSource();\n this.noiseNode.buffer = this.noiseBuffer;\n this.noiseNode.loop = true;\n this.noiseGain = this.audioContext.createGain();\n this.noiseGain.gain.value = this.noiseGainValue;\n this.noiseNode.connect(this.noiseGain);\n\n this.noiseGain.connect(output);\n this.oscillatorNode.start(0);\n this.noiseNode.start(0);\n this.carrierSampleNode.start(0);\n\n }\n\n private vocode() {\n if(!this.audioContext) return;\n\n if (this.vocoding) {\n if (this.modulatorNode) {\n this.modulatorNode.stop(0);\n }\n this.shutOffCarrier();\n this.vocoding = false;\n return;\n }\n\n this.createCarriersAndPlay(this.carrierInput);\n\n this.vocoding = true;\n\n this.modulatorGain = this.audioContext.createGain();\n this.modulatorGain.gain.value = this.modulatorGainValue;\n\n if(this.modulatorBuffer) {\n this.modulatorNode = this.audioContext.createBufferSource();\n this.modulatorNode.buffer = this.modulatorBuffer;\n this.modulatorNode.connect(this.modulatorGain);\n this.modulatorNode.start(0);\n }\n\n if (this.modulatorInput)\n this.modulatorGain.connect(this.modulatorInput);\n }\n}\n","import Constants from \"../../model/Constants\";\n\nclass PassthroughWorkletProcessor extends AudioWorkletProcessor {\n\n stopped = false;\n samplesCount = 0;\n\n constructor() {\n super();\n this.port.onmessage = (event) => {\n if (event.data == \"stop\") {\n this.stop();\n }\n };\n }\n\n static get parameterDescriptors() {\n return [];\n }\n\n get defaultParameterDescriptors() {\n return PassthroughWorkletProcessor.parameterDescriptors;\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean {\n if (this.stopped) return false;\n\n const input = inputs[0];\n const output = outputs[0];\n\n if (input && input[0]) {\n this.samplesCount += input[0].length;\n }\n\n if (output) {\n for(let channel = 0; channel < output.length; channel++) {\n const inp = input[channel];\n const out = output[channel];\n\n if (inp) {\n for (let sample = 0; sample < inp.length; sample++) {\n out[sample] = inp[sample];\n }\n }\n }\n\n this.port.postMessage({ command: \"update\", samplesCount: this.samplesCount });\n }\n\n return true;\n }\n\n stop() {\n this.stopped = true;\n }\n}\n\nregisterProcessor(Constants.WORKLET_NAMES.PASSTHROUGH, PassthroughWorkletProcessor);\n","/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\nexport default class TimerSaveTime {\n seconds = 0;\n initialSeconds = 0;\n interval: number | null = null;\n incr = 1;\n\n private countCallback: () => void = () => {};\n\n constructor(seconds: number, incr: number) {\n this.seconds = seconds;\n this.initialSeconds = seconds;\n this.interval;\n this.incr = incr;\n }\n\n start() {\n this.interval = window.setInterval(() => this.count(), 1000);\n }\n\n stop() {\n clearInterval(this.interval!);\n }\n\n count() {\n this.seconds += this.incr;\n\n if(this.seconds <= 0) {\n this.stop();\n }\n\n if(this.countCallback) {\n this.countCallback();\n }\n }\n\n onCount(callback: () => void) {\n this.countCallback = callback;\n }\n}","\n/*\n * Copyright (C) 2019-2023 Eliastik (eliastiksofts.com)\n *\n * This file is part of \"Simple Voice Changer\".\n *\n * \"Simple Voice Changer\" is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * \"Simple Voice Changer\" is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with \"Simple Voice Changer\". If not, see .\n */\n// The Voice Recorder class\n// Used to record a sound (voice, etc.) with the user microphone\n// Offer control with play/pause and audio feedback\nimport { inject, injectable } from \"inversify\";\nimport TimerSaveTime from \"../utils/TimerSaveTime\";\nimport { EventType } from \"../model/EventTypeEnum\";\nimport AudioConstraintWrapper from \"../model/AudioConstraintWrapper\";\nimport { RecorderSettings } from \"../model/RecorderSettings\";\nimport type { ConfigService } from \"../services/interfaces/ConfigService\";\nimport AbstractAudioElement from \"../filters/interfaces/AbstractAudioElement\";\nimport Constants from \"../model/Constants\";\nimport { EventEmitterCallback } from \"../model/EventEmitterCallback\";\nimport { AudioConstraint } from \"../model/AudioConstraint\";\nimport Recorder from \"../recorder/Recorder\";\nimport VoiceRecorderInterface from \"./interfaces/VoiceRecorderInterface\";\nimport { TYPES } from \"@/inversify.types\";\nimport AudioContextManagerInterface from \"@/audioEditor/interfaces/AudioContextManagerInterface\";\n\n@injectable()\nexport default class VoiceRecorder extends AbstractAudioElement implements VoiceRecorderInterface {\n\n private contextManager: AudioContextManagerInterface | null | undefined;\n\n private recorder: Recorder | null = null;\n\n private input: MediaStreamAudioSourceNode | null = null;\n\n private stream: MediaStream | null = null;\n\n private alreadyInit = false;\n\n private timer: TimerSaveTime | null = null;\n\n private enableAudioFeedback = false;\n\n private recording = false;\n\n private deviceList: MediaDeviceInfo[] = [];\n\n private constraints: AudioConstraintWrapper = {\n audio: {\n noiseSuppression: true,\n echoCancellation: true,\n autoGainControl: true,\n sampleRate: { ideal: 44100 }\n }\n };\n\n private sampleRateConfigNotSupported = false;\n\n constructor(\n @inject(TYPES.AudioContextManager) contextManager: AudioContextManagerInterface | null,\n @inject(TYPES.ConfigService) configService: ConfigService) {\n super();\n\n this.contextManager = contextManager;\n this.configService = configService;\n }\n\n async init() {\n if (!this.isRecordingAvailable()) {\n return;\n }\n\n // Specific case: Firefox doesn't support changing sample-rate for MediaDevice API\n // In this case we disable sample-rate config feature for this VoiceRecorder\n this.sampleRateConfigNotSupported = !navigator.mediaDevices.getSupportedConstraints().sampleRate;\n\n if (this.contextManager) {\n if (this.sampleRateConfigNotSupported) {\n this.contextManager.createNewContext(0);\n } else {\n this.contextManager.createNewContextIfNeeded();\n }\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_INIT);\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n }\n\n await this.setup(stream, false, false);\n\n this.alreadyInit = true;\n this.timer = new TimerSaveTime(0, 1);\n\n this.timer.onCount(() => {\n this.eventEmitter?.emit(EventType.RECORDER_COUNT_UPDATE);\n });\n\n this.successCallback();\n } catch (e) {\n console.error(e);\n\n const exception = e as DOMException;\n\n if (exception) {\n switch (exception.name) {\n case \"SecurityError\":\n case \"NotAllowedError\":\n this.errorCallback();\n break;\n case \"NotFoundError\":\n this.notFoundErrorCallback();\n break;\n // Disable sample rate configuration\n case \"NotSupportedError\":\n if (!this.sampleRateConfigNotSupported) {\n this.sampleRateConfigNotSupported = true;\n this.init();\n }\n break;\n default:\n this.unknownErrorCallback();\n break;\n }\n }\n }\n\n navigator.mediaDevices.ondevicechange = () => this.updateInputList();\n }\n\n private successCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_SUCCESS);\n }\n\n private errorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_ERROR);\n }\n\n private notFoundErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_NOT_FOUND_ERROR);\n }\n\n private unknownErrorCallback() {\n this.eventEmitter?.emit(EventType.RECORDER_UNKNOWN_ERROR);\n }\n\n audioFeedback(enable: boolean) {\n if (this.contextManager && this.contextManager.currentContext) {\n if (enable) {\n this.input && this.input.connect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = true;\n } else {\n this.input && this.input.connect(this.contextManager.currentContext.destination) && this.input.disconnect(this.contextManager.currentContext.destination);\n this.enableAudioFeedback = false;\n }\n\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Get current constraints/settings\n * @returns MediaTrackSettings\n */\n private getConstraints() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n if (tracks && tracks.length > 0) {\n return tracks[0].getSettings();\n }\n }\n\n return null;\n }\n\n /**\n * Update the current constraints\n */\n private updateConstraints() {\n const constraints = this.getConstraints();\n\n if (constraints) {\n this.constraints.audio = Object.assign(this.constraints.audio, constraints);\n this.eventEmitter?.emit(EventType.RECORDER_UPDATE_CONSTRAINTS);\n }\n }\n\n /**\n * Reset the current constraints\n * @param newConstraint AudioConstraintWrapper\n */\n private async resetConstraints(newConstraint?: AudioConstraintWrapper) {\n if (this.stream) {\n const precAudioFeedback = this.enableAudioFeedback;\n const precRecording = this.recording;\n const tracks = this.stream.getTracks();\n\n if (newConstraint) {\n this.updateConstraints();\n this.constraints.audio = Object.assign(this.constraints.audio, newConstraint.audio);\n }\n\n if (tracks && tracks.length > 0) {\n try {\n await tracks[0].applyConstraints(this.constraints.audio);\n\n const newConstraints = this.getConstraints();\n const newConstraintName = newConstraint ? Object.keys(newConstraint.audio)[0] : \"\";\n\n this.audioFeedback(false);\n this.pause();\n\n if (!newConstraint ||\n (newConstraints && (newConstraints as AudioConstraint)[newConstraintName] != newConstraint.audio[newConstraintName])) {\n this.stopStream();\n\n const stream = await navigator.mediaDevices.getUserMedia(this.constraints);\n\n await this.setup(stream, precRecording, precAudioFeedback);\n } else {\n await this.setup(null, precRecording, precAudioFeedback);\n }\n } catch (e) {\n this.errorCallback();\n }\n }\n }\n }\n\n /**\n * Setup this voice recorder\n * @param stream MediaStream\n * @param precRecording Was recording?\n * @param precAudioFeedback Has audio feedback?\n */\n private async setup(stream: MediaStream | null, precRecording: boolean, precAudioFeedback: boolean) {\n if (stream && this.contextManager && this.contextManager.currentContext) {\n this.input = this.contextManager.currentContext.createMediaStreamSource(stream);\n this.stream = stream;\n }\n\n if (this.recorder && this.input) {\n await this.recorder.setup(this.input);\n\n if (precRecording) {\n await this.record();\n }\n }\n\n this.audioFeedback(precAudioFeedback);\n this.updateConstraints();\n await this.updateInputList();\n }\n\n setNoiseSuppression(enable: boolean) {\n this.resetConstraints({\n audio: {\n noiseSuppression: enable\n }\n });\n }\n\n setAutoGain(enable: boolean) {\n this.resetConstraints({\n audio: {\n autoGainControl: enable\n }\n });\n }\n\n setEchoCancellation(enable: boolean) {\n this.resetConstraints({\n audio: {\n echoCancellation: enable\n }\n });\n }\n\n /**\n * Update current audio input list\n */\n private async updateInputList() {\n if (this.deviceList) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.deviceList = [];\n\n devices.forEach(device => {\n if (device.kind == \"audioinput\") {\n this.deviceList.push(device);\n }\n });\n }\n }\n\n changeInput(deviceId: string, groupId: string | undefined) {\n if (groupId) {\n this.constraints.audio.deviceId = deviceId;\n this.constraints.audio.groupId = groupId;\n this.resetConstraints();\n }\n }\n\n async record() {\n if (this.alreadyInit && this.configService && this.input) {\n if (!this.recorder) {\n this.recorder = new Recorder({\n bufferLen: this.configService.getBufferSize(),\n sampleRate: this.configService.getSampleRate(),\n numChannels: 2,\n workletBasePath: this.configService.getWorkletBasePath(),\n workerBasePath: this.configService.getWorkerBasePath(),\n mimeType: \"audio/wav\"\n });\n\n await this.recorder.setup(this.input);\n }\n\n if (this.recorder) {\n this.recorder.record();\n }\n\n this.timer && this.timer.start();\n this.recording = true;\n\n if (this.eventEmitter) {\n this.eventEmitter.emit(EventType.RECORDER_RECORDING);\n }\n }\n }\n\n async stop() {\n if (this.alreadyInit && this.recorder) {\n this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n\n this.recorder.getBuffer((buffer: Float32Array[]) => {\n if (this.contextManager && this.contextManager.currentContext) {\n this.contextManager.currentContext.resume();\n\n const newBuffer = this.contextManager.currentContext.createBuffer(2, buffer[0].length, this.contextManager.currentContext.sampleRate);\n newBuffer.getChannelData(0).set(buffer[0]);\n newBuffer.getChannelData(1).set(buffer[1]);\n\n this.eventEmitter?.emit(EventType.RECORDER_STOPPED, newBuffer);\n this.reset();\n }\n });\n }\n }\n\n pause() {\n if (this.alreadyInit) {\n this.recorder && this.recorder.stop();\n this.timer && this.timer.stop();\n this.recording = false;\n this.eventEmitter?.emit(EventType.RECORDER_PAUSED);\n }\n }\n\n /**\n * Stop stream\n */\n private stopStream() {\n if (this.stream) {\n const tracks = this.stream.getTracks();\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n tracks[i].stop();\n }\n }\n }\n\n reset() {\n this.recorder && this.recorder.kill();\n this.timer && this.timer.stop();\n this.audioFeedback(false);\n\n this.stopStream();\n\n this.input = null;\n this.recorder = null;\n this.stream = null;\n this.alreadyInit = false;\n this.timer = null;\n\n this.eventEmitter?.emit(EventType.RECORDER_RESETED);\n }\n\n get currentTimeDisplay() {\n return this.timer?.seconds ? (\"0\" + Math.trunc(this.timer?.seconds / 60)).slice(-2) + \":\" + (\"0\" + Math.trunc(this.timer?.seconds % 60)).slice(-2) : \"00:00\";\n }\n\n get currentTime() {\n return this.timer ? this.timer.seconds : 0;\n }\n\n getSettings(): RecorderSettings {\n return {\n deviceList: this.deviceList,\n audioFeedback: this.enableAudioFeedback,\n constraints: this.constraints.audio\n };\n }\n\n on(event: string, callback: EventEmitterCallback) {\n this.eventEmitter?.on(event, callback);\n }\n\n isRecordingAvailable() {\n return typeof (navigator.mediaDevices) !== \"undefined\" && typeof (navigator.mediaDevices.getUserMedia) !== \"undefined\";\n }\n\n get order(): number {\n return -1;\n }\n\n get id(): string {\n throw Constants.VOICE_RECORDER;\n }\n}\n","import \"reflect-metadata\";\nimport { Container } from \"inversify\";\nimport { TYPES } from \"./inversify.types\";\nimport AudioContextManagerInterface from \"./audioEditor/interfaces/AudioContextManagerInterface\";\nimport AudioContextManager from \"./audioEditor/AudioContextManager\";\nimport AudioEditorInterface from \"./audioEditor/interfaces/AudioEditorInterface\";\nimport AudioProcessorInterface from \"./audioEditor/interfaces/AudioProcessorInterface\";\nimport BufferManagerInterface from \"./audioEditor/interfaces/BufferManagerInterface\";\nimport FilterManagerInterface from \"./audioEditor/interfaces/FilterManagerInterface\";\nimport RendererManagerInterface from \"./audioEditor/interfaces/RendererManagerInterface\";\nimport SaveBufferManagerInterface from \"./audioEditor/interfaces/SaveBufferManagerInteface\";\nimport AudioEditor from \"./audioEditor/AudioEditor\";\nimport AudioProcessor from \"./audioEditor/AudioProcessor\";\nimport BufferManager from \"./audioEditor/BufferManager\";\nimport FilterManager from \"./audioEditor/FilterManager\";\nimport RendererManager from \"./audioEditor/RendererManager\";\nimport SaveBufferManager from \"./audioEditor/SaveBufferManager\";\nimport EventEmitterInterface from \"./utils/interfaces/EventEmitterInterface\";\nimport EventEmitter from \"./utils/EventEmitter\";\nimport BufferPlayerInterface from \"./bufferPlayer/interfaces/BufferPlayerInterface\";\nimport BufferPlayer from \"./bufferPlayer/BufferPlayer\";\nimport BufferFetcherServiceInterface from \"./services/interfaces/BufferFetcherServiceInterface\";\nimport BufferDecoderServiceInterface from \"./services/interfaces/BufferDecoderServiceInterface\";\nimport BufferFetcherService from \"./services/BufferFetcherService\";\nimport BufferDecoderService from \"./services/BufferDecoderService\";\nimport AbstractAudioRenderer from \"./filters/interfaces/AbstractAudioRenderer\";\nimport ReturnAudioRenderer from \"./filters/ReturnAudioRenderer\";\nimport BassBoosterFilter from \"./filters/BassBoosterFilter\";\nimport BitCrusherFilter from \"./filters/BitCrusherFilter\";\nimport EchoFilter from \"./filters/EchoFilter\";\nimport HighPassFilter from \"./filters/HighPassFilter\";\nimport LimiterFilter from \"./filters/LimiterFilter\";\nimport LowPassFilter from \"./filters/LowPassFilter\";\nimport ReverbFilter from \"./filters/ReverbFilter\";\nimport SoundtouchWrapperFilter from \"./filters/SountouchWrapperFilter\";\nimport TelephonizerFilter from \"./filters/TelephonizerFilter\";\nimport VocoderFilter from \"./filters/VocoderFilter\";\nimport PassThroughFilter from \"./filters/PassThroughFilter\";\nimport AbstractAudioFilter from \"./filters/interfaces/AbstractAudioFilter\";\nimport AudioFilterEntrypointInterface from \"./filters/interfaces/AudioFilterEntrypointInterface\";\nimport VoiceRecorderInterface from \"./voiceRecorder/interfaces/VoiceRecorderInterface\";\nimport VoiceRecorder from \"./voiceRecorder/VoiceRecorder\";\n\nconst audioEditorContainer = new Container({ defaultScope: \"Singleton\" });\n\n// Entrypoint filter\naudioEditorContainer.bind(TYPES.EntryPointFilter).to(SoundtouchWrapperFilter);\n\n// Renderers\naudioEditorContainer.bind(TYPES.Renderers).to(ReturnAudioRenderer);\n\n// Filters\naudioEditorContainer.bind(TYPES.Filters).toDynamicValue(() => audioEditorContainer.get(TYPES.EntryPointFilter));\naudioEditorContainer.bind(TYPES.Filters).to(BassBoosterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(BitCrusherFilter);\naudioEditorContainer.bind(TYPES.Filters).to(EchoFilter);\naudioEditorContainer.bind(TYPES.Filters).to(HighPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LimiterFilter);\naudioEditorContainer.bind(TYPES.Filters).to(LowPassFilter);\naudioEditorContainer.bind(TYPES.Filters).to(ReverbFilter);\naudioEditorContainer.bind(TYPES.Filters).to(TelephonizerFilter);\naudioEditorContainer.bind(TYPES.Filters).to(VocoderFilter);\naudioEditorContainer.bind(TYPES.Filters).to(PassThroughFilter);\n\n// Services\naudioEditorContainer.bind(TYPES.EventEmitter).to(EventEmitter);\naudioEditorContainer.bind(TYPES.AudioContextManager).to(AudioContextManager);\naudioEditorContainer.bind(TYPES.AudioEditor).to(AudioEditor);\naudioEditorContainer.bind(TYPES.AudioProcessor).to(AudioProcessor);\naudioEditorContainer.bind(TYPES.BufferManager).to(BufferManager);\naudioEditorContainer.bind(TYPES.FilterManager).to(FilterManager);\naudioEditorContainer.bind(TYPES.RendererManager).to(RendererManager);\naudioEditorContainer.bind(TYPES.SaveBufferManager).to(SaveBufferManager);\naudioEditorContainer.bind(TYPES.BufferPlayer).to(BufferPlayer);\naudioEditorContainer.bind(TYPES.BufferFetcherService).to(BufferFetcherService);\naudioEditorContainer.bind(TYPES.BufferDecoderService).to(BufferDecoderService);\naudioEditorContainer.bind(TYPES.VoiceRecorder).to(VoiceRecorder);\n\nexport { audioEditorContainer };\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nimport { PitchShifter } from \"soundtouchjs\";\nimport Constants from \"../model/Constants\";\nimport AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport AudioFilterEntrypointInterface from \"./interfaces/AudioFilterEntrypointInterface\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport utils from \"../utils/Functions\";\nimport SoundtouchWrapperFilterWorkletNode from \"./worklets/SoundtouchWrapperFilterWorkletNode\";\nimport SimpleAudioWorkletProcessor from \"../workletPolyfill/SimpleAudioWorkletProcessor\";\nimport SoundtouchSettings from \"../model/filtersSettings/SoundtouchSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class SoundtouchWrapperFilter extends AbstractAudioFilterWorklet implements AudioFilterEntrypointInterface {\n\n private speedAudio = 1;\n private frequencyAudio = 1;\n private currentSpeedAudio = 1;\n private currentPitchShifterWorklet: typeof SoundtouchWrapperFilterWorkletNode;\n private currentPitchShifter: PitchShifter;\n private isOfflineMode = false;\n\n constructor() {\n super();\n this.enable();\n this.setDefaultEnabled(true);\n }\n\n async initializeWorklet(): Promise {\n // Do nothing\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.SOUNDTOUCH;\n }\n\n constructAudioWorkletProcessor(): SimpleAudioWorkletProcessor {\n throw new Error(\"Method not implemented.\");\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.SOUNDTOUCH;\n }\n\n async getEntrypointNode(context: BaseAudioContext, buffer: AudioBuffer, offline: boolean): Promise {\n this.isOfflineMode = offline;\n\n this.cleanUpOldNodes();\n\n // In offline (compatibility) mode\n if (offline) {\n // If the settings are untouched, we don't use Soundtouch\n if (!this.isEnabled() || (this.speedAudio == 1 && this.frequencyAudio == 1)) {\n // Just return an audio buffer source node\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n return {\n input: bufferSource,\n output: bufferSource\n };\n } else {\n // If audio worklet is enabled for soundtouch, and if the speed of audio is untouched\n // Soundtouch Audio Worklet don't support speed editing yet\n if (this.isAudioWorkletEnabled() && utils.isAudioWorkletCompatible(context) && this.speedAudio == 1) {\n return this.renderWithWorklet(buffer, context);\n } else {\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n }\n\n // Not in offline mode: get classic soundtouch script processor node\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, context);\n this.updateState();\n\n return {\n input: this.currentPitchShifter,\n output: this.currentPitchShifter\n };\n }\n\n /** Cleanup old nodes (worklets, pitch shifter) */\n private cleanUpOldNodes() {\n // Stop current worklet\n if (this.currentPitchShifterWorklet) {\n this.currentPitchShifterWorklet.stop();\n this.currentPitchShifterWorklet.disconnect();\n }\n\n if (this.currentPitchShifter) {\n this.currentPitchShifter.disconnect();\n this.currentPitchShifter._filter = null;\n }\n }\n\n private getSoundtouchScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): AudioNode {\n return new PitchShifter(context, buffer, Constants.SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE);\n }\n\n /**\n * Use script processor node (deprecated) to render the audio buffer with Soundtouch, according to the current settings.\n * Not working on Firefox\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithScriptProcessorNode(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n const offlineContext = new OfflineAudioContext(2, context.sampleRate * durationAudio, context.sampleRate);\n\n this.currentPitchShifter = this.getSoundtouchScriptProcessorNode(buffer, offlineContext);\n this.updateState();\n\n this.currentPitchShifter.connect(offlineContext.destination);\n\n const renderedBuffer = await offlineContext.startRendering();\n\n const bufferSourceRendered = context.createBufferSource();\n bufferSourceRendered.buffer = renderedBuffer;\n bufferSourceRendered.start();\n\n this.cleanUpOldNodes();\n\n return {\n input: bufferSourceRendered,\n output: bufferSourceRendered\n };\n }\n\n /**\n * EXPERIMENTAL - Use audio worklet to render the audio buffer with Soundtouch, according to the current settings.\n * Working in Firefox and Chrome\n * @param buffer Audio buffer\n * @param context Audio context\n * @returns A promise resolving to audio nodes with the rendered audio as a buffer source\n */\n private async renderWithWorklet(buffer: AudioBuffer, context: BaseAudioContext): Promise {\n const durationAudio = utils.calcAudioDuration(buffer, this.speedAudio);\n\n try {\n // Setup worklet JS module\n await context.audioWorklet.addModule((this.configService ? this.configService.getWorkletBasePath() : \"\") + Constants.WORKLET_PATHS.SOUNDTOUCH);\n\n // Setup an audio buffer source from the audio buffer\n const bufferSource = context.createBufferSource();\n bufferSource.buffer = buffer;\n bufferSource.start();\n\n // Create the worklet node\n this.currentPitchShifterWorklet = new SoundtouchWrapperFilterWorkletNode(context, \"soundtouch-worklet\", {\n processorOptions: {\n bypass: false,\n recording: false,\n nInputFrames: this.approximateNInputFrames(durationAudio, context),\n updateInterval: 10.0,\n sampleRate: buffer.sampleRate\n },\n });\n\n // Connect the node for correct rendering\n bufferSource.connect(this.currentPitchShifterWorklet.node);\n\n // Setup pitch/speed of Soundtouch\n if (this.isEnabled()) {\n await this.currentPitchShifterWorklet.setup(this.speedAudio, this.frequencyAudio);\n } else {\n await this.currentPitchShifterWorklet.setup(1, 1);\n }\n\n return {\n input: this.currentPitchShifterWorklet,\n output: this.currentPitchShifterWorklet\n };\n } catch (e) {\n // Fallback to script processor node\n console.error(e);\n return this.renderWithScriptProcessorNode(buffer, context);\n }\n }\n\n private approximateNInputFrames(durationAudio: number, context: BaseAudioContext) {\n // {frequencyAudio, multiplicator}: {{0.1, 10}, {0.2, 5}, {0.3, 3.33}, {0.4, 2.5}, {0.5, 2}, {0.6, 1.67}, {0.7, 1.43}, {0.8, 1.25}, {0.9, 1.11}, {1, 1}}\n return durationAudio * context.sampleRate * (Math.round(14 * Math.exp(-4 * this.frequencyAudio)) + 1);\n }\n\n get order(): number {\n return 2;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.SOUNDTOUCH;\n }\n\n getSettings(): SoundtouchSettings {\n return {\n speedAudio: this.speedAudio,\n frequencyAudio: this.frequencyAudio\n };\n }\n\n protected isAudioWorkletEnabled() {\n if (this.configService) {\n return this.configService.isSoundtouchAudioWorkletEnabled();\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n private getCurrentPitchShifter() {\n if (this.isOfflineMode) {\n // If the settings are untouched, we don't use Soundtouch\n if (this.speedAudio == 1 && this.frequencyAudio == 1) {\n return null;\n } else {\n if (this.isAudioWorkletEnabled() && this.currentPitchShifterWorklet && this.speedAudio == 1) {\n return this.currentPitchShifterWorklet;\n } else {\n return this.currentPitchShifter;\n }\n }\n }\n\n return this.currentPitchShifter;\n }\n\n updateState(): void {\n const pitchShifter = this.getCurrentPitchShifter();\n\n if (!this.isEnabled()) {\n if (pitchShifter) {\n pitchShifter.pitch = 1;\n pitchShifter.tempo = 1;\n }\n\n this.currentSpeedAudio = 1;\n } else {\n if (pitchShifter) {\n pitchShifter.pitch = this.frequencyAudio;\n pitchShifter.tempo = this.speedAudio;\n }\n\n this.currentSpeedAudio = this.speedAudio;\n }\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n const valueFloat = parseFloat(value as string);\n\n switch (settingId) {\n case \"speedAudio\":\n this.speedAudio = valueFloat;\n break;\n case \"frequencyAudio\":\n this.frequencyAudio = valueFloat;\n break;\n default:\n break;\n }\n\n this.updateState();\n }\n\n setEnabled(state: boolean): void {\n super.setEnabled(state);\n this.updateState();\n }\n\n getSpeed(): number {\n return this.currentSpeedAudio;\n }\n}\n","import AbstractAudioRenderer from \"./interfaces/AbstractAudioRenderer\";\nimport Constants from \"../model/Constants\";\n\nexport default class ReturnAudioRenderer extends AbstractAudioRenderer {\n\n renderAudio(context: BaseAudioContext, buffer: AudioBuffer): Promise {\n return new Promise(resolve => {\n const numChannels = buffer.numberOfChannels;\n const totalFrames = context.sampleRate * buffer.duration + context.sampleRate * 2;\n const bufferReturned = context.createBuffer(numChannels, totalFrames, context.sampleRate);\n\n for (let channel = 0; channel < numChannels; channel++) {\n const nowBuffering = bufferReturned.getChannelData(channel);\n const sourceChannelData = buffer.getChannelData(channel);\n\n for (let i = 0; i < totalFrames; i++) {\n if (i < sourceChannelData.length) {\n nowBuffering[i] = sourceChannelData[sourceChannelData.length - 1 - i];\n } else {\n nowBuffering[i] = 0;\n }\n }\n }\n\n resolve(bufferReturned);\n });\n }\n\n get order(): number {\n return 0;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.RETURN_AUDIO;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport BassBoosterSettings from \"../model/filtersSettings/BassBoosterSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BassBoosterFilter extends AbstractAudioFilter {\n private frequencyBooster = 200;\n private frequencyReduce = 200;\n private dbBooster = 15;\n private dbReduce = -2;\n\n getNode(context: BaseAudioContext) {\n const bassBoostFilter = context.createBiquadFilter();\n bassBoostFilter.type = \"lowshelf\";\n bassBoostFilter.frequency.value = this.frequencyBooster;\n bassBoostFilter.gain.value = this.dbBooster;\n\n const bassBoostFilterHighFreq = context.createBiquadFilter();\n bassBoostFilterHighFreq.type = \"highshelf\";\n bassBoostFilterHighFreq.frequency.value = this.frequencyReduce;\n bassBoostFilterHighFreq.gain.value = this.dbReduce;\n bassBoostFilterHighFreq.connect(bassBoostFilter);\n\n return {\n input: bassBoostFilterHighFreq,\n output: bassBoostFilter\n };\n }\n \n get order(): number {\n return 3;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BASS_BOOST;\n }\n\n getSettings(): BassBoosterSettings {\n return {\n frequencyBooster: this.frequencyBooster,\n frequencyReduce: this.frequencyReduce,\n dbBooster: this.dbBooster,\n dbReduce: this.dbReduce,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch(settingId) {\n case \"frequencyBooster\":\n this.frequencyBooster = parseInt(value as string);\n break;\n case \"frequencyReduce\":\n this.frequencyReduce = parseInt(value as string);\n break;\n case \"dbBooster\":\n this.dbBooster = parseInt(value as string);\n break;\n case \"dbReduce\":\n this.dbReduce = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport BitCrusherSettings from \"../model/filtersSettings/BitCrusherSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport \"./worklets/BitCrusher.worklet\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilterWorklet {\n private bits = 16;\n private normFreq = 0.9;\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n receiveEvent(message: MessageEvent): void {\n // Do nothing\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.BITCRUSHER;\n }\n \n get workletName(): string {\n return Constants.WORKLET_NAMES.BITCRUSHER;\n }\n\n get order(): number {\n return 6;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.BITCRUSHER;\n }\n\n getSettings(): BitCrusherSettings {\n return {\n bits: this.bits,\n normFreq: this.normFreq,\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n\n switch (settingId) {\n case \"bits\":\n this.bits = parseInt(value as string);\n break;\n case \"normFreq\":\n this.normFreq = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToWorklet();\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport EchoSettings from \"../model/filtersSettings/EchoSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class EchoFilter extends AbstractAudioFilter {\n private delay = 0.2;\n private gain = 0.75;\n\n getNode(context: BaseAudioContext) {\n const delayNode = context.createDelay(179);\n delayNode.delayTime.value = this.delay;\n\n const gainNode = context.createGain();\n gainNode.gain.value = this.gain;\n\n gainNode.connect(delayNode);\n delayNode.connect(gainNode);\n\n return {\n input: gainNode,\n output: delayNode\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.ECHO;\n }\n\n getAddingTime() {\n return 5;\n }\n\n getSettings(): EchoSettings {\n return {\n delay: this.delay,\n gain: this.gain\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"delay\":\n this.delay = parseFloat(value as string);\n break;\n case \"gain\":\n this.gain = parseFloat(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport HighPassSettings from \"../model/filtersSettings/HighPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class HighPassFilter extends AbstractAudioFilter {\n private highFrequency = 3500;\n\n getNode(context: BaseAudioContext) {\n const highPassFilter = context.createBiquadFilter();\n highPassFilter.type = \"highpass\";\n highPassFilter.frequency.value = this.highFrequency;\n\n return {\n input: highPassFilter,\n output: highPassFilter\n };\n }\n \n get order(): number {\n return 4;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.HIGH_PASS;\n }\n\n getSettings(): HighPassSettings {\n return {\n highFrequency: this.highFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch(settingId) {\n case \"highFrequency\":\n this.highFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport LowPassSettings from \"../model/filtersSettings/LowPassSettings\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"../utils/Functions\";\n\nexport default class LowPassFilter extends AbstractAudioFilter {\n private lowFrequency = 3500;\n \n getNode(context: BaseAudioContext) {\n const lowPassFilter = context.createBiquadFilter();\n lowPassFilter.type = \"lowpass\";\n lowPassFilter.frequency.value = this.lowFrequency;\n\n return {\n input: lowPassFilter,\n output: lowPassFilter\n };\n }\n \n get order(): number {\n return 5;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.LOW_PASS;\n }\n\n getSettings(): LowPassSettings {\n return {\n lowFrequency: this.lowFrequency\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"lowFrequency\":\n this.lowFrequency = parseInt(value as string);\n break;\n }\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { ReverbEnvironment } from \"../model/ReverbEnvironment\";\nimport ReverbSettings from \"../model/filtersSettings/ReverbSettings\";\nimport GenericSettingValue from \"../model/filtersSettings/GenericSettingValue\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport utilFunctions from \"@/utils/Functions\";\n\nexport default class ReverbFilter extends AbstractAudioFilter {\n\n private reverbEnvironment: ReverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n private reverbCustomEnvironmentAddTime = 5;\n private customEnvironment: AudioBuffer | null = null;\n\n getNode(context: BaseAudioContext) {\n const convolver = context.createConvolver();\n\n if (!this.reverbEnvironment || (this.reverbEnvironment.url == \"custom\" && !this.customEnvironment)) {\n // Fallback to default environment otherwise\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n\n const buffer = this.getReverbBuffer(context);\n\n if (buffer) {\n convolver.buffer = buffer;\n }\n\n return {\n input: convolver,\n output: convolver\n };\n }\n\n private getReverbBuffer(context: BaseAudioContext): AudioBuffer | undefined {\n if (this.reverbEnvironment.url == \"custom\" && this.customEnvironment) {\n if (this.customEnvironment.sampleRate === context.sampleRate) {\n return this.customEnvironment;\n } else {\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n } else if (this.bufferFetcherService) {\n return this.bufferFetcherService.getAudioBuffer(this.reverbEnvironment.url);\n }\n\n return;\n }\n\n get order(): number {\n return 9;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.REVERB;\n }\n\n getAddingTime() {\n const settings = this.getSettings();\n\n if (settings && settings.reverbEnvironment) {\n if (settings.reverbEnvironment.value != \"custom\") {\n if (settings.reverbEnvironment.additionalData) {\n return settings.reverbEnvironment.additionalData.addDuration as number;\n }\n } else {\n return this.reverbCustomEnvironmentAddTime;\n }\n }\n\n return 0;\n }\n\n getSettings(): ReverbSettings {\n if (!this.reverbEnvironment) {\n return {\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n return {\n reverbEnvironment: {\n name: this.reverbEnvironment.name,\n value: this.reverbEnvironment.url,\n additionalData: {\n size: this.reverbEnvironment.size,\n link: this.reverbEnvironment.link,\n addDuration: this.reverbEnvironment.addDuration\n }\n },\n downloadedBuffers: this.bufferFetcherService?.getDownloadedBuffersList(),\n hasCustomEnvironment: this.customEnvironment ? true : false,\n reverbCustomEnvironmentAddTime: this.reverbCustomEnvironmentAddTime\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if (settingId == \"reverbEnvironment\") {\n const reverbEnvironment = value as GenericSettingValue;\n\n if (reverbEnvironment) {\n const url = reverbEnvironment.value;\n\n try {\n if (url != \"custom\") {\n await this.bufferFetcherService?.fetchBuffer(url);\n }\n\n if (reverbEnvironment.additionalData) {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: reverbEnvironment.additionalData.size as number,\n addDuration: reverbEnvironment.additionalData.addDuration as number,\n link: reverbEnvironment.additionalData.link as string\n };\n } else {\n this.reverbEnvironment = {\n name: reverbEnvironment.name,\n url,\n size: 0,\n addDuration: 0,\n link: \"\"\n };\n }\n } catch (e) { /* empty */ }\n }\n } else if (settingId == \"reverbCustomEnvironmentAddTime\") {\n if (utilFunctions.isSettingValueValid(value)) {\n this.reverbCustomEnvironmentAddTime = parseInt(value as string);\n }\n } else if (settingId == \"reverbCustomEnvironmentFile\") {\n if (this.bufferDecoderService && value) {\n this.customEnvironment = await this.bufferDecoderService.decodeBufferFromFile(value as File);\n\n if (!this.customEnvironment) {\n // Fallback to default environment\n this.reverbEnvironment = Constants.DEFAULT_REVERB_ENVIRONMENT;\n }\n }\n }\n }\n \n async bufferFetcherReseted() {\n const reverbSettings = this.getSettings();\n \n if (reverbSettings) {\n const reverbUrl = (reverbSettings as ReverbSettings).reverbEnvironment?.value;\n \n if (reverbUrl && reverbUrl !== \"custom\" && this.bufferFetcherService) {\n await this.bufferFetcherService.fetchBuffer(reverbUrl);\n return true;\n }\n }\n\n return false;\n }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport Constants from \"../model/Constants\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class BitCrusherFilter extends AbstractAudioFilter {\n\n getNode(context: BaseAudioContext) {\n const lpf1 = context.createBiquadFilter();\n lpf1.type = \"lowpass\";\n lpf1.frequency.value = 2000.0;\n const lpf2 = context.createBiquadFilter();\n lpf2.type = \"lowpass\";\n lpf2.frequency.value = 2000.0;\n const hpf1 = context.createBiquadFilter();\n hpf1.type = \"highpass\";\n hpf1.frequency.value = 500.0;\n const hpf2 = context.createBiquadFilter();\n hpf2.type = \"highpass\";\n hpf2.frequency.value = 500.0;\n lpf1.connect(lpf2);\n lpf2.connect(hpf1);\n hpf1.connect(hpf2);\n \n return {\n input: lpf1,\n output: hpf2\n };\n }\n \n get order(): number {\n return 7;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.TELEPHONIZER;\n }\n\n getSettings() {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import AbstractAudioFilter from \"./interfaces/AbstractAudioFilter\";\nimport { AudioFilterNodes } from \"../model/AudioNodes\";\nimport Constants from \"../model/Constants\";\nimport Vocoder from \"../utils/Vocoder\";\nimport VocoderSettings from \"../model/filtersSettings/VocoderSettings\";\nimport utilFunctions from \"../utils/Functions\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\n\nexport default class VocoderFilter extends AbstractAudioFilter {\n\n private currentVocoder: Vocoder | null = null;\n private modulatorGainValue = 1.0;\n private carrierSampleGainValue = 0;\n private oscillatorGainValue = 1.0;\n private noiseGainValue = 0.2;\n private oscillatorDetuneValue = 0;\n\n getNode(context: BaseAudioContext): AudioFilterNodes {\n const modulatorBuffer = this.bufferFetcherService?.getAudioBuffer(Constants.VOCODER_MODULATOR);\n\n this.currentVocoder = new Vocoder(context, modulatorBuffer!);\n this.currentVocoder.init();\n this.applyCurrentSettingsToVocoder();\n\n const { modulatorGain, outputGain } = this.currentVocoder.getNodes();\n\n return {\n input: modulatorGain!,\n output: outputGain!\n };\n }\n\n getSettings(): VocoderSettings {\n return {\n modulatorGainValue: this.modulatorGainValue,\n carrierSampleGainValue: this.carrierSampleGainValue,\n oscillatorGainValue: this.oscillatorGainValue,\n noiseGainValue: this.noiseGainValue,\n oscillatorDetuneValue: this.oscillatorDetuneValue\n };\n }\n\n async setSetting(settingId: string, value: FilterSettingValue) {\n if(!utilFunctions.isSettingValueValid(value)) {\n return;\n }\n \n switch (settingId) {\n case \"modulatorGainValue\":\n this.modulatorGainValue = parseFloat(value as string);\n break;\n case \"carrierSampleGainValue\":\n this.carrierSampleGainValue = parseFloat(value as string);\n break;\n case \"oscillatorGainValue\":\n this.oscillatorGainValue = parseFloat(value as string);\n break;\n case \"noiseGainValue\":\n this.noiseGainValue = parseFloat(value as string);\n break;\n case \"oscillatorDetuneValue\":\n this.oscillatorDetuneValue = parseFloat(value as string);\n break;\n }\n\n this.applyCurrentSettingsToVocoder();\n }\n\n private applyCurrentSettingsToVocoder() {\n if(this.currentVocoder) {\n this.currentVocoder.updateModGain(this.modulatorGainValue);\n this.currentVocoder.updateSampleLevel(this.carrierSampleGainValue);\n this.currentVocoder.updateSynthLevel(this.oscillatorGainValue);\n this.currentVocoder.updateNoiseLevel(this.noiseGainValue);\n this.currentVocoder.updateDetuneValue(this.oscillatorDetuneValue);\n }\n }\n \n get order(): number {\n return 1;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.VOCODER;\n }\n}\n","import AbstractAudioFilterWorklet from \"./interfaces/AbstractAudioFilterWorklet\";\nimport Constants from \"../model/Constants\";\nimport \"./worklets/Passthrough.worklet\";\nimport { FilterSettingValue } from \"../model/filtersSettings/FilterSettings\";\nimport PassThroughWorkletEvent from \"@/model/PassThroughWorkletEvent\";\nimport { EventType } from \"@/model/EventTypeEnum\";\n\nexport default class PassThroughFilter extends AbstractAudioFilterWorklet {\n\n private currentTime = 0;\n private lastSampleCount = 0;\n private samplePerSecond = 0;\n private currentTimeSamplesPerSecond = 0;\n\n receiveEvent(message: MessageEvent): void {\n const currentTime = performance.now();\n const samplesProcessed = message.data.samplesCount;\n\n if (message.data.command === \"update\") {\n this.calculatePercentageProcessed(currentTime, samplesProcessed);\n }\n\n this.calculateRemainingTimeProcessing(currentTime, samplesProcessed);\n }\n\n /**\n * Calculate percentage processed\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculatePercentageProcessed(currentTime: number, samplesProcessed: number) {\n if (this.currentTime === 0) {\n this.currentTime = currentTime;\n }\n\n const timeDifference = currentTime - this.currentTime;\n const percentageProcessed = (samplesProcessed / this._totalSamples);\n\n if (this.eventEmitter && timeDifference >= Constants.TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL) {\n this.eventEmitter.emit(EventType.UPDATE_AUDIO_TREATMENT_PERCENT, percentageProcessed * 100);\n this.currentTime = currentTime;\n }\n }\n\n /**\n * Calculate remaining time to process the audio\n * @param currentTime Current time (ms)\n * @param samplesProcessed Samples count processed\n */\n private calculateRemainingTimeProcessing(currentTime: number, samplesProcessed: number) {\n if (this.currentTimeSamplesPerSecond === 0) {\n this.currentTimeSamplesPerSecond = currentTime;\n }\n\n const timeDifferenceSamplePerSecond = currentTime - this.currentTimeSamplesPerSecond;\n const remainingSamples = this._totalSamples - samplesProcessed;\n\n if (this.eventEmitter && remainingSamples <= 0) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, 0);\n return;\n }\n\n if (this.eventEmitter && timeDifferenceSamplePerSecond >= 1000) {\n this.calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond, samplesProcessed);\n\n const remainingTimeSeconds = remainingSamples / this.samplePerSecond;\n\n this.currentTimeSamplesPerSecond = currentTime;\n this.lastSampleCount = samplesProcessed;\n\n if (isNaN(remainingTimeSeconds) || !isFinite(remainingTimeSeconds)) {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, -1);\n } else {\n this.eventEmitter.emit(EventType.UPDATE_REMAINING_TIME_ESTIMATED, remainingTimeSeconds);\n }\n }\n }\n\n /**\n * Calculate smoothed samples per second\n * @param timeDifferenceSamplePerSecond Time difference \n * @param samplesProcessed Samples count processed\n * @returns Smoothed samples per second\n */\n private calculateSmoothedSamplePerSecond(timeDifferenceSamplePerSecond: number, samplesProcessed: number): void {\n if (timeDifferenceSamplePerSecond > 0) {\n const currentSampleRate = (samplesProcessed - this.lastSampleCount) / (timeDifferenceSamplePerSecond / 1000);\n this.samplePerSecond = (Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR * currentSampleRate) + ((1 - Constants.TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR) * this.samplePerSecond);\n }\n }\n\n get workletName(): string {\n return Constants.WORKLET_NAMES.PASSTHROUGH;\n }\n\n get workletPath(): string {\n return Constants.WORKLET_PATHS.PASSTHROUGH;\n }\n\n get order(): number {\n return 10;\n }\n\n get id(): string {\n return Constants.FILTERS_NAMES.PASSTHROUGH;\n }\n\n set totalSamples(value: number) {\n super.totalSamples = value;\n this.currentTime = 0;\n this.currentTimeSamplesPerSecond = 0;\n this.samplePerSecond = 0;\n this.lastSampleCount = 0;\n }\n\n getSettings() {\n return {};\n }\n\n isEnabled(): boolean {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setSetting(settingId: string, value: FilterSettingValue) { }\n}\n","import { injectable } from \"inversify\";\nimport Constants from \"../model/Constants\";\nimport { ConfigService } from \"./interfaces/ConfigService\";\n\n/**\n * Default implementation for a ConfigService, using a built-in map.\n * The configuration is not stored in localstorage in this case.\n */\n@injectable()\nexport default class GenericConfigService implements ConfigService {\n\n private mapConfig = new Map();\n\n getConfig(key: string): string | undefined | null {\n return this.mapConfig.get(key);\n }\n\n setConfig(key: string, value: string): void {\n this.mapConfig.set(key, value);\n }\n\n isCompatibilityModeEnabled(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED) == \"true\";\n }\n\n isCompatibilityModeChecked(): boolean {\n return this.getConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_CHECKED) == \"true\";\n }\n\n isAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_AUDIO_WORKLET;\n }\n\n isSoundtouchAudioWorkletEnabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.ENABLE_SOUNDTOUCH_AUDIO_WORKLET);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.ENABLE_SOUNDTOUCH_AUDIO_WORKLET;\n }\n\n getBufferSize(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BUFFER_SIZE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_BUFFER_SIZE;\n }\n\n getSampleRate(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.SAMPLE_RATE);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_SAMPLE_RATE;\n }\n\n getBitrateMP3(): number {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.BITRATE_MP3);\n\n if(setting != null) {\n return parseInt(setting);\n }\n\n return Constants.DEFAULT_MP3_BITRATE;\n }\n\n enableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"true\");\n }\n\n disableCompatibilityMode() {\n this.setConfig(Constants.PREFERENCES_KEYS.COMPATIBILITY_MODE_ENABLED, \"false\");\n }\n\n getWorkletBasePath(): string {\n return \"\";\n }\n\n getWorkerBasePath(): string {\n return \"\";\n }\n\n getSoundBasePath(): string {\n return \"\";\n }\n\n isInitialRenderingDisabled(): boolean {\n const setting = this.getConfig(Constants.PREFERENCES_KEYS.DISABLE_INITIAL_RENDERING);\n\n if(setting != null) {\n return setting == \"true\";\n }\n\n return Constants.DISABLE_INITIAL_RENDERING;\n }\n};\n","import { TYPES } from \"@/inversify.types\";\nimport AudioEditorInterface from \"@/audioEditor/interfaces/AudioEditorInterface\";\nimport { audioEditorContainer } from \"@/inversify.config\";\nimport { ConfigService } from \"@/services/interfaces/ConfigService\";\nimport EventEmitterInterface from \"./interfaces/EventEmitterInterface\";\nimport BufferPlayerInterface from \"@/bufferPlayer/interfaces/BufferPlayerInterface\";\nimport GenericConfigService from \"@/services/GenericConfigService\";\nimport VoiceRecorderInterface from \"@/voiceRecorder/interfaces/VoiceRecorderInterface\";\n\nexport default class SoundStudioFactory {\n\n private static ready = false;\n\n static createAudioEditor(configService?: ConfigService, buffersToFetch?: string[]): AudioEditorInterface {\n if (!SoundStudioFactory.ready) {\n if (configService) {\n audioEditorContainer.bind(TYPES.ConfigService).toDynamicValue(() => configService);\n } else {\n audioEditorContainer.bind(TYPES.ConfigService).to(GenericConfigService);\n console.warn(\"No ConfigService provided. Using default generic implementation.\");\n }\n \n audioEditorContainer.bind(TYPES.AudioBuffersToFetch).toConstantValue(buffersToFetch || []);\n SoundStudioFactory.ready = true;\n }\n\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static createVoiceRecorder(): VoiceRecorderInterface {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getAudioEditorInstance(): AudioEditorInterface | null {\n return audioEditorContainer.get(TYPES.AudioEditor);\n }\n\n static getAudioPlayerInstance(): BufferPlayerInterface | null {\n return audioEditorContainer.get(TYPES.BufferPlayer);\n }\n\n static getAudioRecorderInstance(): VoiceRecorderInterface | null {\n return audioEditorContainer.get(TYPES.VoiceRecorder);\n }\n\n static getEventEmitterInstance(): EventEmitterInterface | null {\n return audioEditorContainer.get(TYPES.EventEmitter);\n }\n\n static getConfigServiceInstance(): ConfigService | undefined {\n return audioEditorContainer.get(TYPES.ConfigService);\n }\n}\n"],"names":["Reflect","factory","root","globalThis","global","self","this","Function","_","functionThis","eval","indirectEvalThis","exporter","makeExporter","target","previous","key","value","Object","defineProperty","configurable","writable","hasOwn","prototype","hasOwnProperty","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","create","supportsProto","__proto__","Array","downLevel","HashMap","MakeDictionary","has","map","call","get","undefined","functionPrototype","getPrototypeOf","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","registrySymbol","for","metadataRegistry","GetOrCreateMetadataRegistry","metadataProvider","CreateMetadataProvider","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","provider","GetMetadataProvider","OrdinaryDeleteMetadata","i","length","decorated","descriptor","MetadataKey","O","P","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","set","keys","_i","ownKeys_1","add","push","_a","parentKeys_1","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","valueOf","toString_1","toString","IsCallable","argument","ToString","isArray","SameValueZero","y","V","func","GetIterator","obj","method","IteratorValue","iterResult","IteratorStep","next","done","IteratorClose","f","proto","prototypeProto","constructor","CreateMetadataRegistry","fallback","first","second","rest","CreateFallbackProvider","targetProviderMap","registry","registerProvider","getProvider","setProvider","isExtensible","Error","getProviderNoCache","isProviderFor","providerMap","hasProvider","existingProvider","enumerable","targetMetadata","GetOrCreateMetadataMap","Create","createdTargetMetadata","metadataMap","delete","k","nextValue","e","size","reflect","metadataOwner","metadataPropertySet","registeredProvider","cacheSentinel","arraySentinel","MapIterator","values","selector","_index","_keys","_values","_selector","index","throw","error","return","_cacheKey","_cacheIndex","_find","clear","getKey","getValue","getEntry","insert","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","Math","random","GenRandomBytes","Uint8Array","array","crypto","getRandomValues","msCrypto","data","offset","byte","toLowerCase","__","NAMED_TAG","NAME_TAG","UNMANAGED_TAG","OPTIONAL_TAG","INJECT_TAG","MULTI_INJECT_TAG","TAGGED","TAGGED_PROP","PARAM_TYPES","POST_CONSTRUCT","PRE_DESTROY","NON_CUSTOM_TAG_KEYS","BindingScopeEnum","Request","Singleton","Transient","BindingTypeEnum","ConstantValue","Constructor","DynamicValue","Factory","Instance","Invalid","Provider","TargetTypeEnum","ClassProperty","ConstructorArgument","Variable","idCounter","id","Binding","serviceIdentifier","scope","activated","type","constraint","request","implementationType","cache","onActivation","onDeactivation","dynamicValue","clone","DUPLICATED_METADATA","NULL_ARGUMENT","KEY_NOT_FOUND","AMBIGUOUS_MATCH","NOT_REGISTERED","MISSING_INJECTABLE_ANNOTATION","MISSING_INJECT_ANNOTATION","CIRCULAR_DEPENDENCY","INVALID_DECORATOR_OPERATION","ARGUMENTS_LENGTH_MISMATCH","arguments","POST_CONSTRUCT_ERROR","clazz","errorMessage","PRE_DESTROY_ERROR","ON_DEACTIVATION_ERROR","STACK_OVERFLOW","MetadataReader","getConstructorMetadata","constructorFunc","compilerGeneratedMetadata","METADATA_KEY.PARAM_TYPES","userGeneratedMetadata","METADATA_KEY.TAGGED","getPropertiesMetadata","METADATA_KEY.TAGGED_PROP","BindingCount","MultipleBindingsAvailable","NoBindingsAvailable","OnlyOneBindingAvailable","isStackOverflowExeption","RangeError","message","ERROR_MSGS.STACK_OVERFLOW","getServiceIdentifierAsString","name","listRegisteredBindingsForServiceIdentifier","container","getBindings","registeredBindingsList","registeredBindings","forEach","binding","getFunctionName","metaData","alreadyDependencyChain","parentRequest","circularDependencyToException","childRequests","childRequest","services","stringArr","_createStringArr","req","reverse","join","dependencyChainToString","ERROR_MSGS.CIRCULAR_DEPENDENCY","name_1","match","Context","addPlan","plan","setCurrentRequest","currentRequest","Metadata","METADATA_KEY.NAMED_TAG","String","Plan","parentContext","rootRequest","LazyServiceIdentifier","cb","_cb","unwrap","QueryableString","str","startsWith","searchString","indexOf","endsWith","reverseString","reverseSearchString","split","contains","equals","compareString","Target","identifier","namedOrTagged","queryableName","slice","metadataItem","hasTag","METADATA_KEY.MULTI_INJECT_TAG","matchesArray","matchesTag","isNamed","isTagged","some","METADATA_KEY.NON_CUSTOM_TAG_KEYS","every","isOptional","METADATA_KEY.OPTIONAL_TAG","getNamedTag","filter","m","getCustomTags","matchesNamedTag","_this","__spreadArray","to","from","pack","ar","l","concat","getTargets","metadataReader","constructorName","isBaseClass","serviceIdentifiers","ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION","constructorArgsMetadata","hasUserDeclaredUnknownInjections","hasOptionalParameters","constructorTargets","iterations","targets","getConstructorArgsAsTarget","getConstructorArgsAsTargets","propertyTargets","getClassPropsAsTargets","formatTargetMetadata","isManaged","unmanaged","injectIdentifier","inject","multiInject","ERROR_MSGS.MISSING_INJECT_ANNOTATION","targetName","_getServiceIdentifierForProperty","propertyName","className","msg","classPropsMetadata","symbolKeys","getOwnPropertySymbols","keys_1","baseConstructor","baseTargets","getBaseClassDependencyCount","t","METADATA_KEY.UNMANAGED_TAG","unmanagedCount","apply","dependencyCount","targetMetadataMap","METADATA_KEY.INJECT_TAG","METADATA_KEY.NAME_TAG","bindings","requestScope","addChildRequest","child","getBindingDictionary","cntnr","_bindingDictionary","_getActiveBindings","avoidConstraints","context","activeBindings","options","autoBindInjectable","bind","toSelf","serviceIdentifierString","ERROR_MSGS.NOT_REGISTERED","m_1","namedTag","otherTags","tag","listMetadataForTarget","ERROR_MSGS.AMBIGUOUS_MATCH","_validateActiveBindingCount","_createSubRequests","thePlan","subChildRequest","dependencies","getDependencies","skipBaseClassChecks","baseClassDependencyCount","ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH","dependency","bindingDictionary","hasKey","isMultiInject","targetType","injectMetadata","tagMetadata","_createTarget","isPromise","object","then","isPromiseOrContainsPromise","FactoryType","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","rejected","__generator","body","g","label","sent","trys","ops","verb","n","v","op","pop","_saveToRequestScope","_saveToSingletonScope","_saveAsyncResultToSingletonScope","asyncResult","ex_1","__assign","assign","s","p","_createInstance","constr","resolveRequest","resolved","reduce","resolvedRequests","injection","constructorInjections","propertyRequests","propertyInjections","isAsync","_resolveRequests","createInstanceWithInjectionsArg","args","possiblyWaitInjections","createInstanceWithInjections","createInstanceWithInjectionsAsync","instance","r","property","possiblePromiseinjections","injections","possiblePromiseinjections_1","all","_getInstanceAfterPostConstruct","postConstructResult","_b","METADATA_KEY.POST_CONSTRUCT","_postConstruct","_validateInstanceResolution","scopeErrorMessage","METADATA_KEY.PRE_DESTROY","_throwIfHandlingDeactivation","_resolveRequest","targetIsAnArray","targetParentIsNotAnArray","_f","_resolveBinding","_resolveFactoryFromBinding","factoryDetails","factoryType","getFactoryDetails","fn","errorCallback","tryAndThrowErrorIfStackOverflow","_getResolvedFromBinding","boundValue","serviceIdentifierAsString","ERROR_MSGS.INVALID_BINDING_TYPE","ensureFullyBound","resolvedResult","resolveInstance","_resolveInScope","resolveFromBinding","tryGetFromScope","saveToScope","_onActivation","_bindingActivation","containersIterator","_getContainersIterator","containersIteratorResult","context_1","activationsIterator","_getContainerActivationsForService","_activateContainerAsync","_activateContainer","previousResult","activation","resultPromise","activations","_activations","containersStack","nextContainer","traverseAncerstors","taggedConstraint","namedConstraint","typeConstraint","BindingWhenSyntax","_binding","when","BindingOnSyntax","whenTargetNamed","whenTargetIsDefault","whenTargetTagged","whenInjectedInto","whenParentNamed","whenParentTagged","whenAnyAncestorIs","ancestor","whenNoAncestorIs","whenAnyAncestorNamed","whenNoAncestorNamed","whenAnyAncestorTagged","whenNoAncestorTagged","whenAnyAncestorMatches","whenNoAncestorMatches","handler","BindingWhenOnSyntax","_bindingWhenSyntax","_bindingOnSyntax","BindingInSyntax","inRequestScope","inSingletonScope","inTransientScope","BindingInWhenOnSyntax","_bindingInSyntax","BindingToSyntax","toConstantValue","toDynamicValue","toConstructor","toFactory","toFunction","bindingWhenOnSyntax","toAutoFactory","toAutoNamedFactory","named","getNamed","toProvider","toService","service","ContainerSnapshot","of","middleware","deactivations","moduleActivationStore","snapshot","Lookup","getMap","ERROR_MSGS.NULL_ARGUMENT","entry","ERROR_MSGS.KEY_NOT_FOUND","remove","removeIntersection","lookup","traverse","lookupActivations","filteredValues","lookupValue","moduleActivation","_setValue","removeByCondition","condition","removals","updatedEntries","entries_1","copy","b","ModuleActivationStore","moduleId","handlers","_getEmptyHandlersStore","addDeactivation","_getModuleActivationHandlers","onDeactivations","addActivation","onActivations","handlersStore","moduleActivationHandlers","Container","containerOptions","defaultScope","_snapshots","_middleware","_deactivations","_metadataReader","_moduleActivationStore","merge","container1","container2","containers","targetContainers","targetContainer","targetBindingDictionary","destination","load","modules","getHelpers","_getContainerModuleHelpersFactory","modules_1","currentModule","containerModuleHelpers","bindFunction","unbindFunction","isboundFunction","rebindFunction","unbindAsyncFunction","onActivationFunction","onDeactivationFunction","loadAsync","modules_2","unload","module","_removeModuleBindings","_deactivateSingletons","_removeModuleHandlers","unloadAsync","modules_3","module_1","_deactivateSingletonsAsync","rebind","unbind","rebindAsync","unbindAsync","_removeServiceFromDictionary","unbindAll","unbindAllAsync","promises","isBound","bound","isCurrentBound","isBoundNamed","isBoundTagged","request_1","createMockRequest","restore","createChild","applyMiddleware","middlewares","initial","_planAndResolve","prev","curr","applyCustomMetadataReader","getArgs","_getNotAllArgs","_getButThrowIfAsync","getAsync","_get","getTagged","getTaggedAsync","getNamedAsync","getAll","_getAllArgs","getAllAsync","_getAll","getAllTagged","getAllTaggedAsync","getAllNamed","getAllNamedAsync","constructorFunction","_preDestroy","moduleActivationsHandlers","_deactivate","_deactivateContainer","_handleDeactivationError","_propagateContainerDeactivationThenBindingAndPreDestroyAsync","propagateDeactivationResult","_propagateContainerDeactivationThenBindingAndPreDestroy","ex","ERROR_MSGS.ON_DEACTIVATION_ERROR","deactivationsIterator","deactivation","_deactivateContainerAsync","setModuleId","bindingToSyntax","getRebindFunction","getOnActivationFunction","getOnDeactivationFunction","mId","planAndResolveArgs","contextInterceptor","middlewareResult","_deactivateIfSingleton","bindings_1","_bindingDeactivationAndPreDestroy","_bindingDeactivationAndPreDestroyAsync","ERROR_MSGS.CANNOT_UNBIND","tagParameter","annotationTarget","parameterName","parameterIndex","ERROR_MSGS.INVALID_DECORATOR_OPERATION","_throwIfMethodParameter","_tagParameterOrProperty","_ensureNoMetadataKeyDuplicates","metadatas","duplicate","seenValues","array_1","getFirstArrayDuplicate","md","ERROR_MSGS.DUPLICATED_METADATA","paramsOrPropertiesMetadata","paramOrPropertyMetadata","_loop_1","paramOrPropertyMetadata_1","createTaggedDecorator","targetKey","indexOrPropertyDescriptor","tagProperty","injectable","types","injectBase","TYPES","AudioContextManager","AudioEditor","AudioProcessor","BufferManager","FilterManager","RendererManager","SaveBufferManager","ConfigService","EventEmitter","BufferPlayer","BufferDecoderService","BufferFetcherService","AudioBuffersToFetch","Renderers","Filters","EntryPointFilter","VoiceRecorder","__decorate","desc","d","c","getOwnPropertyDescriptor","__param","paramIndex","__metadata","EventType","SuppressedError","Constants","AUDIO_EDITOR","VOICE_RECORDER","BUFFER_PLAYER","AUDIO_CONTEXT_MANAGER","AUDIO_PROCESSOR","BUFFER_MANAGER","FILTER_MANAGER","RENDERER_MANAGER","SAVE_BUFFER_MANAGER","EXPORT_WAV_COMMAND","EXPORT_MP3_COMMAND","AUDIO_WAV","AUDIO_MP3","RECORD_COMMAND","INIT_COMMAND","FILTERS_NAMES","REVERB","ECHO","BASS_BOOST","BITCRUSHER","HIGH_PASS","LIMITER","LOW_PASS","PASSTHROUGH","RETURN_AUDIO","SOUNDTOUCH","TELEPHONIZER","VOCODER","WORKLET_PATHS","RECORDER_WORKLET","WORKLET_NAMES","PREFERENCES_KEYS","COMPATIBILITY_MODE_ENABLED","COMPATIBILITY_MODE_CHECKED","ENABLE_AUDIO_WORKLET","ENABLE_SOUNDTOUCH_AUDIO_WORKLET","BUFFER_SIZE","SAMPLE_RATE","DISABLE_INITIAL_RENDERING","BITRATE_MP3","ENABLE_RECORDER_AUDIO_WORKLET","SOUNDTOUCH_PITCH_SHIFTER_BUFFER_SIZE","DEFAULT_REVERB_ENVIRONMENT","url","addDuration","link","VOCODER_MODULATOR","DEFAULT_BUFFER_SIZE","VALID_BUFFER_SIZE","VALID_MP3_BITRATES","DEFAULT_SAMPLE_RATE","VALID_SAMPLE_RATES","TREATMENT_TIME_COUNTING_THROTTLE_INTERVAL","TREATMENT_TIME_COUNTING_SMOOTHING_FACTOR","DEFAULT_SAVE_FORMAT","DEFAULT_MP3_BITRATE","listeners","on","event","callback","emit","off","eventEmitter","configService","previousSampleRate","setup","getSampleRate","SAMPLE_RATE_CHANGED","currentContext","createNewContext","createNewContextIfNeeded","principalBuffer","isCompatibilityModeEnabled","currentSampleRate","sampleRate","_currentContext","oldAudioContext","destroyOldContext","latencyHint","AudioContext","close","AbstractAudioElement","enabled","defaultEnabled","bufferFetcherService","bufferDecoderService","isEnabled","isDefaultEnabled","setDefaultEnabled","state","setEnabled","enable","disable","toggle","injectDependencies","utilFunctions","calcAudioDuration","audio","speed","duration","loadAudioBuffer","file","arrayBuffer","readAsArrayBufferPromisified","audioBuffer","decodeAudioData","decodeBuffer","reader","FileReader","onload","ev","ArrayBuffer","readAsArrayBuffer","numberOfChannels","resume","newBuffer","createBuffer","sourceChannelData","getChannelData","channel0Data","channel1Data","convertAudioBufferToFloat32Array","channel","convertAudioParamToFloat32Array","param","Float32Array","sumAudioBufferChannel","a","sumAudioBuffer","sum","isAudioWorkletCompatible","audioContext","isSettingValueValid","isNaN","Number","trim","calculateAudioDuration","filterManager","speedAudio","getAddingTime","resetAudioRenderingProgress","UPDATE_AUDIO_TREATMENT_PERCENT","UPDATE_REMAINING_TIME_ESTIMATED","forceDownload","blob","filename","window","document","createElement","URL","createObjectURL","appendChild","href","download","click","revokeObjectURL","rendererManager","contextManager","saveBufferManager","audioProcessor","bufferManager","player","super","bufferPlayer","onBeforePlaying","compatibilityMode","setupOutput","PLAYING_FINISHED","loop","start","addFilters","filters","addRenderers","renderers","defaultDeviceSampleRate","tempContext","loadBufferFromFile","prepareContext","decodeBufferFromFile","initialRenderingDone","sumInputBuffer","utils","loadBuffer","getOutputBuffer","renderedBuffer","renderAudio","isAudioWorkletAvailable","getFiltersState","getRenderersState","getFiltersSettings","reconnectNodesIfNeeded","entrypointFilter","connectNodes","getSpeed","toggleFilter","filterId","toggleRenderer","changeFilterSettings","settings","resetFilterSettings","resetAllFiltersState","resetAllRenderersState","exit","stop","reset","cancelAudioRendering","saveBuffer","downloadingInitialData","order","_renderedBuffer","audioRenderingLastCanceled","inputBuffer","resetBufferFetcher","isInitialRenderingDisabled","loadInitialBuffer","durationAudio","offlineContext","OfflineAudioContext","outputContext","executeAudioRenderers","currentOfflineContext","setupTotalSamples","setupPlayerSpeed","initializeWorklets","currentNodes","output","connect","startRendering","loadRenderedAudio","OFFLINE_AUDIO_RENDERING_FINISHED","setCompatibilityMode","AUDIO_RENDERING_FINISHED","CANCELLED_AND_LOADED_INITIAL_AUDIO","isCompatibilityModeChecked","setCompatibilityModeChecked","enableCompatibilityMode","COMPATIBILITY_MODE_AUTO_ENABLED","RENDERING_AUDIO_PROBLEM_DETECTED","disconnectOldNodes","CANCELLING_AUDIO_PROCESSING","checked","setConfig","audioBuffersToFetch","fetchBuffers","refetch","LOADING_BUFFERS","fetchAllBuffers","LOADED_BUFFERS","LOADING_BUFFERS_ERROR","resetFilterBuffers","entryPointFilter","_entryPointFilter","_currentNodes","initializeDefaultSettings","getSettings","find","setSetting","resetSettings","element","keepCurrentInputOutput","isCompatibilityMode","entrypointNode","entrypointNodes","getEntrypointNode","intermediateNodes","previousNode","sort","node","getNode","updateState","keepCurrentOutput","disconnect","intermediate","isWorklet","initializeWorklet","totalSamples","bufferFetcherReseted","renderer","rendererId","currentBuffer","getRecorderWorker","workerBasePath","Worker","Recorder","cfg","worker","config","bufferLen","numChannels","mimeType","workletBasePath","bitrate","callbacks","getBuffer","exportWAV","exportMP3","recording","source","AudioWorkletNode","port","postMessage","createRecorderNode","command","onmessage","createRecorderWorklet","createRecorderScriptProcessorNode","audioWorklet","addModule","numChannelParameter","parameters","setValueAtTime","onaudioprocess","record","kill","terminate","Recorder$1","savingBuffer","playingStoppedCallback","PLAYING_STOPPED","savingResult","saveBufferCompatibilityMode","saveBufferDirect","getWorkerBasePath","downloadAudioBlob","format","rec","getBufferSize","getWorkletBasePath","finishedCallback","downloadBlobCallback","Date","toISOString","currentTime","displayTime","intervals","playing","onBeforePlayingCallback","currentNode","_contextManager","init","direct","createBufferSource","updateInfos","clearIntervals","interval","clearInterval","PLAYING_STARTED","startTime","performance","now","setInterval","timeNow","nextTime","playDirect","pause","PLAYING_UPDATE","setTimePercent","percent","round","setTime","time","toggleLoop","currentTimeDisplay","trunc","maxTimeDisplay","remainingTimeDisplay","buffers","bufferErrors","fetchBuffer","bufferURI","force","realBufferURI","getSoundBasePath","getKeyFromLocation","FETCHING_BUFFERS","response","fetch","ok","FETCHING_BUFFERS_ERROR","_c","FINISHED_FETCHING_BUFFERS","_d","bufferURIs","uri","getAudioBuffer","getOrFetchAudioBuffer","getDownloadedBuffersList","location","substring","lastIndexOf","DECODING_AUDIO_FILE","DECODED_AUDIO_FILE","console","ERROR_DECODING_AUDIO_FILE","AbstractAudioRenderer","AbstractAudioFilter","defaultSettings","_totalSamples","getDefaultSettings","AudioParamPolyfill","defaultValue","_value","_minValue","_maxValue","MAX_SAFE_INTEGER","_defaultValue","automationRate","newValue","max","min","minValue","maxValue","warn","linearRampToValueAtTime","endTime","exponentialRampToValueAtTime","cancelAndHoldAtTime","cancelTime","cancelScheduledValues","setTargetAtTime","timeConstant","setValueCurveAtTime","WorkletScriptProcessorNodeAdapter","bufferSize","_parameters","_port","workletProcessor","_scriptProcessorNode","createScriptProcessor","setupPort","setupProcessor","setupWorkletScope","messageChannel","MessageChannel","port1","port2","inputArray","Functions","ouputArray","outputBuffer","records","recordsMap","fromEntries","process","descriptors","defaultParameterDescriptors","RegisterProcessorPolyfill","registerProcessor","processorName","processorClass","processorsMap","getProcessor","processor","SimpleAudioWorkletProcessor","inputs","outputs","parameterDescriptors","AudioWorkletProcessor","AbstractAudioFilterWorklet","currentWorkletNode","fallbackToScriptProcessor","keepCurrentNodeIfPossible","workletPath","catch","isAudioWorkletEnabled","initializeNode","workletName","receiveEvent","applyCurrentSettingsToWorklet","currentSettings","settingKey","settingFromWorklet","BitCrusherProcessor","stopped","phaser","last","pow","bits","currentNormFreq","normFreq","fill","blockSize","inp","out","floor","DelayBuffer","_array","readPointer","writePointer","read","LimiterProcessor","delayBuffer","envelopeSample","disabled","getEnvelope","attackTime","releaseTime","attackGain","exp","releaseGain","envelope","envIn","abs","getMaxEnvelope","channels","ampToDB","log10","dBToAmp","db","envelopeData","postGainAmp","postGain","preGainAmp","preGain","lookAheadTime","slope","gainDB","threshold","gain","LimiterFilter","settingId","parseFloat","FifoSampleBuffer","_vector","_position","_frameCount","vector","position","startIndex","frameCount","endIndex","receive","rewind","put","numFrames","putSamples","samples","sourceOffset","numSamples","ensureCapacity","destOffset","subarray","putBuffer","receiveSamples","extract","minLength","parseInt","newVector","ensureAdditionalCapacity","AbstractFifoSamplePipe","createBuffers","_inputBuffer","_outputBuffer","RateTransposer","_rate","rate","slopeCount","prevSampleL","prevSampleR","numFramesOutput","transpose","src","srcOffset","dest","used","srcIndex","FilterSupport","pipe","_pipe","fillInputBuffer","fillOutputBuffer","numInputFrames","noop","SimpleFilter","sourceSound","historyBufferSize","_sourcePosition","outputBufferPosition","newOutputBufferPosition","sourcePosition","onEnd","numFramesExtracted","currentFrames","handleSampleData","_SCAN_OFFSETS","AUTOSEEK_K","Stretch","_quickSeek","midBufferDirty","midBuffer","overlapLength","autoSeqSetting","autoSeekSetting","_tempo","setParameters","clearMidBuffer","sequenceMs","seekWindowMs","overlapMs","calculateSequenceParameters","calculateOverlapLength","tempo","newTempo","intskip","nominalSkip","seekWindowLength","skipFract","sampleReq","seekLength","inputChunkSize","outputChunkSize","overlapInMsec","newOvl","refMidBuffer","checkLimits","mi","ma","seq","seek","AUTOSEQ_AT_MIN","AUTOSEEK_AT_MIN","quickSeek","seekBestOverlapPosition","seekBestOverlapPositionStereoQuick","seekBestOverlapPositionStereo","bestOffset","bestCorrelation","correlation","preCalculateCorrelationReferenceStereo","MIN_VALUE","calculateCrossCorrelationStereo","correlationOffset","tempOffset","scanCount","j","temp","mixingPosition","compare","mixing","calcLength","mixingOffset","overlap","overlapPosition","overlapStereo","inputPosition","outputPosition","tempFrame","frameScale","fi","inputOffset","outputOffset","overlapSkip","testFloatEqual","SoundTouch","transposer","stretch","_intermediateBuffer","virtualPitch","virtualRate","virtualTempo","calculateEffectiveRateAndTempo","rateChange","tempoChange","pitch","pitchOctaves","pitchSemitones","previousTempo","previousRate","WebAudioBufferSource","dualChannel","left","right","minsSecs","secs","mins","width","z","onUpdate","currentTimePlayed","timePlayed","CustomEvent","detail","formattedTimePlayed","percentagePlayed","_node","dispatchEvent","PitchShifter","_soundtouch","_filter","sourcePositionCallback","framesExtracted","getWebAudioNode","sourcePostion","formattedDuration","perc","semitone","toNode","eventName","addEventListener","removeEventListener","soundtouchWrapperFilterWorkletNodeClass","running","_pitch","updateInterval","processorOptions","status","messageProcessor","SoundtouchWrapperFilterWorkletNode","Vocoder","ctx","carrierB","modulatorB","FILTER_QUALITY","FOURIER_SIZE","WAVETABLEBOOST","SAWTOOTHBOOST","oscillatorType","oscillatorDetuneValue","carrierBuffer","modulatorNode","vocoding","modulatorInput","carrierInput","modulatorGain","modulatorGainValue","noiseBuffer","noiseNode","noiseGain","noiseGainValue","carrierSampleNode","carrierSampleGain","carrierSampleGainValue","oscillatorNode","oscillatorGain","oscillatorGainValue","wavetable","wavetableSignalGain","modFilterBands","modFilterPostGains","heterodynes","powers","lpFilters","lpFilterPostGains","carrierBands","carrierFilterPostGains","carrierBandGains","vocoderBands","numVocoderBands","hpFilterGain","outputGain","modulatorBuffer","generateVocoderBands","setupVocoderGraph","vocode","getNodes","synthLevel","shutOffCarrier","selectSawtooth","selectWavetable","setPeriodicWave","updateModGain","updateSampleLevel","updateSynthLevel","updateNoiseLevel","updateDetuneValue","detune","startFreq","endFreq","numBands","centsPerBand","log","LN2","scale","currentFreq","frequency","loadNoiseBuffer","lengthInSamples","bufferData","initBandpassFilters","createGain","waveShaperCurve","n2","hpFilter","createBiquadFilter","Q","rectifierCurve","modulatorFilter","secondModulatorFilter","modulatorFilterPostGain","heterodyneOscillator","createOscillator","heterodyne","heterodynePostGain","rectifier","createWaveShaper","curve","lpFilter","lpFilterPostGain","waveshaper","carrierFilter","secondCarrierFilter","carrierFilterPostGain","bandGain","real","imag","createPeriodicWave","createCarriersAndPlay","PassthroughWorkletProcessor","samplesCount","sample","TimerSaveTime","seconds","incr","initialSeconds","countCallback","count","onCount","recorder","stream","alreadyInit","timer","enableAudioFeedback","deviceList","constraints","noiseSuppression","echoCancellation","autoGainControl","ideal","sampleRateConfigNotSupported","isRecordingAvailable","navigator","mediaDevices","getSupportedConstraints","RECORDER_INIT","getUserMedia","RECORDER_COUNT_UPDATE","successCallback","notFoundErrorCallback","unknownErrorCallback","ondevicechange","updateInputList","RECORDER_SUCCESS","RECORDER_ERROR","RECORDER_NOT_FOUND_ERROR","RECORDER_UNKNOWN_ERROR","audioFeedback","RECORDER_UPDATE_CONSTRAINTS","getConstraints","tracks","getTracks","updateConstraints","resetConstraints","newConstraint","precAudioFeedback","precRecording","applyConstraints","newConstraints","newConstraintName","stopStream","createMediaStreamSource","setNoiseSuppression","setAutoGain","setEchoCancellation","devices","enumerateDevices","device","kind","changeInput","deviceId","groupId","RECORDER_RECORDING","RECORDER_STOPPED","RECORDER_PAUSED","RECORDER_RESETED","audioEditorContainer","frequencyAudio","currentSpeedAudio","isOfflineMode","constructAudioWorkletProcessor","offline","cleanUpOldNodes","bufferSource","renderWithWorklet","renderWithScriptProcessorNode","currentPitchShifter","getSoundtouchScriptProcessorNode","currentPitchShifterWorklet","bufferSourceRendered","bypass","nInputFrames","approximateNInputFrames","isSoundtouchAudioWorkletEnabled","getCurrentPitchShifter","pitchShifter","valueFloat","totalFrames","bufferReturned","nowBuffering","frequencyBooster","frequencyReduce","dbBooster","dbReduce","bassBoostFilter","bassBoostFilterHighFreq","delay","delayNode","createDelay","delayTime","gainNode","highFrequency","highPassFilter","lowFrequency","lowPassFilter","reverbEnvironment","reverbCustomEnvironmentAddTime","customEnvironment","convolver","createConvolver","getReverbBuffer","additionalData","downloadedBuffers","hasCustomEnvironment","reverbSettings","reverbUrl","lpf1","lpf2","hpf1","hpf2","currentVocoder","applyCurrentSettingsToVocoder","lastSampleCount","samplePerSecond","currentTimeSamplesPerSecond","samplesProcessed","calculatePercentageProcessed","calculateRemainingTimeProcessing","timeDifference","percentageProcessed","timeDifferenceSamplePerSecond","remainingSamples","calculateSmoothedSamplePerSecond","remainingTimeSeconds","isFinite","GenericConfigService","mapConfig","getConfig","setting","getBitrateMP3","disableCompatibilityMode","SoundStudioFactory","createAudioEditor","buffersToFetch","ready","createVoiceRecorder","getAudioEditorInstance","getAudioPlayerInstance","getAudioRecorderInstance","getEventEmitterInstance","getConfigServiceInstance"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,74]} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index c8e5f65..30516d7 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -18,6 +18,7 @@ import FilterManagerInterface$1 from '@/audioEditor/interfaces/FilterManagerInte import AudioEditorInterface$1 from '@/audioEditor/interfaces/AudioEditorInterface'; import { ConfigService as ConfigService$1 } from '@/services/interfaces/ConfigService'; import VoiceRecorderInterface$1 from '@/voiceRecorder/interfaces/VoiceRecorderInterface'; +import AbstractAudioElement$1 from '@/filters/interfaces/AbstractAudioElement'; declare const audioEditorContainer: Container; @@ -1157,4 +1158,59 @@ declare class SoundStudioFactory { static getConfigServiceInstance(): ConfigService$1 | undefined; } -export { AbstractAudioElement, AbstractAudioFilter, AbstractAudioFilterWorklet, AbstractAudioRenderer, AudioEditor, type AudioFilterEntrypointInterface, type AudioFilterNodes, BufferPlayer, type ConfigService, Constants, EventEmitter, type EventEmitterCallback, EventType, type FilterSettingValue, type FilterSettings, type FilterState, GenericConfigService, type GenericSettingValueAdditionalData, type RecorderSettings, type SaveBufferOptions, type SelectFormValue, SoundStudioFactory, utilFunctions as UtilFunctions, VoiceRecorder, audioEditorContainer }; +interface LimiterSettings extends FilterSettings { + preGain: number; + postGain: number; + attackTime: number; + releaseTime: number; + threshold: number; + lookAheadTime: number; +} + +declare class LimiterFilter extends AbstractAudioFilterWorklet { + private preGain; + private postGain; + private attackTime; + private releaseTime; + private threshold; + private lookAheadTime; + constructor(); + receiveEvent(message: MessageEvent): void; + get workletPath(): string; + get workletName(): string; + get order(): number; + get id(): string; + getAddingTime(): number; + getSettings(): LimiterSettings; + setSetting(settingId: string, value: FilterSettingValue): Promise; +} + +declare class FilterManager extends AbstractAudioElement$1 implements FilterManagerInterface { + /** A list of filters */ + private filters; + /** The entrypoint filter */ + private _entryPointFilter; + /** The current connected nodes */ + private _currentNodes; + constructor(filters: AbstractAudioFilter$1[], entryPointFilter: (AbstractAudioFilter$1 & AudioFilterEntrypointInterface$1) | null); + private setup; + addFilters(...filters: AbstractAudioFilter$1[]): void; + getFiltersState(): FilterState$1; + getFiltersSettings(): Map; + toggleFilter(filterId: string): void; + changeFilterSettings(filterId: string, settings: FilterSettings$1): Promise; + resetFilterSettings(filterId: string): Promise; + resetAllFiltersState(): void; + connectNodes(context: BaseAudioContext, buffer: AudioBuffer, keepCurrentInputOutput: boolean, isCompatibilityMode: boolean): Promise; + disconnectOldNodes(keepCurrentOutput: boolean): void; + initializeWorklets(context: BaseAudioContext): Promise; + getAddingTime(): number; + setupTotalSamples(durationAudio: number, currentContext: AudioContext | null): void; + resetFilterBuffers(): Promise; + get entrypointFilter(): (AbstractAudioFilter$1 & AudioFilterEntrypointInterface$1) | null; + get currentNodes(): AudioFilterNodes$1 | null; + get order(): number; + get id(): string; +} + +export { AbstractAudioElement, AbstractAudioFilter, AbstractAudioFilterWorklet, AbstractAudioRenderer, AudioEditor, type AudioFilterEntrypointInterface, type AudioFilterNodes, BufferPlayer, type ConfigService, Constants, EventEmitter, type EventEmitterCallback, EventType, FilterManager, type FilterSettingValue, type FilterSettings, type FilterState, GenericConfigService, type GenericSettingValueAdditionalData, LimiterFilter, type RecorderSettings, type SaveBufferOptions, type SelectFormValue, SoundStudioFactory, utilFunctions as UtilFunctions, VoiceRecorder, audioEditorContainer }; diff --git a/dist/workers/RecorderWorker.js b/dist/workers/RecorderWorker.js index 20742ed..a55235d 100644 --- a/dist/workers/RecorderWorker.js +++ b/dist/workers/RecorderWorker.js @@ -1 +1 @@ -function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a={};function t(e){return new Int16Array(e)}function s(e){return new Int32Array(e)}function n(e){return new Float32Array(e)}var r={fill:function(e,a,t,s){if(2==arguments.length)for(var n=0;n=0;--U){var ee,ae;ee=q[C+U]*l[20+U]+q[C+-1-U]*f[28+U],ae=q[C+U]*f[28+U]-q[C+-1-U]*l[20+U],q[C+-1-U]=ee,q[C+U]=ae}}}if(N=b,O=286,1==e.mode_gr)for(var te=0;te<18;te++)a.arraycopy(e.sb_sample[X][1][te],0,e.sb_sample[X][0][te],0,32)}}}}(),l=function(){if(p)return m;p=1;var e=S();return m=function(){this.thm=new e,this.en=new e}}(),f=o.FFTOFFSET,u=o.MPG_MD_MS_LR,b=null;this.psy=null;var v=null,d=null,w=null;this.setModules=function(e,a,t,s){b=e,this.psy=a,v=a,d=s,w=t};var A=new e;this.lame_encode_mp3_frame=function(e,c,h,m,p,g){var S,M=s([2,2]);M[0][0]=new l,M[0][1]=new l,M[1][0]=new l,M[1][1]=new l;var R,B=s([2,2]);B[0][0]=new l,B[0][1]=new l,B[1][0]=new l,B[1][1]=new l;var y,E,T,k=[null,null],x=e.internal_flags,P=r([2,4]),I=[.5,.5],L=[[0,0],[0,0]],V=[[0,0],[0,0]];if(k[0]=c,k[1]=h,0==x.lame_encode_frame_init&&function(e,a){var t,s,r=e.internal_flags;if(0==r.lame_encode_frame_init){var _,l,f=n(2014),c=n(2014);for(r.lame_encode_frame_init=1,_=0,l=0;_<286+576*(1+r.mode_gr);++_)_<576*r.mode_gr?(f[_]=0,2==r.channels_out&&(c[_]=0)):(f[_]=a[0][l],2==r.channels_out&&(c[_]=a[1][l]),++l);for(s=0;s=o.FFTOFFSET),i(r.mf_size>=o.BLKSIZE+e.framesize-o.FFTOFFSET),i(r.mf_size>=512+e.framesize-32)}}(e,k),x.padding=0,(x.slot_lag-=x.frac_SpF)<0&&(x.slot_lag+=e.out_samplerate,x.padding=1),0!=x.psymodel){var H=[null,null],N=0,O=_(2);for(T=0;T0&&(I[T]=P[T][3]/I[T])),E=0;E.03125)e.ATH.adjust>=1?e.ATH.adjust=1:e.ATH.adjust=s?(e.ATH.adjust*=.075*s+.925,e.ATH.adjust=s?e.ATH.adjust=s:e.ATH.adjust>1,b=(u=n<<1)+(h=n),n=u<<1,_=(r=a)+m;do{w=e[r+0]-e[r+h],M=e[r+0]+e[r+h],E=e[r+u]-e[r+b],B=e[r+u]+e[r+b],e[r+u]=M-B,e[r+0]=M+B,e[r+b]=w-E,e[r+h]=w+E,w=e[_+0]-e[_+h],M=e[_+0]+e[_+h],E=A.SQRT2*e[_+b],B=A.SQRT2*e[_+u],e[_+u]=M-B,e[_+0]=M+B,e[_+b]=w-E,e[_+h]=w+E,_+=n,r+=n}while(r=0);s(t[o],l,B.BLKSIZE_s/2)}},this.fft_long=function(a,t,r,_,i){var o=B.BLKSIZE/8-1,l=B.BLKSIZE/2;do{var f,c,h,u,b,m=255&n[o];c=(f=e[m]*_[r][i+m])-(b=e[m+512]*_[r][i+m+512]),f+=b,u=(h=e[m+256]*_[r][i+m+256])-(b=e[m+768]*_[r][i+m+768]),h+=b,t[(l-=4)+0]=f+h,t[l+2]=f-h,t[l+1]=c+u,t[l+3]=c-u,c=(f=e[m+1]*_[r][i+m+1])-(b=e[m+513]*_[r][i+m+513]),f+=b,u=(h=e[m+257]*_[r][i+m+257])-(b=e[m+769]*_[r][i+m+769]),h+=b,t[l+B.BLKSIZE/2+0]=f+h,t[l+B.BLKSIZE/2+2]=f-h,t[l+B.BLKSIZE/2+1]=c+u,t[l+B.BLKSIZE/2+3]=c-u}while(--o>=0);s(t,l,B.BLKSIZE/2)},this.init_fft=function(t){for(var s=0;s=0;--b){var m=n[r+0][b],p=n[r+1][b];n[r+0][b]=(m+p)*P.SQRT2*.5,n[r+1][b]=(m-p)*P.SQRT2*.5}for(var v=2;v>=0;--v)for(b=X.BLKSIZE_s-1;b>=0;--b){m=i[o+0][v][b],p=i[o+1][v][b];i[o+0][v][b]=(m+p)*P.SQRT2*.5,i[o+1][v][b]=(m-p)*P.SQRT2*.5}}t[0]=n[r+0][0],t[0]*=t[0];for(b=X.BLKSIZE/2-1;b>=0;--b){var d=n[r+0][X.BLKSIZE/2-b],g=n[r+0][X.BLKSIZE/2+b];t[X.BLKSIZE/2-b]=.5*(d*d+g*g)}for(v=2;v>=0;--v){s[v][0]=i[o+0][v][0],s[v][0]*=s[v][0];for(b=X.BLKSIZE_s/2-1;b>=0;--b){d=i[o+0][v][X.BLKSIZE_s/2-b],g=i[o+0][v][X.BLKSIZE_s/2+b];s[v][X.BLKSIZE_s/2-b]=.5*(d*d+g*g)}}var S=0;for(b=11;be){if(!(a=a*l)return e+a;_=e/a}if(N(e>=0),N(a>=0),e+=a,s+3<=6){if(_>=o)return e;var i=0|P.FAST_LOG10_X(_,16);return e*u[i]}var c,m;i=0|P.FAST_LOG10_X(_,16);return a=n.ATH.cb_l[t]*n.ATH.adjust,N(a>=0),ea?(c=1,i<=13&&(c=b[i]),m=P.FAST_LOG10_X(e/a,10/15),e*((h[i]-c)*m+c)):i>13?e:e*b[i]:e*h[i]}var p=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1];function v(e,a,t){var s;if(e<0&&(e=0),a<0&&(a=0),e<=0)return a;if(a<=0)return e;if(s=a>e?a/e:e/a,-2<=t&&t<=2){if(s>=o)return e+a;var n=0|P.FAST_LOG10_X(s,16);return(e+a)*p[n]}return s=0),N(t[_]>=0),i+=a[_],o+=t[_],_++;if(e.en[s].s[r][n]=i,e.thm[s].s[r][n]=o,_>=f){++r;break}N(a[_]>=0),N(t[_]>=0);var h=e.PSY.bo_s_weight[r],u=1-h;i=h*a[_],o=h*t[_],e.en[s].s[r][n]+=i,e.thm[s].s[r][n]+=o,i=u*a[_],o=u*t[_]}for(;r=0),N(t[r]>=0),_+=a[r],i+=t[r],r++;if(e.en[s].l[n]=_,e.thm[s].l[n]=i,r>=l){++n;break}N(a[r]>=0),N(t[r]>=0);var c=e.PSY.bo_l_weight[n],h=1-c;_=c*a[r],i=c*t[r],e.en[s].l[n]+=_,e.thm[s].l[n]+=i,_=h*a[r],i=h*t[r]}for(;n=0)}for(;i<=X.CBANDS;++i)t[i]=0,s[i]=0}function M(e,a,t){return t>=1?e:t<=0?a:a>0?Math.pow(e/a,t)*a:0}var w=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130];function A(e,t){for(var s=309.07,n=0;n0){var i=_*t,o=e.en.s[n][r];o>i&&(o>1e10*i?s+=w[n]*(10*a):(N(i>0),s+=w[n]*P.FAST_LOG10(o/i)))}}return s}var R=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1];function B(e,t){for(var s=281.0575,n=0;n0){var _=r*t,i=e.en.l[n];i>_&&(i>1e10*_?s+=R[n]*(10*a):(N(_>0),s+=R[n]*P.FAST_LOG10(i/_)))}}return s}function y(e,a,t,s,n){var r,_;for(r=_=0;r=0),o+=f,l=0),N(o>=0),N(t[r]>=0),N(s[r]>=0),N(n[r]>=0)}}function E(e,a,t,s){var n=c.length-1,r=0,_=t[r]+t[r+1];(N(_>=0),_>0)?((i=a[r])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_l[r]+e.numlines_l[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0;for(r=1;r=0),_>0)(i=a[r-1])0),(o=0|(_=20*(3*i-_)/(_*(e.numlines_l[r-1]+e.numlines_l[r]+e.numlines_l[r+1]-1))))>n&&(o=n),s[r]=o;else s[r]=0}(N(r>0),N(r==e.npart_l-1),_=t[r-1]+t[r],N(_>=0),_>0)?((i=a[r-1])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_l[r-1]+e.numlines_l[r]-1))))>n&&(o=n),s[r]=o):s[r]=0;N(r==e.npart_l-1)}var D=[-1730326e-23,-.01703172,-1349528e-23,.0418072,-673278e-22,-.0876324,-30835e-21,.1863476,-1104424e-22,-.627638];function F(a,t,s,n,r,_,i,o){var l=a.internal_flags;if(n<2)e.fft_long(l,i[o],n,t,s);else if(2==n)for(var f=X.BLKSIZE-1;f>=0;--f){var c=i[o+0][f],h=i[o+1][f];i[o+0][f]=(c+h)*P.SQRT2*.5,i[o+1][f]=(c-h)*P.SQRT2*.5}_[0]=i[o+0][0],_[0]*=_[0];for(f=X.BLKSIZE/2-1;f>=0;--f){var u=i[o+0][X.BLKSIZE/2-f],b=i[o+0][X.BLKSIZE/2+f];_[X.BLKSIZE/2-f]=.5*(u*u+b*b)}var m=0;for(f=11;f=0;--f){var c=i[o+0][r][f],h=i[o+1][r][f];i[o+0][r][f]=(c+h)*P.SQRT2*.5,i[o+1][r][f]=(c-h)*P.SQRT2*.5}_[r][0]=i[o+0][r][0],_[r][0]*=_[r][0];for(f=X.BLKSIZE_s/2-1;f>=0;--f){var u=i[o+0][r][X.BLKSIZE_s/2-f],b=i[o+0][r][X.BLKSIZE_s/2+f];_[r][X.BLKSIZE_s/2-f]=.5*(u*u+b*b)}}function q(e,a,t,s){var n=e.internal_flags;2==e.athaa_loudapprox&&t<2&&(n.loudness_sq[a][t]=n.loudness_sq_save[t],n.loudness_sq_save[t]=_(s,n))}this.L3psycho_anal_ns=function(e,a,t,r,_,o,l,f,h,u){var b,p,v,w,R,k,P,O,F,Y,q=e.internal_flags,C=V([2,X.BLKSIZE]),G=V([2,3,X.BLKSIZE_s]),j=L(X.CBANDS+1),U=L(X.CBANDS+1),z=L(X.CBANDS+2),K=H(2),Z=H(2),Q=V([2,576]),W=H(X.CBANDS+2),J=H(X.CBANDS+2);for(I.fill(J,0),b=q.channels_out,e.mode==MPEGMode.JOINT_STEREO&&(b=4),F=e.VBR==T.vbr_off?0==q.ResvMax?0:q.ResvSize/q.ResvMax*.5:e.VBR==T.vbr_rh||e.VBR==T.vbr_mtrh||e.VBR==T.vbr_mt?.6:1,p=0;p2&&(o[r][p].en.assign(q.en[p+2]),o[r][p].thm.assign(q.thm[p+2]))}for(p=0;p0),_e[w]=ne[w]/q.nsPsy.last_en_subshort[p][w+4],re[0]+=ne[w];if(2==p)for(w=0;w<576;w++){var ue,be;ue=Q[0][w],be=Q[1][w],Q[0][w]=ue+be,Q[1][w]=ue-be}var me=Q[1&p],pe=0;for(w=0;w<9;w++){for(var ve=pe+64,de=1;pene[w+3-2]?(N(ne[w+3-2]>0),de/=ne[w+3-2]):ne[w+3-2]>10*de?(N(de>0),de=ne[w+3-2]/(10*de)):de=0,_e[w+3]=de}if(e.analysis){var ge=_e[0];for(w=1;w<12;w++)ge<_e[w]&&(ge=_e[w]);q.pinfo.ers[r][p]=q.pinfo.ers_save[p],q.pinfo.ers_save[p]=ge}for(se=3==p?q.nsPsy.attackthre_s:q.nsPsy.attackthre,w=0;w<12;w++)0==fe[w/3]&&_e[w]>se&&(fe[w/3]=w%3+1);for(w=1;w<4;w++){var Se;re[w-1]>re[w]?(N(re[w]>0),Se=re[w-1]/re[w]):(N(re[w-1]>0),Se=re[w]/re[w-1]),Se<1.7&&(fe[w]=0,1==w&&(fe[0]=0))}for(0!=fe[0]&&0!=q.nsPsy.lastAttacks[p]&&(fe[0]=0),3!=q.nsPsy.lastAttacks[p]&&fe[0]+fe[1]+fe[2]+fe[3]==0||(ie=0,0!=fe[1]&&0!=fe[0]&&(fe[1]=0),0!=fe[2]&&0!=fe[1]&&(fe[2]=0),0!=fe[3]&&0!=fe[2]&&(fe[3]=0)),p<2?Z[p]=ie:0==ie&&(Z[0]=Z[1]=0),h[p]=q.tot_ener[p],i(e,ce,he,C,1&p,G,1&p,r,p,a,t),y(q,ce,j,oe,le),E(q,oe,le,W),O=0;O<3;O++){var Me,we;for(S(e,he,U,z,p,O),d(q,U,z,p,O),P=0;P=2||1==fe[O+1]){var Ae=0!=O?O-1:2;de=M(q.thm[p].s[P][Ae],we,.6*F);we=Math.min(we,de)}if(1==fe[O]){Ae=0!=O?O-1:2,de=M(q.thm[p].s[P][Ae],we,s*F);we=Math.min(we,de)}else if(0!=O&&3==fe[O-1]||0==O&&3==q.nsPsy.lastAttacks[p]){Ae=2!=O?O+1:0,de=M(q.thm[p].s[P][Ae],we,s*F);we=Math.min(we,de)}Me=ne[3*O+3]+ne[3*O+4]+ne[3*O+5],6*ne[3*O+5]0&&function(e,a){var t=e.internal_flags;if(t.channels_out>1){for(var s=0;s1.58*e.thm[1].l[a]||e.thm[1].l[a]>1.58*e.thm[0].l[a])){var t=e.mld_l[a]*e.en[3].l[a],s=Math.max(e.thm[2].l[a],Math.min(e.thm[3].l[a],t));t=e.mld_l[a]*e.en[2].l[a];var n=Math.max(e.thm[3].l[a],Math.min(e.thm[2].l[a],t));e.thm[2].l[a]=s,e.thm[3].l[a]=n}for(a=0;a1.58*e.thm[1].s[a][r]||e.thm[1].s[a][r]>1.58*e.thm[0].s[a][r]||(t=e.mld_s[a]*e.en[3].s[a][r],s=Math.max(e.thm[2].s[a][r],Math.min(e.thm[3].s[a][r],t)),t=e.mld_s[a]*e.en[2].s[a][r],n=Math.max(e.thm[3].s[a][r],Math.min(e.thm[2].s[a][r],t)),e.thm[2].s[a][r]=s,e.thm[3].s[a][r]=n)}(q),Y=e.msfix,Math.abs(Y)>0&&function(e,a,t){var s=a,n=Math.pow(10,t);a*=2,s*=2;for(var r=0;r0),e.thm[2].l[r]=Math.min(o,e.thm[2].l[r]),e.thm[3].l[r]=Math.min(l,e.thm[3].l[r]);for(n*=X.BLKSIZE_s/X.BLKSIZE,r=0;r0),e.thm[2].s[r][_]=Math.min(e.thm[2].s[r][_],o),e.thm[3].s[r][_]=Math.min(e.thm[3].s[r][_],l)}}(q,Y,e.ATHlower*q.ATH.adjust));for(function(e,a,t,s){var n=e.internal_flags;e.short_blocks!=x.short_block_coupled||0!=a[0]&&0!=a[1]||(a[0]=a[1]=0);for(var r=0;r1?(Ee=f,xe=-2,Te=X.NORM_TYPE,u[0]!=X.SHORT_TYPE&&u[1]!=X.SHORT_TYPE||(Te=X.SHORT_TYPE),ke=o[r][p-2]):(Ee=l,xe=0,Te=u[p],ke=_[r][p]),Te==X.SHORT_TYPE?Ee[xe+p]=A(ke,q.masking_lower):Ee[xe+p]=B(ke,q.masking_lower),e.analysis&&(q.pinfo.pe[r][p]=Ee[xe+p])}return 0};var C=[-1730326e-23,-.01703172,-1349528e-23,.0418072,-673278e-22,-.0876324,-30835e-21,.1863476,-1104424e-22,-.627638];function G(e,a,t){if(0==t)for(var s=0;s=0),f[o]=m,N(p>0),h[o]=b/p,N(h[o]>=0)}for(N(o==l.npart_s),N(129==i);o=0),_>0?((i=a[r])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_s[r]+e.numlines_s[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0,r=1;r=0),_>0?((i=a[r-1])0),(o=0|(_=20*(3*i-_)/(_*(e.numlines_s[r-1]+e.numlines_s[r]+e.numlines_s[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0}N(r>0),N(r==e.npart_s-1),_=t[r-1]+t[r],N(_>=0),_>0?((i=a[r-1])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_s[r-1]+e.numlines_s[r]-1))))>n&&(o=n),s[r]=o):s[r]=0,N(r==e.npart_s-1)}(l,f,h,u),i=o=0;oM&&(s[o]=M),l.masking_lower>1&&(s[o]*=l.masking_lower),s[o]>t[o]&&(s[o]=t[o]),l.masking_lower<1&&(s[o]*=l.masking_lower),N(s[o]>=0)}for(;o0?Math.min(u,S):Math.min(u,t[_]*s)}else{var M=16*e.nb_2[r][_],w=2*e.nb_1[r][_];M<=0&&(M=u),w<=0&&(w=u),S=e.blocktype_old[1&r]==X.NORM_TYPE?Math.min(w,M):w,n[_]=Math.min(u,S)}e.nb_2[r][_]=e.nb_1[r][_],e.nb_1[r][_]=u,h=i[_],h*=e.minval_l[_],h*=b,n[_]>h&&(n[_]=h),e.masking_lower>1&&(n[_]*=e.masking_lower),n[_]>t[_]&&(n[_]=t[_]),e.masking_lower<1&&(n[_]*=e.masking_lower),N(n[_]>=0)}for(;_0?Math.pow(10,n):1,c=0;c<_;++c){var h=e[2][c],u=e[3][c],b=a[0][c],m=a[1][c],p=a[2][c],v=a[3][c];if(b<=1.58*m&&m<=1.58*b){var d=t[c]*u,g=t[c]*h;o=Math.max(p,Math.min(v,d)),i=Math.max(v,Math.min(p,g))}else o=p,i=v;if(r>0){var S,M,w=s[c]*f;if(S=Math.min(Math.max(b,w),Math.max(m,w)),(M=(p=Math.max(o,w))+(v=Math.max(i,w)))>0&&S*l0)}o=Math.min(p,o),i=Math.min(v,i)}o>h&&(o=h),i>u&&(i=u),a[2][c]=o,a[3][c]=i}}function Z(e,a){var t;return(t=e>=0?27*-e:e*a)<=-72?0:Math.exp(t*r)}function Q(e){var a,t,s=0;for(s=0;Z(s,e)>1e-20;s-=1);for(n=s,r=0;Math.abs(r-n)>1e-12;)Z(s=(r+n)/2,e)>0?r=s:n=s;a=n;var n,r;s=0;for(s=0;Z(s,e)>1e-20;s+=1);for(n=0,r=s;Math.abs(r-n)>1e-12;)Z(s=(r+n)/2,e)>0?n=s:r=s;t=r;var _,i=0,o=1e3;for(_=0;_<=o;++_){i+=Z(s=a+_*(t-a)/o,e)}return(o+1)/(i*(t-a))}function W(e){return e<0&&(e=0),e*=.001,13*Math.atan(.76*e)+3.5*Math.atan(e*e/56.25)}function J(e,a,t,s,n,r,_,i,o,l,f,c){var h,u=L(X.CBANDS+1),b=i/(c>15?1152:384),m=H(X.HBLKSIZE);i/=o;var p=0,v=0;for(h=0;ho/2){p=o/2,++h;break}}N(ho/2&&(M=o/2),t[g]=(m[S]+m[M])/2,a[g]=m[M];var B=b*A;_[g]=(B-u[a[g]])/(u[a[g]+1]-u[a[g]]),_[g]<0?_[g]=0:_[g]>1&&(_[g]=1),R=W(i*l[g]*f),R=Math.min(R,15.5)/15.5,r[g]=Math.pow(10,1.25*(1-Math.cos(Math.PI*R))-2.5)}p=0;for(var y=0;y=0?3:1.5)>=.5&&l<=2.5?8*((h=l-.5)*h-2*h):0,((c=15.811389+7.5*(l+=.474)-17.5*Math.sqrt(1+l*l))<=-60?0:(l=Math.exp((f+c)*r),l/=.6609193))*s[i]);u[m][i]=p*n[m]}else for(i=0;i0);i++);for(e[m][0]=i,i=a-1;i>0&&!(u[m][i]>0);i--);e[m][1]=i,b+=e[m][1]-e[m][0]+1}var g=L(b),S=0;for(m=0;m2&&(_[s][m].en.assign(h.en[m+2]),_[s][m].thm.assign(h.thm[m+2]))}for(m=0;m0;++v,--S){var T=c[0][v],k=c[1][v];c[0][v]=T+k,c[1][v]=T-k}for(v=0;v<3;v++)w[v]=h.nsPsy.last_en_subshort[m][v+6],N(h.nsPsy.last_en_subshort[m][v+4]>0),M[v]=w[v]/h.nsPsy.last_en_subshort[m][v+4],A[0]+=w[v];for(v=0;v<9;v++){for(var x=B+64,P=1;Bw[v+3-2]?(N(w[v+3-2]>0),P/=w[v+3-2]):w[v+3-2]>10*P?(N(P>0),P=w[v+3-2]/(10*P)):P=0,M[v+3]=P}for(v=0;v<3;++v){var I=w[3*v+3]+w[3*v+4]+w[3*v+5],H=1;6*w[3*v+5]y&&(l[m][v/3]=v%3+1);for(v=1;v<4;v++){var X=A[v-1],D=A[v];Math.max(X,D)<4e4&&X<1.7*D&&D<1.7*X&&(1==v&&l[m][0]<=l[m][v]&&(l[m][0]=0),l[m][v]=0)}l[m][0]<=h.nsPsy.lastAttacks[m]&&(l[m][0]=0),3!=h.nsPsy.lastAttacks[m]&&l[m][0]+l[m][1]+l[m][2]+l[m][3]==0||(E=0,0!=l[m][1]&&0!=l[m][0]&&(l[m][1]=0),0!=l[m][2]&&0!=l[m][1]&&(l[m][2]=0),0!=l[m][3]&&0!=l[m][2]&&(l[m][3]=0)),m<2?f[m]=E:0==E&&(f[0]=f[1]=0),i[m]=h.tot_ener[m]}}(e,a,t,s,r,_,l,S,w,R),function(e,a){var t=e.internal_flags;e.short_blocks!=x.short_block_coupled||0!=a[0]&&0!=a[1]||(a[0]=a[1]=0);for(var s=0;s=2||1==w[E][T+1]){var D=0!=T?T-1:2,Z=M(c.thm[E].s[P][D],O,.36);O=Math.min(O,Z)}else if(1==w[E][T]){D=0!=T?T-1:2,Z=M(c.thm[E].s[P][D],O,.18);O=Math.min(O,Z)}else if(0!=T&&3==w[E][T-1]||0==T&&3==c.nsPsy.lastAttacks[E]){D=2!=T?T+1:0,Z=M(c.thm[E].s[P][D],O,.18);O=Math.min(O,Z)}O*=S[E][T],I[T]=O}for(T=0;T<3;T++)c.thm[E].s[P][T]=I[T]}}for(E=0;E1?(Q=o,W=-2,J=X.NORM_TYPE,f[0]!=X.SHORT_TYPE&&f[1]!=X.SHORT_TYPE||(J=X.SHORT_TYPE),$=_[s][E-2]):(Q=i,W=0,J=f[E],$=r[s][E]),J==X.SHORT_TYPE?Q[W+E]=A($,c.masking_lower):Q[W+E]=B($,c.masking_lower),e.analysis&&(c.pinfo.pe[s][E]=Q[W+E])}return 0},this.psymodel_init=function(t){var s,n=t.internal_flags,r=!0,_=13,i=24,c=0,h=0,u=-8.25,b=-4.5,m=L(X.CBANDS),p=L(X.CBANDS),v=L(X.CBANDS),d=t.out_samplerate;switch(t.experimentalZ){default:case 0:r=!0;break;case 1:r=t.VBR!=T.vbr_mtrh&&t.VBR!=T.vbr_mt;break;case 2:r=!1;break;case 3:_=8,c=-1.75,h=-.0125,u=-8.25,b=-2.25}for(n.ms_ener_ratio_old=.25,n.blocktype_old[0]=n.blocktype_old[1]=X.NORM_TYPE,s=0;s<4;++s){for(var g=0;g=_&&(M=h*(m[s]-_)/(i-_)+c*(i-m[s])/(i-_)),v[s]=Math.pow(10,M/10),n.numlines_l[s]>0?n.rnumlines_l[s]=1/n.numlines_l[s]:n.rnumlines_l[s]=0}n.s3_ll=$(n.s3ind,n.npart_l,m,p,v,r);var w;g=0;for(s=0;s(y*=n.numlines_l[s])&&(B=y)}n.ATH.cb_l[s]=B,(B=20*m[s]/10-20)>6&&(B=100),B<-15&&(B=-15),B-=8,n.minval_l[s]=Math.pow(10,B/10)*n.numlines_l[s]}for(n.npart_s=J(n.numlines_s,n.bo_s,n.bm_s,m,p,n.mld_s,n.PSY.bo_s_weight,d,X.BLKSIZE_s,n.scalefac_band.s,X.BLKSIZE_s/384,X.SBMAX_s),N(n.npart_s=_&&(M=b*(m[s]-_)/(i-_)+u*(i-m[s])/(i-_)),v[s]=Math.pow(10,M/10),B=k.MAX_VALUE;for(A=0;A(y*=n.numlines_s[s])&&(B=y)}n.ATH.cb_s[s]=B,B=7*m[s]/12-7,m[s]>12&&(B*=1+3.1*Math.log(1+B)),m[s]<12&&(B*=1+2.3*Math.log(1-B)),B<-15&&(B=-15),B-=8,n.minval_s[s]=Math.pow(10,B/10)*n.numlines_s[s]}n.s3_ss=$(n.s3ind_s,n.npart_s,m,p,v,r),o=Math.pow(10,9/16),l=Math.pow(10,1.5),f=Math.pow(10,1.5),e.init_fft(n),n.decay=Math.exp(-1*a/(.01*d/192)),w=3.5,2&t.exp_nspsytune&&(w=1),Math.abs(t.msfix)>0&&(w=t.msfix),t.msfix=w;for(var E=0;En.npart_l-1&&(n.s3ind[E][1]=n.npart_l-1);var x=576*n.mode_gr/d;if(n.ATH.decay=Math.pow(10,-1.2*x),n.ATH.adjust=.01,n.ATH.adjustLimit=1,N(n.bo_l[X.SBMAX_l-1]<=n.npart_l),N(n.bo_s[X.SBMAX_s-1]<=n.npart_s),-1!=t.ATHtype){var P=t.out_samplerate/X.BLKSIZE,I=0;for(R=0,s=0;s=0;)n.ATH.eql_w[s]*=I}for(E=g=0;E0;){v=p>e.sampleWindow-e.totsamp?e.sampleWindow-e.totsamp:p,dMAX_ORDER-d&&(v=MAX_ORDER-d)):(h=i+d,u=a,b=l+d,m=o),n(u,h,e.lstepbuf,e.lstep+e.totsamp,v,t[e.reqindex]),n(m,b,e.rstepbuf,e.rstep+e.totsamp,v,t[e.reqindex]),r(e.lstepbuf,e.lstep+e.totsamp,e.loutbuf,e.lout+e.totsamp,v,s[e.reqindex]),r(e.rstepbuf,e.rstep+e.totsamp,e.routbuf,e.rout+e.totsamp,v,s[e.reqindex]),h=e.lout+e.totsamp,u=e.loutbuf,b=e.rout+e.totsamp,m=e.routbuf;for(var g=v%8;0!=g--;)e.lsum+=_(u[h++]),e.rsum+=_(m[b++]);for(g=v/8;0!=g--;)e.lsum+=_(u[h+0])+_(u[h+1])+_(u[h+2])+_(u[h+3])+_(u[h+4])+_(u[h+5])+_(u[h+6])+_(u[h+7]),h+=8,e.rsum+=_(m[b+0])+_(m[b+1])+_(m[b+2])+_(m[b+3])+_(m[b+4])+_(m[b+5])+_(m[b+6])+_(m[b+7]),b+=8;if(p-=v,d+=v,e.totsamp+=v,e.totsamp==e.sampleWindow){var S=10*Xe.STEPS_per_dB*Math.log10((e.lsum+e.rsum)/e.totsamp*.5+1e-37),M=S<=0?0:0|S;M>=e.A.length&&(M=e.A.length-1),e.A[M]++,e.lsum=e.rsum=0,Ne.arraycopy(e.loutbuf,e.totsamp,e.loutbuf,0,MAX_ORDER),Ne.arraycopy(e.routbuf,e.totsamp,e.routbuf,0,MAX_ORDER),Ne.arraycopy(e.lstepbuf,e.totsamp,e.lstepbuf,0,MAX_ORDER),Ne.arraycopy(e.rstepbuf,e.totsamp,e.rstepbuf,0,MAX_ORDER),e.totsamp=0}if(e.totsamp>e.sampleWindow)return GAIN_ANALYSIS_ERROR}return f0&&!((n-=e[t])<=0););return 64.82-t/Xe.STEPS_per_dB}(e.A,e.A.length),t=0;t>2&63)>=32&&(t-=64),o=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>8&63)>=32&&(t-=64),b=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>14&63)>=32&&(t-=64),m=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>20&63)>=32&&(t-=64),p=m*Math.pow(10,t/4/10),t=0;tba.MAX_BITS_PER_GRANULE&&(b=ba.MAX_BITS_PER_GRANULE),i=0,o=0;o3*n/4&&(c[o]=3*n/4),c[o]<0&&(c[o]=0),c[o]+s[o]>ba.MAX_BITS_PER_CHANNEL&&(c[o]=Math.max(0,ba.MAX_BITS_PER_CHANNEL-s[o])),i+=c[o];if(i>u)for(o=0;oba.MAX_BITS_PER_GRANULE){var m=0;for(o=0;o.5&&(n=.5);var r=0|.5*n*(e[0]+e[1]);r>ba.MAX_BITS_PER_CHANNEL-e[0]&&(r=ba.MAX_BITS_PER_CHANNEL-e[0]),r<0&&(r=0),e[1]>=125&&(e[1]-r>125?(e[0]s&&(e[0]=s*e[0]/r,e[1]=s*e[1]/r),ca(e[0]<=ba.MAX_BITS_PER_CHANNEL),ca(e[1]<=ba.MAX_BITS_PER_CHANNEL),ca(e[0]+e[1]<=ba.MAX_BITS_PER_GRANULE)},this.athAdjust=function(e,a,t){var s=90.30873362,n=oa.FAST_LOG10_X(a,10),r=e*e,_=0;return n-=t,r>1e-20&&(_=1+oa.FAST_LOG10_X(r,10/s)),_<0&&(_=0),n*=_,n+=t+s-94.82444863,Math.pow(10,.1*n)},this.calc_xmin=function(e,a,t,n){var r,_=0,i=e.internal_flags,o=0,l=0,f=i.ATH,c=t.xr,h=e.VBR==_a.vbr_mtrh?1:0,u=i.masking_lower;for(e.VBR!=_a.vbr_mtrh&&e.VBR!=_a.vbr_mt||(u=1),r=0;r>1,B=0;do{B+=E=c[o]*c[o],w+=E0);if(B>S&&l++,r==ha.SBPSY_l)w<(R=S*i.nsPsy.longfact[r])&&(w=R);if(0!=h&&(S=w),!e.ATHonly)if((A=a.en.l[r])>0)R=B*a.thm.l[r]*u/A,0!=h&&(R*=i.nsPsy.longfact[r]),S>1;M=g/v,w=s;do{var E,T;B+=E=c[o]*c[o],w+=E0);if(B>g&&l++,p==ha.SBPSY_s)w<(R=g*i.nsPsy.shortfact[p])&&(w=R);if(S=0!=h?w:g,!e.ATHonly&&!e.ATHshort)if((A=a.en.s[p][d])>0)R=B*a.thm.s[p][d]*u/A,0!=h&&(R*=i.nsPsy.shortfact[p]),Sn[_-3+1]&&(n[_-3+1]+=(n[_-3]-n[_-3+1])*i.decay),n[_-3+1]>n[_-3+2]&&(n[_-3+2]+=(n[_-3+1]-n[_-3+2])*i.decay))}return l},this.calc_noise_core=function(e,a,t,s){var n=0,r=a.s,_=e.l3_enc;if(r>e.count1)for(;0!=t--;){o=e.xr[r],r++,n+=o*o,o=e.xr[r],r++,n+=o*o}else if(r>e.big_values){var i=la(2);for(i[0]=0,i[1]=s;0!=t--;){o=Math.abs(e.xr[r])-i[_[r]],r++,n+=o*o,o=Math.abs(e.xr[r])-i[_[r]],r++,n+=o*o}}else for(;0!=t--;){var o;o=Math.abs(e.xr[r])-c[_[r]]*s,r++,n+=o*o,o=Math.abs(e.xr[r])-c[_[r]]*s,r++,n+=o*o}return a.s=r,n},this.calc_noise=function(e,a,t,s,n){var r,_,i,f=0,c=0,h=0,u=0,m=0,p=-20,v=0,d=e.scalefac,g=0;for(s.over_SSD=0,r=0;r>1,v+e.width[r]>e.max_nonzero_coeff)_=(A=e.max_nonzero_coeff-v+1)>0?A>>1:0;var B=new b(v);w=this.calc_noise_core(e,B,_,R),v=B.s,null!=n&&(n.step[r]=M,n.noise[r]=w),w=t[f++]=w/a[c++],w=oa.FAST_LOG10(Math.max(w,1e-20)),null!=n&&(n.noise_log[r]=w)}if(null!=n&&(n.global_gain=e.global_gain),m+=w,w>0)S=Math.max(0|10*w+.5,1),s.over_SSD+=S*S,h++,u+=w;p=Math.max(p,w)}return s.over_count=h,s.tot_noise=m,s.over_noise=u,s.max_noise=p,h},this.set_pinfo=function(e,a,t,s,n){var r,_,i,l,f,c=e.internal_flags,h=0==a.scalefac_scale?.5:1,u=a.scalefac,b=la(L3Side.SFBMAX),m=la(L3Side.SFBMAX),p=new CalcNoiseResult;calc_xmin(e,t,a,b),calc_noise(a,b,m,p,null);var v=0;for(_=a.sfb_lmax,a.block_type!=ha.SHORT_TYPE&&0==a.mixed_block_flag&&(_=22),r=0;r<_;r++){var d=c.scalefac_band.l[r],g=(S=c.scalefac_band.l[r+1])-d;for(l=0;v0&&!e.ATHonly?l/=t.en.l[r]:l=0,c.pinfo.thr[s][n][r]=f*Math.max(l*t.thm.l[r],c.ATH.l[r]),c.pinfo.LAMEsfb[s][n][r]=0,0!=a.preflag&&r>=11&&(c.pinfo.LAMEsfb[s][n][r]=-h*o[r]),r=0),c.pinfo.LAMEsfb[s][n][r]-=h*u[r])}if(a.block_type==ha.SHORT_TYPE)for(_=r,r=a.sfb_smin;r0?l/=t.en.s[r][M]:l=0,(e.ATHonly||e.ATHshort)&&(l=0),c.pinfo.thr_s[s][n][3*r+M]=f*Math.max(l*t.thm.s[r][M],c.ATH.s[r]),c.pinfo.LAMEsfb_s[s][n][3*r+M]=-2*a.subblock_gain[M],r0),e>>=1;0!=e--;)n[r++]=_>t[s++]?0:1,n[r++]=_>t[s++]?0:1}function r(e,t,s,n,r,_){Ma(e>0);var i=(e>>=1)%2;for(e>>=1;0!=e--;){var o,l,f,c,h,u,b,m;o=s[n++]*t,l=s[n++]*t,h=0|o,f=s[n++]*t,u=0|l,c=s[n++]*t,b=0|f,o+=a.adj43[h],m=0|c,l+=a.adj43[u],r[_++]=0|o,f+=a.adj43[b],r[_++]=0|l,c+=a.adj43[m],r[_++]=0|f,r[_++]=0|c}0!=i&&(h=0|(o=s[n++]*t),u=0|(l=s[n++]*t),o+=a.adj43[h],l+=a.adj43[u],r[_++]=0|o,r[_++]=0|l)}var _=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function i(e,a,t,s){var n=function(e,a,t){var s=0,n=0;do{var r=e[a++],_=e[a++];s>=16)>r&&(i=r,s++),n.bits+=i,s}(e,a,t,_[n-1],s);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return function(e,a,t,s,n){var r=0,_=0,i=0,o=Aa.ht[s].xlen,l=Aa.ht[s].hlen,f=Aa.ht[s+1].hlen,c=Aa.ht[s+2].hlen;do{var h=e[a+0]*o+e[a+1];a+=2,r+=l[h],_+=f[h],i+=c[h]}while(a_&&(r=_,u++),r>i&&(r=i,u=s+2),n.bits+=r,u}(e,a,t,_[n-1],s);default:if(n>Ba.IXMAX_VAL)return s.bits=Ba.LARGE_BITS,-1;var r,i;for(n-=15,r=24;r<32&&!(Aa.ht[r].linmax>=n);r++);for(i=r-8;i<24&&!(Aa.ht[i].linmax>=n);i++);return function(e,a,t,s,n,r){var _,i=65536*Aa.ht[s].xlen+Aa.ht[n].xlen,o=0;do{var l=e[a++],f=e[a++];0!=l&&(l>14&&(l=15,o+=i),l*=16),0!=f&&(f>14&&(f=15,o+=i),l+=f),o+=Aa.largetbl[l]}while(a>=16)>_&&(o=_,s=n),r.bits+=o,s}(e,a,t,i,r,s)}}function o(e,a,s,n,r,_,o,l){for(var f=a.big_values,c=2;c=f)break;var u=r[c-2]+a.count1bits;if(s.part2_3_length<=u)break;var b=new t(u),m=i(n,h,f,b);u=b.bits,s.part2_3_length<=u||(s.assign(a),s.part2_3_length=u,s.region0_count=_[c-2],s.region1_count=c-2-_[c-2],s.table_select[0]=o[c-2],s.table_select[1]=l[c-2],s.table_select[2]=m)}}this.noquant_count_bits=function(e,a,s){var n=a.l3_enc,r=Math.min(576,a.max_nonzero_coeff+2>>1<<1);for(null!=s&&(s.sfb_count1=0);r>1&&!(n[r-1]|n[r-2]);r-=2);a.count1=r;for(var _=0,o=0;r>3;r-=4){var l;if((2147483647&(n[r-1]|n[r-2]|n[r-3]|n[r-4]))>1)break;l=2*(2*(2*n[r-4]+n[r-3])+n[r-2])+n[r-1],_+=Aa.t32l[l],o+=Aa.t33l[l]}var f=_;if(a.count1table_select=0,_>o&&(f=o,a.count1table_select=1),a.count1bits=f,a.big_values=r,0==r)return f;if(a.block_type==wa.SHORT_TYPE)(_=3*e.scalefac_band.s[3])>a.big_values&&(_=a.big_values),o=a.big_values;else if(a.block_type==wa.NORM_TYPE){if(Ma(r<=576),_=a.region0_count=e.bv_scf[r-2],o=a.region1_count=e.bv_scf[r-1],Ma(_+o+2(o=r)&&(_=o);if(_=Math.min(_,r),o=Math.min(o,r),Ma(_>=0),Ma(o>=0),0<_){c=new t(f);a.table_select[0]=i(n,0,_,c),f=c.bits}if(_o)return Ba.LARGE_BITS;if(function(e,t,s,_,i){var o,l,f,c=0,h=0,u=0,b=0,m=t,p=0,v=m,d=0,g=e,S=0;for(f=null!=i&&_.global_gain==i.global_gain,l=_.block_type==wa.SHORT_TYPE?38:21,o=0;o<=l;o++){var M=-1;if((f||_.block_type==wa.NORM_TYPE)&&(M=_.global_gain-(_.scalefac[o]+(0!=_.preflag?a.pretab[o]:0)<<_.scalefac_scale+1)-8*_.subblock_gain[_.window[o]]),Ma(_.width[o]>=0),f&&i.step[o]==M)0!=h&&(r(h,s,g,S,v,d),h=0),0!=u&&(n(u,s,g,S,v,d),u=0);else{var w,A=_.width[o];if(c+_.width[o]>_.max_nonzero_coeff&&(w=_.max_nonzero_coeff-c+1,ga.fill(t,_.max_nonzero_coeff,576,0),(A=w)<0&&(A=0),o=l+1),0==h&&0==u&&(v=m,d=p,g=e,S=b),null!=i&&i.sfb_count1>0&&o>=i.sfb_count1&&i.step[o]>0&&M>=i.step[o]?(0!=h&&(r(h,s,g,S,v,d),h=0,v=m,d=p,g=e,S=b),u+=A):(0!=u&&(n(u,s,g,S,v,d),u=0,v=m,d=p,g=e,S=b),h+=A),A<=0){0!=u&&(n(u,s,g,S,v,d),u=0),0!=h&&(r(h,s,g,S,v,d),h=0);break}}o<=l&&(p+=_.width[o],b+=_.width[o],c+=_.width[o])}0!=h&&(r(h,s,g,S,v,d),h=0),0!=u&&(n(u,s,g,S,v,d),u=0)}(t,i,a.IPOW20(s.global_gain),s,_),2&e.substep_shaping)for(var l=0,f=s.global_gain+s.scalefac_scale,c=.634521682242439/a.IPOW20(f),h=0;h=0),0==e.pseudohalf[h])l+=b;else for(u=l,l+=b;u=c?i[u]:0}return this.noquant_count_bits(e,s,_)},this.best_huffman_divide=function(e,a){var s=new Ra,n=a.l3_enc,r=Sa(23),_=Sa(23),l=Sa(23),f=Sa(23);if(a.block_type!=wa.SHORT_TYPE||1!=e.mode_gr){s.assign(a),a.block_type==wa.NORM_TYPE&&(!function(e,a,s,n,r,_,o){for(var l=a.big_values,f=0;f<=22;f++)n[f]=Ba.LARGE_BITS;for(f=0;f<16;f++){var c=e.scalefac_band.l[f+1];if(c>=l)break;var h=0,u=new t(h),b=i(s,0,c,u);h=u.bits;for(var m=0;m<8;m++){var p=e.scalefac_band.l[f+m+2];if(p>=l)break;var v=h,d=i(s,c,p,u=new t(v));v=u.bits,n[f+m]>v&&(n[f+m]=v,r[f+m]=f,_[f+m]=b,o[f+m]=d)}}}(e,a,n,r,_,l,f),o(e,s,a,n,r,_,l,f));var c=s.big_values;if(!(0==c||(n[c-2]|n[c-1])>1||(c=a.count1+2)>576)){s.assign(a),s.count1=c;var h=0,u=0;for(Ma(c<=576);c>s.big_values;c-=4){var b=2*(2*(2*n[c-4]+n[c-3])+n[c-2])+n[c-1];h+=Aa.t32l[b],u+=Aa.t33l[b]}if(s.big_values=c,s.count1table_select=0,h>u&&(h=u,s.count1table_select=1),s.count1bits=h,s.block_type==wa.NORM_TYPE)o(e,s,a,n,r,_,l,f);else{if(s.part2_3_length=h,(h=e.scalefac_band.l[8])>c&&(h=c),h>0){var m=new t(s.part2_3_length);s.table_select[0]=i(n,0,h,m),s.part2_3_length=m.bits}if(c>h){m=new t(s.part2_3_length);s.table_select[1]=i(n,h,c,m),s.part2_3_length=m.bits}a.part2_3_length>s.part2_3_length&&a.assign(s)}}}};var l=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],f=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],c=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],h=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];e.slen1_tab=c,e.slen2_tab=h,this.best_scalefac_store=function(e,t,s,n){var r,_,i,o,u=n.tt[t][s],b=0;for(i=0,r=0;r=0),i+=m,o=-m;o<0&&0==u.l3_enc[o+i];o++);0==o&&(u.scalefac[r]=b=-2)}if(0==u.scalefac_scale&&0==u.preflag){var p=0;for(r=0;r0&&(p|=u.scalefac[r]);if(!(1&p)&&0!=p){for(r=0;r0&&(u.scalefac[r]>>=1);u.scalefac_scale=b=1}}if(0==u.preflag&&u.block_type!=wa.SHORT_TYPE&&2==e.mode_gr){for(r=11;r0&&(u.scalefac[r]-=a.pretab[r]);u.preflag=b=1}}for(_=0;_<4;_++)n.scfsi[s][_]=0;for(2==e.mode_gr&&1==t&&n.tt[0][s].block_type!=wa.SHORT_TYPE&&n.tt[1][s].block_type!=wa.SHORT_TYPE&&(!function(e,a){for(var t,s=a.tt[1][e],n=a.tt[0][e],r=0;r=0);t++);if(t==Aa.scfsi_band[r+1]){for(t=Aa.scfsi_band[r];tb&&(s.part2_length=b,s.scalefac_compress=r)}}(s,n),b=0),r=0;rn[t]&&(e.part2_length=n[t],e.scalefac_compress=t);return e.part2_length==Ba.LARGE_BITS};var p=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(e,t){var s,n,r,_,i,o,l,f,c=Sa(4),h=t.scalefac;for(s=0!=t.preflag?2:0,l=0;l<4;l++)c[l]=0;if(t.block_type==wa.SHORT_TYPE){n=1;var u=a.nr_of_sfb_block[s][n];for(f=0,r=0;r<4;r++)for(_=u[r]/3,l=0;l<_;l++,f++)for(i=0;i<3;i++)h[3*f+i]>c[r]&&(c[r]=h[3*f+i])}else{n=0;u=a.nr_of_sfb_block[s][n];for(f=0,r=0;r<4;r++)for(_=u[r],l=0;l<_;l++,f++)h[f]>c[r]&&(c[r]=h[f])}for(o=!1,r=0;r<4;r++)c[r]>p[s][r]&&(o=!0);if(!o){var b,m,d,g;for(t.sfb_partition_table=a.nr_of_sfb_block[s][n],r=0;r<4;r++)t.slen[r]=v[c[r]];switch(b=t.slen[0],m=t.slen[1],d=t.slen[2],g=t.slen[3],s){case 0:t.scalefac_compress=(5*b+m<<4)+(d<<2)+g;break;case 1:t.scalefac_compress=400+(5*b+m<<2)+d;break;case 2:t.scalefac_compress=500+3*b+m;break;default:da.err.printf("intensity stereo not implemented yet\n")}}if(!o)for(Ma(null!=t.sfb_partition_table),t.part2_length=0,r=0;r<4;r++)t.part2_length+=t.slen[r]*t.sfb_partition_table[r];return o};var v=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(e){for(var a=2;a<=576;a+=2){for(var t,n=0;e.scalefac_band.l[++n]a;)t--;for(t<0&&(t=s[n][0]),e.bv_scf[a-2]=t,t=s[n][1];e.scalefac_band.l[t+e.bv_scf[a-2]+2]>a;)t--;t<0&&(t=s[n][1]),e.bv_scf[a-1]=t}}};e(ya);var Ea=g,Ta=Ea.System;Ea.VbrMode,Ea.Float,Ea.ShortBlock,Ea.Util;var ka=Ea.Arrays;Ea.new_array_n;var xa=Ea.new_byte;Ea.new_double,Ea.new_float;var Pa=Ea.new_float_n,Ia=Ea.new_int;Ea.new_int_n;var La=Ea.assert,Va=ya,Ha=sa,Na=M(),Oa=xe;function Xa(){var e=this,a=32,t=null,s=null,n=null,r=null;this.setModules=function(e,a,_,i){t=e,s=a,n=_,r=i};var _=null,i=0,o=0,l=0;function f(e){Ta.arraycopy(e.header[e.w_ptr].buf,0,_,o,e.sideinfo_len),o+=e.sideinfo_len,i+=8*e.sideinfo_len,e.w_ptr=e.w_ptr+1&Oa.MAX_HEADER_BUF-1}function c(e,t,s){for(La(s0;){var n;0==l&&(l=8,o++,La(o=i),e.header[e.w_ptr].write_timing==i&&f(e),_[o]=0),n=Math.min(s,l),l-=n,La((s-=n)>s<0;){var n;0==l&&(l=8,o++,La(o>s<=0),a>=8&&(c(s,76,8),a-=8),a>=8&&(c(s,65,8),a-=8),a>=8&&(c(s,77,8),a-=8),a>=8&&(c(s,69,8),a-=8),a>=32){var r=n.getLameShortVersion();if(a>=32)for(t=0;t=8;++t)a-=8,c(s,r.charAt(t),8)}for(;a>=1;a-=1)c(s,s.ancillary_flag,1),s.ancillary_flag^=e.disable_reservoir?0:1;La(0==a)}function b(e,t,s){for(var n=e.header[e.h_ptr].ptr;s>0;){var r=Math.min(s,8-(7&n));La((s-=r)>3]|=t>>s<<8-(7&n)-r,n+=r}e.header[e.h_ptr].ptr=n}function m(e,a){e<<=8;for(var t=0;t<8;t++)65536&((a<<=1)^(e<<=1))&&(a^=32773);return a}function p(e,a){var t,s=Ha.ht[a.count1table_select+32],n=0,r=a.big_values,_=a.big_values;for(La(a.count1table_select<2),t=(a.count1-a.big_values)/4;t>0;--t){var i,o=0,l=0;0!=(i=a.l3_enc[r+0])&&(l+=8,a.xr[_+0]<0&&o++,La(i<=1)),0!=(i=a.l3_enc[r+1])&&(l+=4,o*=2,a.xr[_+1]<0&&o++,La(i<=1)),0!=(i=a.l3_enc[r+2])&&(l+=2,o*=2,a.xr[_+2]<0&&o++,La(i<=1)),0!=(i=a.l3_enc[r+3])&&(l++,o*=2,a.xr[_+3]<0&&o++,La(i<=1)),r+=4,_+=4,c(e,o+s.table[l],s.hlen[l]),n+=s.hlen[l]}return n}function v(e,t,s,n,r){var _=Ha.ht[t],i=0;if(La(t<32),0==t)return i;for(var o=s;o15){if(m>14){var v=m-15;La(v<=_.linmax),b|=v<<1,f=h,m=15}if(p>14){var d=p-15;La(d<=_.linmax),b<<=h,b|=d,f+=h,p=15}u=16}0!=p&&(b<<=1,r.xr[o+1]<0&&b++,l--),La((m|p)<16),m=m*u+p,f-=l,l+=_.hlen[m],La(l<=a),La(f<=a),c(e,_.table[m],l),c(e,b,f),i+=l+f}return i}function d(e,a){var t=3*e.scalefac_band.s[3];t>a.big_values&&(t=a.big_values);var s=v(e,a.table_select[0],0,t,a);return s+=v(e,a.table_select[1],t,a.big_values,a)}function g(e,a){var t,s,n,r;t=a.big_values,La(0<=t&&t<=576);var _=a.region0_count+1;return La(0<=_),La(_t&&(n=t),(r=e.scalefac_band.l[_])>t&&(r=t),s=v(e,a.table_select[0],0,n,a),s+=v(e,a.table_select[1],n,r,a),s+=v(e,a.table_select[2],r,t,a)}function S(){this.total=0}function M(a,t){var s,n,r,_,l,f=a.internal_flags;return l=f.w_ptr,-1==(_=f.h_ptr-1)&&(_=Oa.MAX_HEADER_BUF-1),s=f.header[_].write_timing-i,t.total=s,s>=0&&(n=1+_-l,_>8),a[5]=byte(255&t)},this.flush_bitstream=function(e){var a,s,n=e.internal_flags,r=n.h_ptr-1;if(-1==r&&(r=Oa.MAX_HEADER_BUF-1),a=n.l3_side,!((s=M(e,new S))<0)){if(u(e,s),La(n.header[r].write_timing+this.getframebits(e)==i),n.ResvSize=0,a.main_data_begin=0,n.findReplayGain){var _=t.GetTitleGain(n.rgdata);La(NEQ(_,GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)),n.RadioGain=0|Math.floor(10*_+.5)}n.findPeakSample&&(n.noclipGainChange=0|Math.ceil(20*Math.log10(n.PeakSample/32767)*10),n.noclipGainChange>0&&(EQ(e.scale,1)||EQ(e.scale,0))?n.noclipScale=Math.floor(32767/n.PeakSample*100)/100:n.noclipScale=-1)}},this.add_dummy_byte=function(e,a,t){for(var s,n=e.internal_flags;t-- >0;)for(h(0,a,8),s=0;s=0),b(r,t.main_data_begin,9),2==r.channels_out?b(r,t.private_bits,3):b(r,t.private_bits,5),n=0;n=0),b(r,t.main_data_begin,8),b(r,t.private_bits,r.channels_out),s=0,n=0;n ResvSize"),8*a.main_data_begin!=t.ResvSize&&(Ta.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n",8*a.main_data_begin,t.ResvSize,a.resvDrain_post,a.resvDrain_pre,8*t.sideinfo_len,n-a.resvDrain_post-8*t.sideinfo_len,n,n%8,s),Ta.err.println("This is a fatal error. It has several possible causes:"),Ta.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),Ta.err.println(" 9%% Your system is overclocked"),Ta.err.println(" 1%% bug in LAME encoding library"),t.ResvSize=8*a.main_data_begin),La(i%8==0),i>1e9){var r;for(r=0;ri)return-1;if(Ta.arraycopy(_,0,a,n,c),o=-1,l=0,0!=f){var h=Ia(1);if(h[0]=e.nMusicCRC,r.updateMusicCRC(h,a,n,c),e.nMusicCRC=h[0],c>0&&(e.VBR_seek_table.nBytesWritten+=c),e.decode_on_the_fly)for(var u,b=Pa([2,1152]),m=c,p=-1;0!=p;)if(p=s.hip_decode1_unclipped(e.hip,a,n,m,b[0],b[1]),m=0,-1==p&&(p=0),p>0){if(La(p<=1152),e.findPeakSample){for(u=0;ue.PeakSample?e.PeakSample=b[0][u]:-b[0][u]>e.PeakSample&&(e.PeakSample=-b[0][u]);if(e.channels_out>1)for(u=0;ue.PeakSample?e.PeakSample=b[1][u]:-b[1][u]>e.PeakSample&&(e.PeakSample=-b[1][u])}if(e.findReplayGain&&t.AnalyzeSamples(e.rgdata,b[0],0,b[1],0,p,e.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6}}return c},this.init_bit_stream_w=function(e){_=xa(Lame.LAME_MAXMP3BUFFER),e.h_ptr=e.w_ptr=0,e.header[e.h_ptr].write_timing=0,o=-1,l=0,i=0}}Xa.EQ=function(e,a){return Math.abs(e)>Math.abs(a)?Math.abs(e-a)<=1e-6*Math.abs(e):Math.abs(e-a)<=1e-6*Math.abs(a)},Xa.NEQ=function(e,a){return!Xa.EQ(e,a)};var Da=Xa,Fa=e(Da),Ya=g,qa=Ya.System,Ca=Ya.VbrMode;Ya.Float;var Ga=Ya.ShortBlock;Ya.Util,Ya.Arrays,Ya.new_array_n,Ya.new_byte,Ya.new_double;var ja=Ya.new_float;Ya.new_float_n,Ya.new_int;var Ua=Ya.new_int_n,za=Ya.new_short_n,Ka=Ya.assert,Za=D,Qa=G,Wa=xe,Ja=Ve,$a=Ge,et=ea,at=Da,tt=sa,st=M();var nt=function e(){var a,t,s,n,r,_=this;e.V9=410,e.V8=420,e.V7=430,e.V6=440,e.V5=450,e.V4=460,e.V3=470,e.V2=480,e.V1=490,e.V0=500,e.R3MIX=1e3,e.STANDARD=1001,e.EXTREME=1002,e.INSANE=1003,e.STANDARD_FAST=1004,e.EXTREME_FAST=1005,e.MEDIUM=1006,e.MEDIUM_FAST=1007,e.LAME_MAXMP3BUFFER=147456;var i,o,l,f=new Za;function c(){this.mask_adjust=0,this.mask_adjust_short=0,this.bo_l_weight=ja(st.SBMAX_l),this.bo_s_weight=ja(st.SBMAX_s)}function h(){this.lowerlimit=0}function u(e,a){this.lowpass=a}this.enc=new st,this.setModules=function(e,_,c,h,u,b,m,p,v){a=e,t=_,s=c,n=h,r=u,i=b,o=p,l=v,this.enc.setModules(t,f,n,i)};var b=4294479419;function m(e){return e>1?0:e<=0?1:Math.cos(Math.PI/2*e)}function p(e,a){switch(e){case 44100:return a.version=1,0;case 48e3:return a.version=1,1;case 32e3:return a.version=1,2;case 22050:case 11025:return a.version=0,0;case 24e3:case 12e3:return a.version=0,1;case 16e3:case 8e3:return a.version=0,2;default:return a.version=0,-1}}function v(e,a,t){t<16e3&&(a=2);for(var s=tt.bitrate_table[a][1],n=2;n<=14;n++)tt.bitrate_table[a][n]>0&&Math.abs(tt.bitrate_table[a][n]-e)0&&tt.bitrate_table[a][s]==e)return s;return-1}function g(e,a){var t=[new u(8,2e3),new u(16,3700),new u(24,3900),new u(32,5500),new u(40,7e3),new u(48,7500),new u(56,1e4),new u(64,11e3),new u(80,13500),new u(96,15100),new u(112,15600),new u(128,17e3),new u(160,17500),new u(192,18600),new u(224,19400),new u(256,19700),new u(320,20500)],s=_.nearestBitrateFullIndex(a);e.lowerlimit=t[s].lowpass}function S(e){var a=st.BLKSIZE+e.framesize-st.FFTOFFSET;return a=Math.max(a,512+e.framesize-32),Ka(Wa.MFSIZE>=a),a}function M(e,a,t,s,n,r){var i=_.enc.lame_encode_mp3_frame(e,a,t,s,n,r);return e.frameNum++,i}function w(){this.n_in=0,this.n_out=0}function A(){this.num_used=0}function R(e,a){return 0!=a?R(a,e%a):e}function B(e,a,t){var s=Math.PI*a;(e/=t)<0&&(e=0),e>1&&(e=1);var n=e-.5,r=.42-.5*Math.cos(2*e*Math.PI)+.08*Math.cos(4*e*Math.PI);return Math.abs(n)<1e-9?s/Math.PI:r*Math.sin(t*s*n)/(Math.PI*t*n)}function y(e,a,t,s,n,r,_,i,o){var l,f,c=e.internal_flags,h=0,u=e.out_samplerate/R(e.out_samplerate,e.in_samplerate);u>Wa.BPC&&(u=Wa.BPC);var b=Math.abs(c.resample_ratio-Math.floor(.5+c.resample_ratio))<1e-4?1:0,m=1/c.resample_ratio;m>1&&(m=1);var p=31;0==p%2&&--p;var v=(p+=b)+1;if(0==c.fill_buffer_resample_init){for(c.inbuf_old[0]=ja(v),c.inbuf_old[1]=ja(v),l=0;l<=2*u;++l)c.blackfilt[l]=ja(v);for(c.itime[0]=0,c.itime[1]=0,h=0;h<=2*u;h++){var d=0,g=(h-u)/(2*u);for(l=0;l<=p;l++)d+=c.blackfilt[h][l]=B(l-g,m,p);for(l=0;l<=p;l++)c.blackfilt[h][l]/=d}c.fill_buffer_resample_init=1}var S=c.inbuf_old[o];for(f=0;f=_)break;g=M-c.itime[o]-(h+p%2*.5);Ka(Math.abs(g)<=.501),w=0|Math.floor(2*g*u+u+.5);var A=0;for(l=0;l<=p;++l){var y=0|l+h-p/2;Ka(y<_),Ka(y+v>=0),A+=(y<0?S[v+y]:n[r+y])*c.blackfilt[w][l]}a[t+f]=A}if(i.num_used=Math.min(_,p+h-p/2),c.itime[o]+=i.num_used-f*c.resample_ratio,i.num_used>=v)for(l=0;l1.0001)for(var i=0;i<_.channels_out;i++){var o=new A;r.n_out=y(e,a[i],_.mf_size,e.framesize,t[i],s,n,o,i),r.n_in=o.num_used}else{r.n_out=Math.min(e.framesize,n),r.n_in=r.n_out;for(var l=0;le-s?t:n},this.lame_init_params=function(e){var _,u,S,M=e.internal_flags;if(M.Class_ID=0,null==M.ATH&&(M.ATH=new Ja),null==M.PSY&&(M.PSY=new c),null==M.rgdata&&(M.rgdata=new $a),M.channels_in=e.num_channels,1==M.channels_in&&(e.mode=MPEGMode.MONO),M.channels_out=e.mode==MPEGMode.MONO?1:2,M.mode_ext=st.MPG_MD_MS_LR,e.mode==MPEGMode.MONO&&(e.force_ms=!1),e.VBR==Ca.vbr_off&&128!=e.VBR_mean_bitrate_kbps&&0==e.brate&&(e.brate=e.VBR_mean_bitrate_kbps),e.VBR==Ca.vbr_off||e.VBR==Ca.vbr_mtrh||e.VBR==Ca.vbr_mt||(e.free_format=!1),e.VBR==Ca.vbr_off&&0==e.brate&&at.EQ(e.compression_ratio,0)&&(e.compression_ratio=11.025),e.VBR==Ca.vbr_off&&e.compression_ratio>0&&(0==e.out_samplerate&&(e.out_samplerate=map2MP3Frequency(int(.97*e.in_samplerate))),e.brate=0|16*e.out_samplerate*M.channels_out/(1e3*e.compression_ratio),M.samplerate_index=p(e.out_samplerate,e),e.free_format||(e.brate=v(e.brate,e.version,e.out_samplerate))),0!=e.out_samplerate&&(e.out_samplerate<16e3?(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,64)):e.out_samplerate<32e3?(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,160)):(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,32),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,320))),0==e.lowpassfreq){var w=16e3;switch(e.VBR){case Ca.vbr_off:g(A=new h,e.brate),w=A.lowerlimit;break;case Ca.vbr_abr:var A;g(A=new h,e.VBR_mean_bitrate_kbps),w=A.lowerlimit;break;case Ca.vbr_rh:var R=[19500,19e3,18600,18e3,17500,16e3,15600,14900,12500,1e4,3950];if(0<=e.VBR_q&&e.VBR_q<=9){var B=R[e.VBR_q],y=R[e.VBR_q+1],E=e.VBR_q_frac;w=linear_int(B,y,E)}else w=19500;break;default:R=[19500,19e3,18500,18e3,17500,16500,15500,14500,12500,9500,3950];if(0<=e.VBR_q&&e.VBR_q<=9){B=R[e.VBR_q],y=R[e.VBR_q+1],E=e.VBR_q_frac;w=linear_int(B,y,E)}else w=19500}e.mode!=MPEGMode.MONO||e.VBR!=Ca.vbr_off&&e.VBR!=Ca.vbr_abr||(w*=1.5),e.lowpassfreq=0|w}if(0==e.out_samplerate&&(2*e.lowpassfreq>e.in_samplerate&&(e.lowpassfreq=e.in_samplerate/2),e.out_samplerate=(_=0|e.lowpassfreq,u=e.in_samplerate,S=44100,u>=48e3?S=48e3:u>=44100?S=44100:u>=32e3?S=32e3:u>=24e3?S=24e3:u>=22050?S=22050:u>=16e3?S=16e3:u>=12e3?S=12e3:u>=11025?S=11025:u>=8e3&&(S=8e3),-1==_?S:(_<=15960&&(S=44100),_<=15250&&(S=32e3),_<=11220&&(S=24e3),_<=9970&&(S=22050),_<=7230&&(S=16e3),_<=5420&&(S=12e3),_<=4510&&(S=11025),_<=3970&&(S=8e3),u44100?48e3:u>32e3?44100:u>24e3?32e3:u>22050?24e3:u>16e3?22050:u>12e3?16e3:u>11025?12e3:u>8e3?11025:8e3:S))),e.lowpassfreq=Math.min(20500,e.lowpassfreq),e.lowpassfreq=Math.min(e.out_samplerate/2,e.lowpassfreq),e.VBR==Ca.vbr_off&&(e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.brate)),e.VBR==Ca.vbr_abr&&(e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.VBR_mean_bitrate_kbps)),e.bWriteVbrTag||(e.findReplayGain=!1,e.decode_on_the_fly=!1,M.findPeakSample=!1),M.findReplayGain=e.findReplayGain,M.decode_on_the_fly=e.decode_on_the_fly,M.decode_on_the_fly&&(M.findPeakSample=!0),M.findReplayGain&&a.InitGainAnalysis(M.rgdata,e.out_samplerate)==GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)return e.internal_flags=null,-6;switch(M.decode_on_the_fly&&!e.decode_only&&(null!=M.hip&&l.hip_decode_exit(M.hip),M.hip=l.hip_decode_init()),M.mode_gr=e.out_samplerate<=24e3?1:2,e.framesize=576*M.mode_gr,e.encoder_delay=st.ENCDELAY,M.resample_ratio=e.in_samplerate/e.out_samplerate,e.VBR){case Ca.vbr_mt:case Ca.vbr_rh:case Ca.vbr_mtrh:e.compression_ratio=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5][e.VBR_q];break;case Ca.vbr_abr:e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.VBR_mean_bitrate_kbps);break;default:e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.brate)}if(e.mode==MPEGMode.NOT_SET&&(e.mode=MPEGMode.JOINT_STEREO),e.highpassfreq>0?(M.highpass1=2*e.highpassfreq,e.highpasswidth>=0?M.highpass2=2*(e.highpassfreq+e.highpasswidth):M.highpass2=2*e.highpassfreq,M.highpass1/=e.out_samplerate,M.highpass2/=e.out_samplerate):(M.highpass1=0,M.highpass2=0),e.lowpassfreq>0?(M.lowpass2=2*e.lowpassfreq,e.lowpasswidth>=0?(M.lowpass1=2*(e.lowpassfreq-e.lowpasswidth),M.lowpass1<0&&(M.lowpass1=0)):M.lowpass1=2*e.lowpassfreq,M.lowpass1/=e.out_samplerate,M.lowpass2/=e.out_samplerate):(M.lowpass1=0,M.lowpass2=0),function(e){var a=e.internal_flags,t=32,s=-1;if(a.lowpass1>0){for(var n=999,r=0;r<=31;r++)(l=r/31)>=a.lowpass2&&(t=Math.min(t,r)),a.lowpass10&&a.highpass2<.75/31*.9&&(a.highpass1=0,a.highpass2=0,qa.err.println("Warning: highpass filter disabled. highpass frequency too small\n")),a.highpass2>0){var _=-1;for(r=0;r<=31;r++)(l=r/31)<=a.highpass1&&(s=Math.max(s,r)),a.highpass1a.highpass1?m((a.highpass2-l)/(a.highpass2-a.highpass1+1e-20)):1,o=a.lowpass2>a.lowpass1?m((l-a.lowpass1)/(a.lowpass2-a.lowpass1+1e-20)):1,a.amp_filter[r]=i*o}}(e),M.samplerate_index=p(e.out_samplerate,e),M.samplerate_index<0)return e.internal_flags=null,-1;if(e.VBR==Ca.vbr_off){if(e.free_format)M.bitrate_index=0;else if(e.brate=v(e.brate,e.version,e.out_samplerate),M.bitrate_index=d(e.brate,e.version,e.out_samplerate),M.bitrate_index<=0)return e.internal_flags=null,-1}else M.bitrate_index=1;e.analysis&&(e.bWriteVbrTag=!1),null!=M.pinfo&&(e.bWriteVbrTag=!1),t.init_bit_stream_w(M);for(var T,k=M.samplerate_index+3*e.version+6*(e.out_samplerate<16e3?1:0),x=0;x=0),e.VBR){case Ca.vbr_mt:e.VBR=Ca.vbr_mtrh;case Ca.vbr_mtrh:null==e.useTemporal&&(e.useTemporal=!1),s.apply_preset(e,500-10*e.VBR_q,0),e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),e.quality<5&&(e.quality=0),e.quality>5&&(e.quality=5),M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,e.experimentalY?M.sfb21_extra=!1:M.sfb21_extra=e.out_samplerate>44e3,M.iteration_loop=new VBRNewIterationLoop(r);break;case Ca.vbr_rh:s.apply_preset(e,500-10*e.VBR_q,0),M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,e.experimentalY?M.sfb21_extra=!1:M.sfb21_extra=e.out_samplerate>44e3,e.quality>6&&(e.quality=6),e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),M.iteration_loop=new VBROldIterationLoop(r);break;default:var L;M.sfb21_extra=!1,e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),(L=e.VBR)==Ca.vbr_off&&(e.VBR_mean_bitrate_kbps=e.brate),s.apply_preset(e,e.VBR_mean_bitrate_kbps,0),e.VBR=L,M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,L==Ca.vbr_off?M.iteration_loop=new et(r):M.iteration_loop=new ABRIterationLoop(r)}if(Ka(e.scale>=0),e.VBR!=Ca.vbr_off){if(M.VBR_min_bitrate=1,M.VBR_max_bitrate=14,e.out_samplerate<16e3&&(M.VBR_max_bitrate=8),0!=e.VBR_min_bitrate_kbps&&(e.VBR_min_bitrate_kbps=v(e.VBR_min_bitrate_kbps,e.version,e.out_samplerate),M.VBR_min_bitrate=d(e.VBR_min_bitrate_kbps,e.version,e.out_samplerate),M.VBR_min_bitrate<0))return-1;if(0!=e.VBR_max_bitrate_kbps&&(e.VBR_max_bitrate_kbps=v(e.VBR_max_bitrate_kbps,e.version,e.out_samplerate),M.VBR_max_bitrate=d(e.VBR_max_bitrate_kbps,e.version,e.out_samplerate),M.VBR_max_bitrate<0))return-1;e.VBR_min_bitrate_kbps=tt.bitrate_table[e.version][M.VBR_min_bitrate],e.VBR_max_bitrate_kbps=tt.bitrate_table[e.version][M.VBR_max_bitrate],e.VBR_mean_bitrate_kbps=Math.min(tt.bitrate_table[e.version][M.VBR_max_bitrate],e.VBR_mean_bitrate_kbps),e.VBR_mean_bitrate_kbps=Math.max(tt.bitrate_table[e.version][M.VBR_min_bitrate],e.VBR_mean_bitrate_kbps)}return e.tune&&(M.PSY.mask_adjust+=e.tune_value_a,M.PSY.mask_adjust_short+=e.tune_value_a),function(e){var a=e.internal_flags;switch(e.quality){default:case 9:a.psymodel=0,a.noise_shaping=0,a.noise_shaping_amp=0,a.noise_shaping_stop=0,a.use_best_huffman=0,a.full_outer_loop=0;break;case 8:e.quality=7;case 7:a.psymodel=1,a.noise_shaping=0,a.noise_shaping_amp=0,a.noise_shaping_stop=0,a.use_best_huffman=0,a.full_outer_loop=0;break;case 6:case 5:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=0,a.noise_shaping_stop=0,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=0,a.full_outer_loop=0;break;case 4:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=0,a.noise_shaping_stop=0,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 3:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=1,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 2:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),0==a.substep_shaping&&(a.substep_shaping=2),a.noise_shaping_amp=1,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 1:case 0:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),0==a.substep_shaping&&(a.substep_shaping=2),a.noise_shaping_amp=2,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0}}(e),Ka(e.scale>=0),e.athaa_type<0?M.ATH.useAdjust=3:M.ATH.useAdjust=e.athaa_type,M.ATH.aaSensitivityP=Math.pow(10,e.athaa_sensitivity/-10),null==e.short_blocks&&(e.short_blocks=Ga.short_block_allowed),e.short_blocks!=Ga.short_block_allowed||e.mode!=MPEGMode.JOINT_STEREO&&e.mode!=MPEGMode.STEREO||(e.short_blocks=Ga.short_block_coupled),e.quant_comp<0&&(e.quant_comp=1),e.quant_comp_short<0&&(e.quant_comp_short=0),e.msfix<0&&(e.msfix=0),e.exp_nspsytune=1|e.exp_nspsytune,e.internal_flags.nsPsy.attackthre<0&&(e.internal_flags.nsPsy.attackthre=Za.NSATTACKTHRE),e.internal_flags.nsPsy.attackthre_s<0&&(e.internal_flags.nsPsy.attackthre_s=Za.NSATTACKTHRE_S),Ka(e.scale>=0),e.scale<0&&(e.scale=1),e.ATHtype<0&&(e.ATHtype=4),e.ATHcurve<0&&(e.ATHcurve=4),e.athaa_loudapprox<0&&(e.athaa_loudapprox=2),e.interChRatio<0&&(e.interChRatio=0),null==e.useTemporal&&(e.useTemporal=!0),M.slot_lag=M.frac_SpF=0,e.VBR==Ca.vbr_off&&(M.slot_lag=M.frac_SpF=72e3*(e.version+1)*e.brate%e.out_samplerate|0),n.iteration_init(e),f.psymodel_init(e),Ka(e.scale>=0),0},this.lame_encode_flush=function(e,a,s,n){var r,_,i,l,f=e.internal_flags,c=za([2,1152]),h=0,u=f.mf_samples_to_encode-st.POSTDELAY,b=S(e);if(f.mf_samples_to_encode<1)return 0;for(r=0,e.in_samplerate!=e.out_samplerate&&(u+=16*e.out_samplerate/e.in_samplerate),(i=e.framesize-u%e.framesize)<576&&(i+=e.framesize),e.encoder_padding=i,l=(u+i)/e.framesize;l>0&&h>=0;){var m=b-f.mf_size,p=e.frameNum;m*=e.in_samplerate,(m/=e.out_samplerate)>1152&&(m=1152),m<1&&(m=1),_=n-r,0==n&&(_=0),s+=h=this.lame_encode_buffer(e,c[0],c[1],m,a,s,_),r+=h,l-=p!=e.frameNum?1:0}if(f.mf_samples_to_encode=0,h<0)return h;if(_=n-r,0==n&&(_=0),t.flush_bitstream(e),(h=t.copy_buffer(f,a,s,_,1))<0)return h;if(s+=h,_=n-(r+=h),0==n&&(_=0),e.write_id3tag_automatic){if(o.id3tag_write_v1(e),(h=t.copy_buffer(f,a,s,_,0))<0)return h;r+=h}return r},this.lame_encode_buffer=function(e,s,n,r,_,i,o){var l=e.internal_flags,f=[null,null];if(l.Class_ID!=b)return-3;if(0==r)return 0;!function(e,a){(null==e.in_buffer_0||e.in_buffer_nsamples1&&(f[1][c]=n[c]);return function(e,s,n,r,_,i,o){var l,f,c,h,u,m=e.internal_flags,p=0,v=[null,null],d=[null,null];if(m.Class_ID!=b)return-3;if(0==r)return 0;if(u=t.copy_buffer(m,_,i,o,0),u<0)return u;if(i+=u,p+=u,d[0]=s,d[1]=n,at.NEQ(e.scale,0)&&at.NEQ(e.scale,1))for(f=0;f0;){var A=[null,null],R=0,B=0;A[0]=d[0],A[1]=d[1];var y=new w;if(E(e,v,A,g,r,y),R=y.n_in,B=y.n_out,m.findReplayGain&&!m.decode_on_the_fly&&a.AnalyzeSamples(m.rgdata,v[0],m.mf_size,v[1],m.mf_size,B,m.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6;if(r-=R,g+=R,m.channels_out,m.mf_size+=B,Ka(m.mf_size<=Wa.MFSIZE),m.mf_samples_to_encode<1&&(m.mf_samples_to_encode=st.ENCDELAY+st.POSTDELAY),m.mf_samples_to_encode+=B,m.mf_size>=h){var T=o-p;if(0==o&&(T=0),(l=M(e,v[0],v[1],_,i,T))<0)return l;for(i+=l,p+=l,m.mf_size-=e.framesize,m.mf_samples_to_encode-=e.framesize,c=0;ca&&(t=-1,a=0);90||(e.quant_comp=l.quant_comp),0!=t?e.quant_comp_short=l.quant_comp_s:Math.abs(e.quant_comp_short- -1)>0||(e.quant_comp_short=l.quant_comp_s),0!=l.expY&&(e.experimentalY=0!=l.expY),0!=t?e.internal_flags.nsPsy.attackthre=l.st_lrm:Math.abs(e.internal_flags.nsPsy.attackthre- -1)>0||(e.internal_flags.nsPsy.attackthre=l.st_lrm),0!=t?e.internal_flags.nsPsy.attackthre_s=l.st_s:Math.abs(e.internal_flags.nsPsy.attackthre_s- -1)>0||(e.internal_flags.nsPsy.attackthre_s=l.st_s),0!=t?e.maskingadjust=l.masking_adj:Math.abs(e.maskingadjust-0)>0||(e.maskingadjust=l.masking_adj),0!=t?e.maskingadjust_short=l.masking_adj_short:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=l.masking_adj_short),0!=t?e.ATHlower=-l.ath_lower/10:Math.abs(10*-e.ATHlower-0)>0||(e.ATHlower=-l.ath_lower/10),0!=t?e.ATHcurve=l.ath_curve:Math.abs(e.ATHcurve- -1)>0||(e.ATHcurve=l.ath_curve),0!=t?e.athaa_sensitivity=l.ath_sensitivity:Math.abs(e.athaa_sensitivity- -1)>0||(e.athaa_sensitivity=l.ath_sensitivity),l.interch>0&&(0!=t?e.interChRatio=l.interch:Math.abs(e.interChRatio- -1)>0||(e.interChRatio=l.interch)),l.safejoint>0&&(e.exp_nspsytune=e.exp_nspsytune|l.safejoint),l.sfb21mod>0&&(e.exp_nspsytune=e.exp_nspsytune|l.sfb21mod<<20),0!=t?e.msfix=l.msfix:Math.abs(e.msfix- -1)>0||(e.msfix=l.msfix),0==t&&(e.VBR_q=a,e.VBR_q_frac=_)}var _=[new a(8,9,9,0,0,6.6,145,0,.95,0,-30,11,.0012,1),new a(16,9,9,0,0,6.6,145,0,.95,0,-25,11,.001,1),new a(24,9,9,0,0,6.6,145,0,.95,0,-20,11,.001,1),new a(32,9,9,0,0,6.6,145,0,.95,0,-15,11,.001,1),new a(40,9,9,0,0,6.6,145,0,.95,0,-10,11,9e-4,1),new a(48,9,9,0,0,6.6,145,0,.95,0,-10,11,9e-4,1),new a(56,9,9,0,0,6.6,145,0,.95,0,-6,11,8e-4,1),new a(64,9,9,0,0,6.6,145,0,.95,0,-2,11,8e-4,1),new a(80,9,9,0,0,6.6,145,0,.95,0,0,8,7e-4,1),new a(96,9,9,0,2.5,6.6,145,0,.95,0,1,5.5,6e-4,1),new a(112,9,9,0,2.25,6.6,145,0,.95,0,2,4.5,5e-4,1),new a(128,9,9,0,1.95,6.4,140,0,.95,0,3,4,2e-4,1),new a(160,9,9,1,1.79,6,135,0,.95,-2,5,3.5,0,1),new a(192,9,9,1,1.49,5.6,125,0,.97,-4,7,3,0,0),new a(224,9,9,1,1.25,5.2,125,0,.98,-6,9,2,0,0),new a(256,9,9,1,.97,5.2,125,0,1,-8,10,1,0,0),new a(320,9,9,1,.9,5.2,125,0,1,-10,12,0,0,0)];function i(e,a,s){var n=a,r=t.nearestBitrateFullIndex(a);if(e.VBR=it.vbr_abr,e.VBR_mean_bitrate_kbps=n,e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,320),e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.brate=e.VBR_mean_bitrate_kbps,e.VBR_mean_bitrate_kbps>320&&(e.disable_reservoir=!0),_[r].safejoint>0&&(e.exp_nspsytune=2|e.exp_nspsytune),_[r].sfscale>0&&(e.internal_flags.noise_shaping=2),Math.abs(_[r].nsbass)>0){var i=int(4*_[r].nsbass);i<0&&(i+=64),e.exp_nspsytune=e.exp_nspsytune|i<<2}return 0!=s?e.quant_comp=_[r].quant_comp:Math.abs(e.quant_comp- -1)>0||(e.quant_comp=_[r].quant_comp),0!=s?e.quant_comp_short=_[r].quant_comp_s:Math.abs(e.quant_comp_short- -1)>0||(e.quant_comp_short=_[r].quant_comp_s),0!=s?e.msfix=_[r].nsmsfix:Math.abs(e.msfix- -1)>0||(e.msfix=_[r].nsmsfix),0!=s?e.internal_flags.nsPsy.attackthre=_[r].st_lrm:Math.abs(e.internal_flags.nsPsy.attackthre- -1)>0||(e.internal_flags.nsPsy.attackthre=_[r].st_lrm),0!=s?e.internal_flags.nsPsy.attackthre_s=_[r].st_s:Math.abs(e.internal_flags.nsPsy.attackthre_s- -1)>0||(e.internal_flags.nsPsy.attackthre_s=_[r].st_s),0!=s?e.scale=_[r].scale:Math.abs(e.scale- -1)>0||(e.scale=_[r].scale),0!=s?e.maskingadjust=_[r].masking_adj:Math.abs(e.maskingadjust-0)>0||(e.maskingadjust=_[r].masking_adj),_[r].masking_adj>0?0!=s?e.maskingadjust_short=.9*_[r].masking_adj:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=.9*_[r].masking_adj):0!=s?e.maskingadjust_short=1.1*_[r].masking_adj:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=1.1*_[r].masking_adj),0!=s?e.ATHlower=-_[r].ath_lower/10:Math.abs(10*-e.ATHlower-0)>0||(e.ATHlower=-_[r].ath_lower/10),0!=s?e.ATHcurve=_[r].ath_curve:Math.abs(e.ATHcurve- -1)>0||(e.ATHcurve=_[r].ath_curve),0!=s?e.interChRatio=_[r].interch:Math.abs(e.interChRatio- -1)>0||(e.interChRatio=_[r].interch),a}this.apply_preset=function(e,a,t){switch(a){case Lame.R3MIX:a=Lame.V3,e.VBR=it.vbr_mtrh;break;case Lame.MEDIUM:a=Lame.V4,e.VBR=it.vbr_rh;break;case Lame.MEDIUM_FAST:a=Lame.V4,e.VBR=it.vbr_mtrh;break;case Lame.STANDARD:a=Lame.V2,e.VBR=it.vbr_rh;break;case Lame.STANDARD_FAST:a=Lame.V2,e.VBR=it.vbr_mtrh;break;case Lame.EXTREME:a=Lame.V0,e.VBR=it.vbr_rh;break;case Lame.EXTREME_FAST:a=Lame.V0,e.VBR=it.vbr_mtrh;break;case Lame.INSANE:return a=320,e.preset=a,i(e,a,t),e.VBR=it.vbr_off,a}switch(e.preset=a,a){case Lame.V9:return r(e,9,t),a;case Lame.V8:return r(e,8,t),a;case Lame.V7:return r(e,7,t),a;case Lame.V6:return r(e,6,t),a;case Lame.V5:return r(e,5,t),a;case Lame.V4:return r(e,4,t),a;case Lame.V3:return r(e,3,t),a;case Lame.V2:return r(e,2,t),a;case Lame.V1:return r(e,1,t),a;case Lame.V0:return r(e,0,t),a}return 8<=a&&a<=320?i(e,a,t):(e.preset=0,a)}};e(ot);var lt=function(){this.setModules=function(e,a){}};e(lt);var ft=function(){this.over_noise=0,this.tot_noise=0,this.max_noise=0,this.over_count=0,this.over_SSD=0,this.bits=0};e(ft);var ct=g,ht=ct.new_float,ut=ct.new_int;ct.assert;var bt=function(){this.global_gain=0,this.sfb_count1=0,this.step=ut(39),this.noise=ht(39),this.noise_log=ht(39)};e(bt);var mt=g,pt=mt.System,vt=mt.VbrMode;mt.Float,mt.ShortBlock;var dt=mt.Util,gt=mt.Arrays;mt.new_array_n,mt.new_byte,mt.new_double;var St=mt.new_float;mt.new_float_n,mt.new_int,mt.new_int_n;var Mt=mt.assert,wt=lt,At=ft,Rt=bt,Bt=M(),yt=J,Et=z;var Tt=function(){var e,a,t;this.rv=null,this.qupvt=null;var s,n=new wt;function r(e){this.ordinal=e}function _(e){for(var a=0;a0?(r=t.over_SSD<=a.over_SSD,t.over_SSD==a.over_SSD&&(r=t.bits.2||t.max_noise<=0&&a.max_noise<0&&a.max_noise>t.max_noise-.2&&t.tot_noise0&&a.max_noise>t.max_noise-.2&&t.tot_noise0&&a.max_noise>-.05&&a.max_noise>t.max_noise-.1&&t.tot_noise+t.over_noise0&&a.max_noise>-.1&&a.max_noise>t.max_noise-.15&&t.tot_noise+t.over_noise+t.over_noise1?i=Math.pow(i,.5):i*=.95;break;default:i>1?i=1:i*=.95}var f=0;for(o=0;oa.xrpow_max&&(a.xrpow_max=s[f+c]);if(2==_.noise_shaping_amp)return}}}(e,a,n,r,i);var l=_(a);return!l&&(!(l=2==o.mode_gr?s.scale_bitcount(a):s.scale_bitcount_lsf(o,a))||(o.noise_shaping>1&&(gt.fill(o.pseudohalf,0),0==a.scalefac_scale?(!function(e,a){for(var s=0,n=0;ne.xrpow_max&&(e.xrpow_max=a[s+i])}e.scalefac[n]=_>>1}e.preflag=0,e.scalefac_scale=1}(a,r),l=!1):a.block_type==Bt.SHORT_TYPE&&o.subblock_gain>0&&(l=function(e,a,s){var n,r=a.scalefac;for(n=0;n=16)return!0;for(var _=0;_<3;_++){var i=0,o=0;for(n=a.sfb_lmax+_;n=7)return!0;a.subblock_gain[_]++;var l=e.scalefac_band.l[a.sfb_lmax];for(n=a.sfb_lmax+_;n=0),(c-=4>>a.scalefac_scale)>=0)r[n]=c,l+=3*f;else{r[n]=0;var h=210+(c<a.xrpow_max&&(a.xrpow_max=s[l+u]);l+=f*(3-_-1)}}var b=t.IPOW20(202);for(l+=a.width[n]*(_+1),u=-a.width[n];u<0;u++)s[l+u]*=b,s[l+u]>a.xrpow_max&&(a.xrpow_max=s[l+u])}}return!1}(o,a,r)||_(a))),l||(l=2==o.mode_gr?s.scale_bitcount(a):s.scale_bitcount_lsf(o,a)),!l))}this.setModules=function(r,_,i,o){e=r,a=_,this.rv=_,t=i,this.qupvt=i,s=o,n.setModules(t,s)},this.ms_convert=function(e,a){for(var t=0;t<576;++t){var s=e.tt[a][0].xr[t],n=e.tt[a][1].xr[t];e.tt[a][0].xr[t]=(s+n)*(.5*dt.SQRT2),e.tt[a][1].xr[t]=(s-n)*(.5*dt.SQRT2)}},this.init_xrpow=function(e,a,t){var s=0,n=0|a.max_nonzero_coeff;if(Mt(null!=t),a.xrpow_max=0,Mt(0<=n&&n<=575),gt.fill(t,n,576,0),s=function(e,a,t,s){s=0;for(var n=0;n<=t;++n){var r=Math.abs(e.xr[n]);s+=r,a[n]=Math.sqrt(r*Math.sqrt(r)),a[n]>e.xrpow_max&&(e.xrpow_max=a[n])}return s}(a,t,n,s),s>1e-20){var r=0;2&e.substep_shaping&&(r=1);for(var _=0;_=0&&!r;_--){var i=e.scalefac_band.psfb21[_],o=e.scalefac_band.psfb21[_+1],l=t.athAdjust(s.adjust,s.psfb21[_],s.floor);e.nsPsy.longfact[21]>1e-12&&(l*=e.nsPsy.longfact[21]);for(var f=o-1;f>=i;f--){if(!(Math.abs(n[f])=0&&!r;_--){o=(i=3*e.scalefac_band.s[12]+(e.scalefac_band.s[13]-e.scalefac_band.s[12])*c+(e.scalefac_band.psfb12[_]-e.scalefac_band.psfb12[0]))+(e.scalefac_band.psfb12[_+1]-e.scalefac_band.psfb12[_]);var h=t.athAdjust(s.adjust,s.psfb12[_],s.floor);for(e.nsPsy.shortfact[12]>1e-12&&(h*=e.nsPsy.shortfact[12]),f=o-1;f>=i;f--){if(!(Math.abs(n[f])=1||(gt.sort(r,i-b,b),BitStream.EQ(r[i-1],0)))){f=(1-_[l])*n[l],c=0,u=0;do{var m;for(h=1;u+h0)}}while(++lt?(c==r.BINSEARCH_DOWN&&(l=!0),l&&(o/=2),c=r.BINSEARCH_UP,h=o):(c==r.BINSEARCH_UP&&(l=!0),l&&(o/=2),c=r.BINSEARCH_DOWN,h=-o),a.global_gain+=h,a.global_gain<0&&(a.global_gain=0,l=!0),a.global_gain>255&&(a.global_gain=255,l=!0)}for(Mt(a.global_gain>=0),Mt(a.global_gain<256);i>t&&a.global_gain<255;)a.global_gain++,i=s.count_bits(e,_,a,null);e.CurrentStep[n]=f-a.global_gain>=4?4:2,e.OldValue[n]=a.global_gain,a.part2_3_length=i}(c,a,f,l,_),0==c.noise_shaping)return 100;t.calc_noise(a,n,b,m,p),m.bits=a.part2_3_length,h.assign(a);var M=0;for(pt.arraycopy(_,0,u,0,576);!d;){do{var w,A=new At,R=255;if(w=2&c.substep_shaping?20:3,c.sfb21_extra){if(b[h.sfbmax]>1)break;if(h.block_type==Bt.SHORT_TYPE&&(b[h.sfbmax+1]>1||b[h.sfbmax+2]>1))break}if(!o(e,h,b,_,g))break;0!=h.scalefac_scale&&(R=254);var B=f-h.part2_length;if(B<=0)break;for(;(h.part2_3_length=s.count_bits(c,_,h,p))>B&&h.global_gain<=R;)h.global_gain++;if(h.global_gain>R)break;if(0==m.over_count){for(;(h.part2_3_length=s.count_bits(c,_,h,p))>v&&h.global_gain<=R;)h.global_gain++;if(h.global_gain>R)break}if(t.calc_noise(h,n,b,A,p),A.bits=h.part2_3_length,0!=(i(a.block_type!=Bt.SHORT_TYPE?e.quant_comp:e.quant_comp_short,m,A,h,b)?1:0))v=a.part2_3_length,m=A,a.assign(h),M=0,pt.arraycopy(_,0,u,0,576);else if(0==c.full_outer_loop){if(++M>w&&0==m.over_count)break;if(3==c.noise_shaping_amp&&g&&M>30)break;if(3==c.noise_shaping_amp&&g&&h.global_gain-S>15)break}}while(h.global_gain+h.scalefac_scale<255);3==c.noise_shaping_amp?g?d=!0:(h.assign(a),pt.arraycopy(u,0,_,0,576),M=0,S=h.global_gain,g=!0):d=!0}return Mt(a.global_gain+a.scalefac_scale<=255),e.VBR==vt.vbr_rh||e.VBR==vt.vbr_mtrh?pt.arraycopy(u,0,_,0,576):1&c.substep_shaping&&trancate_smallspectrums(c,a,n,_),m.over_count},this.iteration_finish_one=function(e,t,n){var r=e.l3_side,_=r.tt[t][n];s.best_scalefac_store(e,t,n,r),1==e.use_best_huffman&&s.best_huffman_divide(e,_),a.ResvAdjust(e,_)},this.VBR_encode_granule=function(e,a,t,s,n,r,_){var i,o=e.internal_flags,l=new yt,f=St(576),c=_,h=_+1,u=(_+r)/2,b=0,m=o.sfb21_extra;Mt(c<=LameInternalFlags.MAX_BITS_PER_CHANNEL),gt.fill(l.l3_enc,0);do{Mt(u>=r),Mt(u<=_),Mt(r<=_),o.sfb21_extra=!(u>c-42)&&m,outer_loop(e,a,t,s,n,u)<=0?(b=1,h=a.part2_3_length,l.assign(a),pt.arraycopy(s,0,f,0,576),i=(_=h-32)-r,u=(_+r)/2):(i=_-(r=u+32),u=(_+r)/2,0!=b&&(b=2,a.assign(l),pt.arraycopy(f,0,s,0,576)))}while(i>12);o.sfb21_extra=m,2==b&&pt.arraycopy(l.l3_enc,0,a.l3_enc,0,576),Mt(a.part2_3_length<=c)},this.get_framebits=function(t,s){var n=t.internal_flags;n.bitrate_index=n.VBR_min_bitrate;var r=e.getframebits(t);n.bitrate_index=1,r=e.getframebits(t);for(var _=1;_<=n.VBR_max_bitrate;_++){n.bitrate_index=_;var i=new MeanBits(r);s[_]=a.ResvFrameBegin(t,i),r=i.bits}},this.VBR_old_prepare=function(e,s,n,r,_,i,o,l,f){var c,h=e.internal_flags,u=0,b=1,m=0;h.bitrate_index=h.VBR_max_bitrate;var p=a.ResvFrameBegin(e,new MeanBits(0))/h.mode_gr;get_framebits(e,i);for(var v=0;vi[h.VBR_max_bitrate]&&(l[v][g]*=i[h.VBR_max_bitrate],l[v][g]/=m),o[v][g]>l[v][g]&&(o[v][g]=l[v][g]);return b},this.bitpressure_strategy=function(e,a,t,s){for(var n=0;no&&(i[b][m]*=o,i[b][m]/=h);return f},this.calc_target_bits=function(s,n,r,_,i,o){var l,f,c,h,u=s.internal_flags,b=u.l3_side,m=0;u.bitrate_index=u.VBR_max_bitrate;var p=new MeanBits(m);for(o[0]=a.ResvFrameBegin(s,p),m=p.bits,u.bitrate_index=1,m=e.getframebits(s)-8*u.sideinfo_len,i[0]=m/(u.mode_gr*u.channels_out),m=s.VBR_mean_bitrate_kbps*s.framesize*1e3,1&u.substep_shaping&&(m*=1.09),m/=s.out_samplerate,m-=8*u.sideinfo_len,m/=u.mode_gr*u.channels_out,(l=.93+.07*(11-s.compression_ratio)/5.5)<.9&&(l=.9),l>1&&(l=1),f=0;f700){var d=int((n[f][c]-700)/1.4),g=b.tt[f][c];_[f][c]=int(l*m),g.block_type==Bt.SHORT_TYPE&&d3*m/2?d=3*m/2:d<0&&(d=0),_[f][c]+=d}_[f][c]>LameInternalFlags.MAX_BITS_PER_CHANNEL&&(_[f][c]=LameInternalFlags.MAX_BITS_PER_CHANNEL),v+=_[f][c]}if(v>LameInternalFlags.MAX_BITS_PER_GRANULE)for(c=0;cLameInternalFlags.MAX_BITS_PER_CHANNEL&&(_[f][c]=LameInternalFlags.MAX_BITS_PER_CHANNEL),h+=_[f][c];if(h>o[0])for(f=0;f320?s=8*int(1e3*a.brate/(a.out_samplerate/1152)/8+.5):(s=11520,a.strict_ISO&&(s=8*int(32e4/(a.out_samplerate/1152)/8+.5))),n.ResvMax=s-_,n.ResvMax>i&&(n.ResvMax=i),(n.ResvMax<0||a.disable_reservoir)&&(n.ResvMax=0);var o=t.bits*n.mode_gr+Math.min(n.ResvSize,n.ResvMax);return o>s&&(o=s),kt(0==n.ResvMax%8),kt(n.ResvMax>=0),r.resvDrain_pre=0,null!=n.pinfo&&(n.pinfo.mean_bits=t.bits/2,n.pinfo.resvsize=n.ResvSize),o},this.ResvMaxBits=function(e,a,t,s){var n,r=e.internal_flags,_=r.ResvSize,i=r.ResvMax;0!=s&&(_+=a),1&r.substep_shaping&&(i*=.9),t.bits=a,10*_>9*i?(n=_-9*i/10,t.bits+=n,r.substep_shaping|=128):(n=0,r.substep_shaping&=127,e.disable_reservoir||1&r.substep_shaping||(t.bits-=.1*a));var o=_<6*r.ResvMax/10?_:6*r.ResvMax/10;return(o-=n)<0&&(o=0),o},this.ResvAdjust=function(e,a){e.ResvSize-=a.part2_3_length+a.part2_length},this.ResvFrameEnd=function(e,a){var t,s=e.l3_side;e.ResvSize+=a*e.mode_gr;var n=0;s.resvDrain_post=0,s.resvDrain_pre=0,0!=(t=e.ResvSize%8)&&(n+=t),(t=e.ResvSize-n-e.ResvMax)>0&&(kt(0==t%8),kt(t>=0),n+=t);var r=Math.min(8*s.main_data_begin,n)/8;s.resvDrain_pre+=8*r,n-=8*r,e.ResvSize-=8*r,s.main_data_begin-=r,s.resvDrain_post+=n,e.ResvSize-=n}};e(xt);var Pt=function(){this.getLameVersion=function(){return"3.98.4"},this.getLameShortVersion=function(){return"3.98.4"},this.getLameVeryShortVersion=function(){return"LAME3.98r"},this.getPsyVersion=function(){return"0.93"},this.getLameUrl=function(){return"http://www.mp3dev.org/"},this.getLameOsBitness=function(){return"32bits"}};e(Pt);var It=g,Lt=It.System,Vt=It.VbrMode;It.Float;var Ht=It.ShortBlock;It.Util;var Nt=It.Arrays;It.new_array_n;var Ot=It.new_byte;It.new_double,It.new_float,It.new_float_n,It.new_int,It.new_int_n;var Xt=It.assert;function Dt(){var e,a,t;this.setModules=function(s,n,r){e=s,a=n,t=r};var s=Dt.NUMTOCENTRIES,n=Dt.MAXFRAMESIZE,r=s+4+4+4+4+4+9+1+1+8+1+1+3+1+1+2+4+2+2,_="Xing",i="Info",o=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8e3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16e3,65089,64001,15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32e3,48577,48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];function l(e,a){var t=255&e[a+0];return t<<=8,t|=255&e[a+1],t<<=8,t|=255&e[a+2],t<<=8,t|=255&e[a+3]}function f(e,a,t){e[a+0]=255&t>>24,e[a+1]=255&t>>16,e[a+2]=255&t>>8,e[a+3]=255&t}function c(e,a,t){e[a+0]=255&t>>8,e[a+1]=255&t}function h(e,a,t){return 255&(e<>8^o[255&(a^e)]}this.addVbrFrame=function(e){var a=e.internal_flags,t=Tables.bitrate_table[e.version][a.bitrate_index];Xt(null!=a.VBR_seek_table.bag),function(e,a){if(e.nVbrNumFrames++,e.sum+=a,e.seen++,!(e.seen>3&1,r=e[t+2]>>2&3,o=e[t+3]>>6&3,f=e[t+2]>>4&15;if(f=Tables.bitrate_table[n][f],e[t+1]>>4==14?a.samprate=Tables.samplerate_table[2][r]:a.samprate=Tables.samplerate_table[n][r],!function(e,a){return new String(e,a,4(),null).equals(_)||new String(e,a,4(),null).equals(i)}(e,t+=0!=n?3!=o?36:21:3!=o?21:13))return null;t+=4,a.hId=n;var c=a.flags=l(e,t);if(t+=4,1&c&&(a.frames=l(e,t),t+=4),2&c&&(a.bytes=l(e,t),t+=4),4&c){if(null!=a.toc)for(var h=0;h>4;var b=(15&e[t+1])<<8;return(u<0||u>3e3)&&(u=-1),((b+=255&e[t+2])<0||b>3e3)&&(b=-1),a.encDelay=u,a.encPadding=b,a},this.InitVbrTag=function(e){var t,s=e.internal_flags;t=1==e.version?128:e.out_samplerate<16e3?32:64,e.VBR==Vt.vbr_off&&(t=e.brate);var _=72e3*(e.version+1)*t/e.out_samplerate,i=s.sideinfo_len+r;if(s.VBR_seek_table.TotalFrameSize=_,_n)e.bWriteVbrTag=!1;else{s.VBR_seek_table.nVbrNumFrames=0,s.VBR_seek_table.nBytesWritten=0,s.VBR_seek_table.sum=0,s.VBR_seek_table.seen=0,s.VBR_seek_table.want=1,s.VBR_seek_table.pos=0,null==s.VBR_seek_table.bag&&(s.VBR_seek_table.bag=new int[400],s.VBR_seek_table.size=400);var o=Ot(n);u(e,o);for(var l=s.VBR_seek_table.TotalFrameSize,f=0;fe.pos-1&&(r=e.pos-1);var _=0|256*e.bag[r]/e.sum;_>255&&(_=255),a[t]=255&_}}(r.VBR_seek_table,o);var h=r.sideinfo_len;e.error_protection&&(h-=2),e.VBR==Vt.vbr_off?(n[h++]=255&i.charAt(0),n[h++]=255&i.charAt(1),n[h++]=255&i.charAt(2),n[h++]=255&i.charAt(3)):(n[h++]=255&_.charAt(0),n[h++]=255&_.charAt(1),n[h++]=255&_.charAt(2),n[h++]=255&_.charAt(3)),f(n,h,15),f(n,h+=4,r.VBR_seek_table.nVbrNumFrames),h+=4;var m=r.VBR_seek_table.nBytesWritten+r.VBR_seek_table.TotalFrameSize;f(n,h,0|m),h+=4,Lt.arraycopy(o,0,n,h,o.length),h+=o.length,e.error_protection&&a.CRC_writeheader(r,n);var p=0;for(l=0;l255?255:e.lowpassfreq/100+.5),w=0,A=0,R=e.internal_flags.noise_shaping,B=0,y=0,E=0,T=!!(1&e.exp_nspsytune),k=!!(2&e.exp_nspsytune),x=!1,P=!1,I=e.internal_flags.nogap_total,L=e.internal_flags.nogap_current,V=e.ATHtype;switch(e.VBR){case vbr_abr:h=e.VBR_mean_bitrate_kbps;break;case vbr_off:h=e.brate;break;default:h=e.VBR_min_bitrate_kbps}switch(_=0+(e.VBR.ordinal()510&&(u.RadioGain=510),u.RadioGain<-510&&(u.RadioGain=-510),A=8192,A|=3072,u.RadioGain>=0?A|=u.RadioGain:(A|=512,A|=-u.RadioGain)),u.findPeakSample&&(w=Math.abs(0|u.PeakSample/32767*Math.pow(2,23)+.5)),-1!=I&&(L>0&&(P=!0),L48e3?3:1,(e.short_blocks==Ht.short_block_forced||e.short_blocks==Ht.short_block_dispensed||-1==e.lowpassfreq&&-1==e.highpassfreq||e.scale_lefte.scale_right||e.disable_reservoir&&e.brate<320||e.noATH||e.ATHonly||0==V||e.in_samplerate<=32e3)&&(y=1),i=R+(B<<2)+(y<<5)+(E<<6),o=u.nMusicCRC,f(s,n+m,d),m+=4;for(var H=0;H<9;H++)s[n+m+H]=255&g.charAt(H);s[n+(m+=9)]=255&_,s[n+ ++m]=255&M,f(s,n+ ++m,w),c(s,n+(m+=4),A),c(s,n+(m+=2),0),s[n+(m+=2)]=255&l,s[n+ ++m]=h>=255?255:255&h,s[n+ ++m]=255&p>>4,s[n+m+1]=255&(p<<4)+(v>>8),s[n+m+2]=255&v,s[n+(m+=3)]=255&i,m++,s[n+m++]=0,c(s,n+m,e.preset),f(s,n+(m+=2),a),c(s,n+(m+=4),o),m+=2;for(var N=0;Ns.length?-1:(r<1||a.write(s,0,r),0)}}Dt.NUMTOCENTRIES=100,Dt.MAXFRAMESIZE=2880;var Ft=Dt;e(Ft);var Yt=g;Yt.System,Yt.VbrMode,Yt.Float,Yt.ShortBlock,Yt.Util,Yt.Arrays,Yt.new_array_n;var qt=Yt.new_byte;Yt.new_double,Yt.new_float,Yt.new_float_n,Yt.new_int,Yt.new_int_n;var Ct=Yt.assert,Gt=nt,jt=ot,Ut=De,zt=pa,Kt=Tt,Zt=ya,Qt=xt,Wt=Y,Jt=Da;M();var $t=Pt,es=Ft;function as(){this.setModules=function(e,a){}}function ts(){this.setModules=function(e,a,t){}}function ss(){}function ns(){this.setModules=function(e,a){}}function rs(){this.dataOffset=0,this.dataLen=0,this.channels=0,this.sampleRate=0}function _s(e){return e.charCodeAt(0)<<24|e.charCodeAt(1)<<16|e.charCodeAt(2)<<8|e.charCodeAt(3)}rs.RIFF=_s("RIFF"),rs.WAVE=_s("WAVE"),rs.fmt_=_s("fmt "),rs.data=_s("data"),rs.readHeader=function(e){var a=new rs,t=e.getUint32(0,!1);if(rs.RIFF==t&&(e.getUint32(4,!0),rs.WAVE==e.getUint32(8,!1)&&rs.fmt_==e.getUint32(12,!1))){var s=e.getUint32(16,!0),n=20;switch(s){case 16:case 18:a.channels=e.getUint16(n+2,!0),a.sampleRate=e.getUint32(n+4,!0);break;default:throw"extended fmt chunk not implemented"}n+=s;for(var r=rs.data,_=0;r!=t&&(t=e.getUint32(n,!1),_=e.getUint32(n+4,!0),r!=t);)n+=_+8;return a.dataLen=_,a.dataOffset=n+8,a}},a.Mp3Encoder=function(e,a,t){3!=arguments.length&&(console.error("WARN: Mp3Encoder(channels, samplerate, kbps) not specified"),e=1,a=44100,t=128);var s=new Gt,n=new as,r=new Ut,_=new Jt,i=new jt,o=new zt,l=new Kt,f=new es,c=new $t,h=new ns,u=new Qt,b=new Zt,m=new ts,p=new ss;s.setModules(r,_,i,o,l,f,c,h,p),_.setModules(r,p,c,f),h.setModules(_,c),i.setModules(s),l.setModules(_,u,o,b),o.setModules(b,u,s.enc.psy),u.setModules(_),b.setModules(o),f.setModules(s,_,c),n.setModules(m,p),m.setModules(c,h,i);var v=s.lame_init();v.num_channels=e,v.in_samplerate=a,v.brate=t,v.mode=Wt.STEREO,v.quality=3,v.bWriteVbrTag=!1,v.disable_reservoir=!0,v.write_id3tag_automatic=!1;var d=s.lame_init_params(v);Ct(0==d);var g=1152,S=0|1.25*g+7200,M=qt(S);this.encodeBuffer=function(a,t){1==e&&(t=a),Ct(a.length==t.length),a.length>g&&(g=a.length,M=qt(S=0|1.25*g+7200));var n=s.lame_encode_buffer(v,a,t,a.length,M,0,S);return new Int8Array(M.subarray(0,n))},this.flush=function(){var e=s.lame_encode_flush(v,M,0,S);return new Int8Array(M.subarray(0,e))}},a.WavHeader=rs,"undefined"!=typeof self&&(self.MPEGMode=q,self.Lame=rt,self.BitStream=Fa);let is,os,ls,fs=0,cs=[];self.onmessage=function(e){switch(e.data.command){case"init":hs(e.data.config);break;case"record":us(e.data.buffer);break;case"exportWAV":bs(e.data.type);break;case"exportMP3":ms(e.data.type);break;case"getBuffer":ps();break;case"clear":vs()}};const hs=e=>{is=e.sampleRate,os=e.numChannels,ls=e.bitrate||128,ds()},us=e=>{for(let a=0;a{const a=[];for(let e=0;e{const a=[];for(let e=0;e{const e=[];for(let a=0;a{fs=0,cs=[],ds()},ds=()=>{for(let e=0;e{const t=new Float32Array(a);let s=0;for(let a=0;a{const t=e.length+a.length,s=new Float32Array(t);let n=0,r=0;for(;n{for(let s=0;s{const a=new ArrayBuffer(44+2*e.length),t=new DataView(a);return Ms(t,0,"RIFF"),t.setUint32(4,36+2*e.length,!0),Ms(t,8,"WAVE"),Ms(t,12,"fmt "),t.setUint32(16,16,!0),t.setUint16(20,1,!0),t.setUint16(22,os,!0),t.setUint32(24,is,!0),t.setUint32(28,4*is,!0),t.setUint16(32,2*os,!0),t.setUint16(34,16,!0),Ms(t,36,"data"),t.setUint32(40,2*e.length,!0),((e,a,t)=>{for(let s=0;s{const t=new a.Mp3Encoder(Math.max(2,os),is,ls),s=[],n=Rs(e[0]),r=Rs(e[1]),_=1152;for(let e=0;e0&&s.push(o)}const i=t.flush();return i.length>0&&s.push(i),s},Rs=e=>{const a=new Int16Array(e.length);for(let t=0,s=e.length;t1&&(s=1),s<-1&&(s=-1),a[t]=Math.floor(32767*s)}return a}; +function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a={};function t(e){return new Int16Array(e)}function s(e){return new Int32Array(e)}function n(e){return new Float32Array(e)}var r={fill:function(e,a,t,s){if(2==arguments.length)for(var n=0;n=0;--U){var ee,ae;ee=q[C+U]*l[20+U]+q[C+-1-U]*f[28+U],ae=q[C+U]*f[28+U]-q[C+-1-U]*l[20+U],q[C+-1-U]=ee,q[C+U]=ae}}}if(N=b,O=286,1==e.mode_gr)for(var te=0;te<18;te++)a.arraycopy(e.sb_sample[X][1][te],0,e.sb_sample[X][0][te],0,32)}}}}(),l=function(){if(S)return g;S=1;var e=A;return g=function(){this.thm=new e,this.en=new e}}(),f=o.FFTOFFSET,b=o.MPG_MD_MS_LR,m=null;this.psy=null;var p=null,v=null,d=null;this.setModules=function(e,a,t,s){m=e,this.psy=a,p=a,v=s,d=t};var M=new e;this.lame_encode_mp3_frame=function(e,c,h,u,g,S){var w,A=s([2,2]);A[0][0]=new l,A[0][1]=new l,A[1][0]=new l,A[1][1]=new l;var R,B=s([2,2]);B[0][0]=new l,B[0][1]=new l,B[1][0]=new l,B[1][1]=new l;var y,E,T,k=[null,null],x=e.internal_flags,P=r([2,4]),I=[.5,.5],L=[[0,0],[0,0]],V=[[0,0],[0,0]];if(k[0]=c,k[1]=h,0==x.lame_encode_frame_init&&function(e,a){var t,s,r=e.internal_flags;if(0==r.lame_encode_frame_init){var _,l,f=n(2014),c=n(2014);for(r.lame_encode_frame_init=1,_=0,l=0;_<286+576*(1+r.mode_gr);++_)_<576*r.mode_gr?(f[_]=0,2==r.channels_out&&(c[_]=0)):(f[_]=a[0][l],2==r.channels_out&&(c[_]=a[1][l]),++l);for(s=0;s=o.FFTOFFSET),i(r.mf_size>=o.BLKSIZE+e.framesize-o.FFTOFFSET),i(r.mf_size>=512+e.framesize-32)}}(e,k),x.padding=0,(x.slot_lag-=x.frac_SpF)<0&&(x.slot_lag+=e.out_samplerate,x.padding=1),0!=x.psymodel){var H=[null,null],N=0,O=_(2);for(T=0;T0&&(I[T]=P[T][3]/I[T])),E=0;E.03125)e.ATH.adjust>=1?e.ATH.adjust=1:e.ATH.adjust=s?(e.ATH.adjust*=.075*s+.925,e.ATH.adjust=s?e.ATH.adjust=s:e.ATH.adjust>1,b=(u=n<<1)+(h=n),n=u<<1,_=(r=a)+m;do{w=e[r+0]-e[r+h],M=e[r+0]+e[r+h],E=e[r+u]-e[r+b],R=e[r+u]+e[r+b],e[r+u]=M-R,e[r+0]=M+R,e[r+b]=w-E,e[r+h]=w+E,w=e[_+0]-e[_+h],M=e[_+0]+e[_+h],E=y.SQRT2*e[_+b],R=y.SQRT2*e[_+u],e[_+u]=M-R,e[_+0]=M+R,e[_+b]=w-E,e[_+h]=w+E,_+=n,r+=n}while(r=0);s(t[o],l,T.BLKSIZE_s/2)}},this.fft_long=function(a,t,r,_,i){var o=T.BLKSIZE/8-1,l=T.BLKSIZE/2;do{var f,c,h,u,b,m=255&n[o];c=(f=e[m]*_[r][i+m])-(b=e[m+512]*_[r][i+m+512]),f+=b,u=(h=e[m+256]*_[r][i+m+256])-(b=e[m+768]*_[r][i+m+768]),h+=b,t[(l-=4)+0]=f+h,t[l+2]=f-h,t[l+1]=c+u,t[l+3]=c-u,c=(f=e[m+1]*_[r][i+m+1])-(b=e[m+513]*_[r][i+m+513]),f+=b,u=(h=e[m+257]*_[r][i+m+257])-(b=e[m+769]*_[r][i+m+769]),h+=b,t[l+T.BLKSIZE/2+0]=f+h,t[l+T.BLKSIZE/2+2]=f-h,t[l+T.BLKSIZE/2+1]=c+u,t[l+T.BLKSIZE/2+3]=c-u}while(--o>=0);s(t,l,T.BLKSIZE/2)},this.init_fft=function(t){for(var s=0;s=0;--b){var m=n[r+0][b],p=n[r+1][b];n[r+0][b]=(m+p)*V.SQRT2*.5,n[r+1][b]=(m-p)*V.SQRT2*.5}for(var v=2;v>=0;--v)for(b=Y.BLKSIZE_s-1;b>=0;--b){m=i[o+0][v][b],p=i[o+1][v][b];i[o+0][v][b]=(m+p)*V.SQRT2*.5,i[o+1][v][b]=(m-p)*V.SQRT2*.5}}t[0]=n[r+0][0],t[0]*=t[0];for(b=Y.BLKSIZE/2-1;b>=0;--b){var d=n[r+0][Y.BLKSIZE/2-b],g=n[r+0][Y.BLKSIZE/2+b];t[Y.BLKSIZE/2-b]=.5*(d*d+g*g)}for(v=2;v>=0;--v){s[v][0]=i[o+0][v][0],s[v][0]*=s[v][0];for(b=Y.BLKSIZE_s/2-1;b>=0;--b){d=i[o+0][v][Y.BLKSIZE_s/2-b],g=i[o+0][v][Y.BLKSIZE_s/2+b];s[v][Y.BLKSIZE_s/2-b]=.5*(d*d+g*g)}}var S=0;for(b=11;be){if(!(a=a*l)return e+a;_=e/a}if(D(e>=0),D(a>=0),e+=a,s+3<=6){if(_>=o)return e;var i=0|V.FAST_LOG10_X(_,16);return e*u[i]}var c,m;i=0|V.FAST_LOG10_X(_,16);return a=n.ATH.cb_l[t]*n.ATH.adjust,D(a>=0),ea?(c=1,i<=13&&(c=b[i]),m=V.FAST_LOG10_X(e/a,10/15),e*((h[i]-c)*m+c)):i>13?e:e*b[i]:e*h[i]}var p=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1];function v(e,a,t){var s;if(e<0&&(e=0),a<0&&(a=0),e<=0)return a;if(a<=0)return e;if(s=a>e?a/e:e/a,-2<=t&&t<=2){if(s>=o)return e+a;var n=0|V.FAST_LOG10_X(s,16);return(e+a)*p[n]}return s=0),D(t[_]>=0),i+=a[_],o+=t[_],_++;if(e.en[s].s[r][n]=i,e.thm[s].s[r][n]=o,_>=f){++r;break}D(a[_]>=0),D(t[_]>=0);var h=e.PSY.bo_s_weight[r],u=1-h;i=h*a[_],o=h*t[_],e.en[s].s[r][n]+=i,e.thm[s].s[r][n]+=o,i=u*a[_],o=u*t[_]}for(;r=0),D(t[r]>=0),_+=a[r],i+=t[r],r++;if(e.en[s].l[n]=_,e.thm[s].l[n]=i,r>=l){++n;break}D(a[r]>=0),D(t[r]>=0);var c=e.PSY.bo_l_weight[n],h=1-c;_=c*a[r],i=c*t[r],e.en[s].l[n]+=_,e.thm[s].l[n]+=i,_=h*a[r],i=h*t[r]}for(;n=0)}for(;i<=Y.CBANDS;++i)t[i]=0,s[i]=0}function M(e,a,t){return t>=1?e:t<=0?a:a>0?Math.pow(e/a,t)*a:0}var w=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130];function A(e,t){for(var s=309.07,n=0;n0){var i=_*t,o=e.en.s[n][r];o>i&&(o>1e10*i?s+=w[n]*(10*a):(D(i>0),s+=w[n]*V.FAST_LOG10(o/i)))}}return s}var R=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1];function B(e,t){for(var s=281.0575,n=0;n0){var _=r*t,i=e.en.l[n];i>_&&(i>1e10*_?s+=R[n]*(10*a):(D(_>0),s+=R[n]*V.FAST_LOG10(i/_)))}}return s}function y(e,a,t,s,n){var r,_;for(r=_=0;r=0),o+=f,l=0),D(o>=0),D(t[r]>=0),D(s[r]>=0),D(n[r]>=0)}}function E(e,a,t,s){var n=c.length-1,r=0,_=t[r]+t[r+1];(D(_>=0),_>0)?((i=a[r])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_l[r]+e.numlines_l[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0;for(r=1;r=0),_>0)(i=a[r-1])0),(o=0|(_=20*(3*i-_)/(_*(e.numlines_l[r-1]+e.numlines_l[r]+e.numlines_l[r+1]-1))))>n&&(o=n),s[r]=o;else s[r]=0}(D(r>0),D(r==e.npart_l-1),_=t[r-1]+t[r],D(_>=0),_>0)?((i=a[r-1])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_l[r-1]+e.numlines_l[r]-1))))>n&&(o=n),s[r]=o):s[r]=0;D(r==e.npart_l-1)}var T=[-1730326e-23,-.01703172,-1349528e-23,.0418072,-673278e-22,-.0876324,-30835e-21,.1863476,-1104424e-22,-.627638];function k(a,t,s,n,r,_,i,o){var l=a.internal_flags;if(n<2)e.fft_long(l,i[o],n,t,s);else if(2==n)for(var f=Y.BLKSIZE-1;f>=0;--f){var c=i[o+0][f],h=i[o+1][f];i[o+0][f]=(c+h)*V.SQRT2*.5,i[o+1][f]=(c-h)*V.SQRT2*.5}_[0]=i[o+0][0],_[0]*=_[0];for(f=Y.BLKSIZE/2-1;f>=0;--f){var u=i[o+0][Y.BLKSIZE/2-f],b=i[o+0][Y.BLKSIZE/2+f];_[Y.BLKSIZE/2-f]=.5*(u*u+b*b)}var m=0;for(f=11;f=0;--f){var c=i[o+0][r][f],h=i[o+1][r][f];i[o+0][r][f]=(c+h)*V.SQRT2*.5,i[o+1][r][f]=(c-h)*V.SQRT2*.5}_[r][0]=i[o+0][r][0],_[r][0]*=_[r][0];for(f=Y.BLKSIZE_s/2-1;f>=0;--f){var u=i[o+0][r][Y.BLKSIZE_s/2-f],b=i[o+0][r][Y.BLKSIZE_s/2+f];_[r][Y.BLKSIZE_s/2-f]=.5*(u*u+b*b)}}function q(e,a,t,s){var n=e.internal_flags;2==e.athaa_loudapprox&&t<2&&(n.loudness_sq[a][t]=n.loudness_sq_save[t],n.loudness_sq_save[t]=_(s,n))}this.L3psycho_anal_ns=function(e,a,t,r,_,o,l,f,h,u){var b,p,v,w,R,k,x,I,V,F,q=e.internal_flags,C=O([2,Y.BLKSIZE]),G=O([2,3,Y.BLKSIZE_s]),j=N(Y.CBANDS+1),U=N(Y.CBANDS+1),z=N(Y.CBANDS+2),K=X(2),Z=X(2),Q=O([2,576]),W=X(Y.CBANDS+2),J=X(Y.CBANDS+2);for(H.fill(J,0),b=q.channels_out,e.mode==MPEGMode.JOINT_STEREO&&(b=4),V=e.VBR==P.vbr_off?0==q.ResvMax?0:q.ResvSize/q.ResvMax*.5:e.VBR==P.vbr_rh||e.VBR==P.vbr_mtrh||e.VBR==P.vbr_mt?.6:1,p=0;p2&&(o[r][p].en.assign(q.en[p+2]),o[r][p].thm.assign(q.thm[p+2]))}for(p=0;p0),_e[w]=ne[w]/q.nsPsy.last_en_subshort[p][w+4],re[0]+=ne[w];if(2==p)for(w=0;w<576;w++){var ue,be;ue=Q[0][w],be=Q[1][w],Q[0][w]=ue+be,Q[1][w]=ue-be}var me=Q[1&p],pe=0;for(w=0;w<9;w++){for(var ve=pe+64,de=1;pene[w+3-2]?(D(ne[w+3-2]>0),de/=ne[w+3-2]):ne[w+3-2]>10*de?(D(de>0),de=ne[w+3-2]/(10*de)):de=0,_e[w+3]=de}if(e.analysis){var ge=_e[0];for(w=1;w<12;w++)ge<_e[w]&&(ge=_e[w]);q.pinfo.ers[r][p]=q.pinfo.ers_save[p],q.pinfo.ers_save[p]=ge}for(se=3==p?q.nsPsy.attackthre_s:q.nsPsy.attackthre,w=0;w<12;w++)0==fe[w/3]&&_e[w]>se&&(fe[w/3]=w%3+1);for(w=1;w<4;w++){var Se;re[w-1]>re[w]?(D(re[w]>0),Se=re[w-1]/re[w]):(D(re[w-1]>0),Se=re[w]/re[w-1]),Se<1.7&&(fe[w]=0,1==w&&(fe[0]=0))}for(0!=fe[0]&&0!=q.nsPsy.lastAttacks[p]&&(fe[0]=0),3!=q.nsPsy.lastAttacks[p]&&fe[0]+fe[1]+fe[2]+fe[3]==0||(ie=0,0!=fe[1]&&0!=fe[0]&&(fe[1]=0),0!=fe[2]&&0!=fe[1]&&(fe[2]=0),0!=fe[3]&&0!=fe[2]&&(fe[3]=0)),p<2?Z[p]=ie:0==ie&&(Z[0]=Z[1]=0),h[p]=q.tot_ener[p],i(e,ce,he,C,1&p,G,1&p,r,p,a,t),y(q,ce,j,oe,le),E(q,oe,le,W),I=0;I<3;I++){var Me,we;for(S(e,he,U,z,p,I),d(q,U,z,p,I),x=0;x=2||1==fe[I+1]){var Ae=0!=I?I-1:2;de=M(q.thm[p].s[x][Ae],we,.6*V);we=Math.min(we,de)}if(1==fe[I]){Ae=0!=I?I-1:2,de=M(q.thm[p].s[x][Ae],we,s*V);we=Math.min(we,de)}else if(0!=I&&3==fe[I-1]||0==I&&3==q.nsPsy.lastAttacks[p]){Ae=2!=I?I+1:0,de=M(q.thm[p].s[x][Ae],we,s*V);we=Math.min(we,de)}Me=ne[3*I+3]+ne[3*I+4]+ne[3*I+5],6*ne[3*I+5]0&&function(e,a){var t=e.internal_flags;if(t.channels_out>1){for(var s=0;s1.58*e.thm[1].l[a]||e.thm[1].l[a]>1.58*e.thm[0].l[a])){var t=e.mld_l[a]*e.en[3].l[a],s=Math.max(e.thm[2].l[a],Math.min(e.thm[3].l[a],t));t=e.mld_l[a]*e.en[2].l[a];var n=Math.max(e.thm[3].l[a],Math.min(e.thm[2].l[a],t));e.thm[2].l[a]=s,e.thm[3].l[a]=n}for(a=0;a1.58*e.thm[1].s[a][r]||e.thm[1].s[a][r]>1.58*e.thm[0].s[a][r]||(t=e.mld_s[a]*e.en[3].s[a][r],s=Math.max(e.thm[2].s[a][r],Math.min(e.thm[3].s[a][r],t)),t=e.mld_s[a]*e.en[2].s[a][r],n=Math.max(e.thm[3].s[a][r],Math.min(e.thm[2].s[a][r],t)),e.thm[2].s[a][r]=s,e.thm[3].s[a][r]=n)}(q),F=e.msfix,Math.abs(F)>0&&function(e,a,t){var s=a,n=Math.pow(10,t);a*=2,s*=2;for(var r=0;r0),e.thm[2].l[r]=Math.min(o,e.thm[2].l[r]),e.thm[3].l[r]=Math.min(l,e.thm[3].l[r]);for(n*=Y.BLKSIZE_s/Y.BLKSIZE,r=0;r0),e.thm[2].s[r][_]=Math.min(e.thm[2].s[r][_],o),e.thm[3].s[r][_]=Math.min(e.thm[3].s[r][_],l)}}(q,F,e.ATHlower*q.ATH.adjust));for(function(e,a,t,s){var n=e.internal_flags;e.short_blocks!=L.short_block_coupled||0!=a[0]&&0!=a[1]||(a[0]=a[1]=0);for(var r=0;r1?(Ee=f,xe=-2,Te=Y.NORM_TYPE,u[0]!=Y.SHORT_TYPE&&u[1]!=Y.SHORT_TYPE||(Te=Y.SHORT_TYPE),ke=o[r][p-2]):(Ee=l,xe=0,Te=u[p],ke=_[r][p]),Te==Y.SHORT_TYPE?Ee[xe+p]=A(ke,q.masking_lower):Ee[xe+p]=B(ke,q.masking_lower),e.analysis&&(q.pinfo.pe[r][p]=Ee[xe+p])}return 0};var C=[-1730326e-23,-.01703172,-1349528e-23,.0418072,-673278e-22,-.0876324,-30835e-21,.1863476,-1104424e-22,-.627638];function G(e,a,t){if(0==t)for(var s=0;s=0),f[o]=m,D(p>0),h[o]=b/p,D(h[o]>=0)}for(D(o==l.npart_s),D(129==i);o=0),_>0?((i=a[r])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_s[r]+e.numlines_s[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0,r=1;r=0),_>0?((i=a[r-1])0),(o=0|(_=20*(3*i-_)/(_*(e.numlines_s[r-1]+e.numlines_s[r]+e.numlines_s[r+1]-1))))>n&&(o=n),s[r]=o):s[r]=0}D(r>0),D(r==e.npart_s-1),_=t[r-1]+t[r],D(_>=0),_>0?((i=a[r-1])0),(o=0|(_=20*(2*i-_)/(_*(e.numlines_s[r-1]+e.numlines_s[r]-1))))>n&&(o=n),s[r]=o):s[r]=0,D(r==e.npart_s-1)}(l,f,h,u),i=o=0;oM&&(s[o]=M),l.masking_lower>1&&(s[o]*=l.masking_lower),s[o]>t[o]&&(s[o]=t[o]),l.masking_lower<1&&(s[o]*=l.masking_lower),D(s[o]>=0)}for(;o0?Math.min(u,S):Math.min(u,t[_]*s)}else{var M=16*e.nb_2[r][_],w=2*e.nb_1[r][_];M<=0&&(M=u),w<=0&&(w=u),S=e.blocktype_old[1&r]==Y.NORM_TYPE?Math.min(w,M):w,n[_]=Math.min(u,S)}e.nb_2[r][_]=e.nb_1[r][_],e.nb_1[r][_]=u,h=i[_],h*=e.minval_l[_],h*=b,n[_]>h&&(n[_]=h),e.masking_lower>1&&(n[_]*=e.masking_lower),n[_]>t[_]&&(n[_]=t[_]),e.masking_lower<1&&(n[_]*=e.masking_lower),D(n[_]>=0)}for(;_0?Math.pow(10,n):1,c=0;c<_;++c){var h=e[2][c],u=e[3][c],b=a[0][c],m=a[1][c],p=a[2][c],v=a[3][c];if(b<=1.58*m&&m<=1.58*b){var d=t[c]*u,g=t[c]*h;o=Math.max(p,Math.min(v,d)),i=Math.max(v,Math.min(p,g))}else o=p,i=v;if(r>0){var S,M,w=s[c]*f;if(S=Math.min(Math.max(b,w),Math.max(m,w)),(M=(p=Math.max(o,w))+(v=Math.max(i,w)))>0&&S*l0)}o=Math.min(p,o),i=Math.min(v,i)}o>h&&(o=h),i>u&&(i=u),a[2][c]=o,a[3][c]=i}}function Z(e,a){var t;return(t=e>=0?27*-e:e*a)<=-72?0:Math.exp(t*r)}function Q(e){var a,t,s=0;for(s=0;Z(s,e)>1e-20;s-=1);for(n=s,r=0;Math.abs(r-n)>1e-12;)Z(s=(r+n)/2,e)>0?r=s:n=s;a=n;var n,r;s=0;for(s=0;Z(s,e)>1e-20;s+=1);for(n=0,r=s;Math.abs(r-n)>1e-12;)Z(s=(r+n)/2,e)>0?n=s:r=s;t=r;var _,i=0,o=1e3;for(_=0;_<=o;++_){i+=Z(s=a+_*(t-a)/o,e)}return(o+1)/(i*(t-a))}function W(e){return e<0&&(e=0),e*=.001,13*Math.atan(.76*e)+3.5*Math.atan(e*e/56.25)}function J(e,a,t,s,n,r,_,i,o,l,f,c){var h,u=N(Y.CBANDS+1),b=i/(c>15?1152:384),m=X(Y.HBLKSIZE);i/=o;var p=0,v=0;for(h=0;ho/2){p=o/2,++h;break}}D(ho/2&&(M=o/2),t[g]=(m[S]+m[M])/2,a[g]=m[M];var B=b*A;_[g]=(B-u[a[g]])/(u[a[g]+1]-u[a[g]]),_[g]<0?_[g]=0:_[g]>1&&(_[g]=1),R=W(i*l[g]*f),R=Math.min(R,15.5)/15.5,r[g]=Math.pow(10,1.25*(1-Math.cos(Math.PI*R))-2.5)}p=0;for(var y=0;y=0?3:1.5)>=.5&&l<=2.5?8*((h=l-.5)*h-2*h):0,((c=15.811389+7.5*(l+=.474)-17.5*Math.sqrt(1+l*l))<=-60?0:(l=Math.exp((f+c)*r),l/=.6609193))*s[i]);u[m][i]=p*n[m]}else for(i=0;i0);i++);for(e[m][0]=i,i=a-1;i>0&&!(u[m][i]>0);i--);e[m][1]=i,b+=e[m][1]-e[m][0]+1}var g=N(b),S=0;for(m=0;m2&&(_[s][m].en.assign(h.en[m+2]),_[s][m].thm.assign(h.thm[m+2]))}for(m=0;m0;++v,--S){var T=c[0][v],k=c[1][v];c[0][v]=T+k,c[1][v]=T-k}for(v=0;v<3;v++)w[v]=h.nsPsy.last_en_subshort[m][v+6],D(h.nsPsy.last_en_subshort[m][v+4]>0),M[v]=w[v]/h.nsPsy.last_en_subshort[m][v+4],A[0]+=w[v];for(v=0;v<9;v++){for(var x=B+64,P=1;Bw[v+3-2]?(D(w[v+3-2]>0),P/=w[v+3-2]):w[v+3-2]>10*P?(D(P>0),P=w[v+3-2]/(10*P)):P=0,M[v+3]=P}for(v=0;v<3;++v){var I=w[3*v+3]+w[3*v+4]+w[3*v+5],L=1;6*w[3*v+5]y&&(l[m][v/3]=v%3+1);for(v=1;v<4;v++){var H=A[v-1],X=A[v];Math.max(H,X)<4e4&&H<1.7*X&&X<1.7*H&&(1==v&&l[m][0]<=l[m][v]&&(l[m][0]=0),l[m][v]=0)}l[m][0]<=h.nsPsy.lastAttacks[m]&&(l[m][0]=0),3!=h.nsPsy.lastAttacks[m]&&l[m][0]+l[m][1]+l[m][2]+l[m][3]==0||(E=0,0!=l[m][1]&&0!=l[m][0]&&(l[m][1]=0),0!=l[m][2]&&0!=l[m][1]&&(l[m][2]=0),0!=l[m][3]&&0!=l[m][2]&&(l[m][3]=0)),m<2?f[m]=E:0==E&&(f[0]=f[1]=0),i[m]=h.tot_ener[m]}}(e,a,t,s,r,_,l,S,w,R),function(e,a){var t=e.internal_flags;e.short_blocks!=L.short_block_coupled||0!=a[0]&&0!=a[1]||(a[0]=a[1]=0);for(var s=0;s=2||1==w[E][T+1]){var F=0!=T?T-1:2,Z=M(c.thm[E].s[I][F],H,.36);H=Math.min(H,Z)}else if(1==w[E][T]){F=0!=T?T-1:2,Z=M(c.thm[E].s[I][F],H,.18);H=Math.min(H,Z)}else if(0!=T&&3==w[E][T-1]||0==T&&3==c.nsPsy.lastAttacks[E]){F=2!=T?T+1:0,Z=M(c.thm[E].s[I][F],H,.18);H=Math.min(H,Z)}H*=S[E][T],V[T]=H}for(T=0;T<3;T++)c.thm[E].s[I][T]=V[T]}}for(E=0;E1?(Q=o,W=-2,J=Y.NORM_TYPE,f[0]!=Y.SHORT_TYPE&&f[1]!=Y.SHORT_TYPE||(J=Y.SHORT_TYPE),$=_[s][E-2]):(Q=i,W=0,J=f[E],$=r[s][E]),J==Y.SHORT_TYPE?Q[W+E]=A($,c.masking_lower):Q[W+E]=B($,c.masking_lower),e.analysis&&(c.pinfo.pe[s][E]=Q[W+E])}return 0},this.psymodel_init=function(t){var s,n=t.internal_flags,r=!0,_=13,i=24,c=0,h=0,u=-8.25,b=-4.5,m=N(Y.CBANDS),p=N(Y.CBANDS),v=N(Y.CBANDS),d=t.out_samplerate;switch(t.experimentalZ){default:case 0:r=!0;break;case 1:r=t.VBR!=P.vbr_mtrh&&t.VBR!=P.vbr_mt;break;case 2:r=!1;break;case 3:_=8,c=-1.75,h=-.0125,u=-8.25,b=-2.25}for(n.ms_ener_ratio_old=.25,n.blocktype_old[0]=n.blocktype_old[1]=Y.NORM_TYPE,s=0;s<4;++s){for(var g=0;g=_&&(M=h*(m[s]-_)/(i-_)+c*(i-m[s])/(i-_)),v[s]=Math.pow(10,M/10),n.numlines_l[s]>0?n.rnumlines_l[s]=1/n.numlines_l[s]:n.rnumlines_l[s]=0}n.s3_ll=$(n.s3ind,n.npart_l,m,p,v,r);var w;g=0;for(s=0;s(y*=n.numlines_l[s])&&(B=y)}n.ATH.cb_l[s]=B,(B=20*m[s]/10-20)>6&&(B=100),B<-15&&(B=-15),B-=8,n.minval_l[s]=Math.pow(10,B/10)*n.numlines_l[s]}for(n.npart_s=J(n.numlines_s,n.bo_s,n.bm_s,m,p,n.mld_s,n.PSY.bo_s_weight,d,Y.BLKSIZE_s,n.scalefac_band.s,Y.BLKSIZE_s/384,Y.SBMAX_s),D(n.npart_s=_&&(M=b*(m[s]-_)/(i-_)+u*(i-m[s])/(i-_)),v[s]=Math.pow(10,M/10),B=I.MAX_VALUE;for(A=0;A(y*=n.numlines_s[s])&&(B=y)}n.ATH.cb_s[s]=B,B=7*m[s]/12-7,m[s]>12&&(B*=1+3.1*Math.log(1+B)),m[s]<12&&(B*=1+2.3*Math.log(1-B)),B<-15&&(B=-15),B-=8,n.minval_s[s]=Math.pow(10,B/10)*n.numlines_s[s]}n.s3_ss=$(n.s3ind_s,n.npart_s,m,p,v,r),o=Math.pow(10,9/16),l=Math.pow(10,1.5),f=Math.pow(10,1.5),e.init_fft(n),n.decay=Math.exp(-1*a/(.01*d/192)),w=3.5,2&t.exp_nspsytune&&(w=1),Math.abs(t.msfix)>0&&(w=t.msfix),t.msfix=w;for(var E=0;En.npart_l-1&&(n.s3ind[E][1]=n.npart_l-1);var T=576*n.mode_gr/d;if(n.ATH.decay=Math.pow(10,-1.2*T),n.ATH.adjust=.01,n.ATH.adjustLimit=1,D(n.bo_l[Y.SBMAX_l-1]<=n.npart_l),D(n.bo_s[Y.SBMAX_s-1]<=n.npart_s),-1!=t.ATHtype){var k=t.out_samplerate/Y.BLKSIZE,x=0;for(R=0,s=0;s=0;)n.ATH.eql_w[s]*=x}for(E=g=0;E0;){v=p>e.sampleWindow-e.totsamp?e.sampleWindow-e.totsamp:p,dMAX_ORDER-d&&(v=MAX_ORDER-d)):(h=i+d,u=a,b=l+d,m=o),n(u,h,e.lstepbuf,e.lstep+e.totsamp,v,t[e.reqindex]),n(m,b,e.rstepbuf,e.rstep+e.totsamp,v,t[e.reqindex]),r(e.lstepbuf,e.lstep+e.totsamp,e.loutbuf,e.lout+e.totsamp,v,s[e.reqindex]),r(e.rstepbuf,e.rstep+e.totsamp,e.routbuf,e.rout+e.totsamp,v,s[e.reqindex]),h=e.lout+e.totsamp,u=e.loutbuf,b=e.rout+e.totsamp,m=e.routbuf;for(var g=v%8;0!=g--;)e.lsum+=_(u[h++]),e.rsum+=_(m[b++]);for(g=v/8;0!=g--;)e.lsum+=_(u[h+0])+_(u[h+1])+_(u[h+2])+_(u[h+3])+_(u[h+4])+_(u[h+5])+_(u[h+6])+_(u[h+7]),h+=8,e.rsum+=_(m[b+0])+_(m[b+1])+_(m[b+2])+_(m[b+3])+_(m[b+4])+_(m[b+5])+_(m[b+6])+_(m[b+7]),b+=8;if(p-=v,d+=v,e.totsamp+=v,e.totsamp==e.sampleWindow){var S=10*Ye.STEPS_per_dB*Math.log10((e.lsum+e.rsum)/e.totsamp*.5+1e-37),M=S<=0?0:0|S;M>=e.A.length&&(M=e.A.length-1),e.A[M]++,e.lsum=e.rsum=0,De.arraycopy(e.loutbuf,e.totsamp,e.loutbuf,0,MAX_ORDER),De.arraycopy(e.routbuf,e.totsamp,e.routbuf,0,MAX_ORDER),De.arraycopy(e.lstepbuf,e.totsamp,e.lstepbuf,0,MAX_ORDER),De.arraycopy(e.rstepbuf,e.totsamp,e.rstepbuf,0,MAX_ORDER),e.totsamp=0}if(e.totsamp>e.sampleWindow)return GAIN_ANALYSIS_ERROR}return f0&&!((n-=e[t])<=0););return 64.82-t/Ye.STEPS_per_dB}(e.A,e.A.length),t=0;t>2&63)>=32&&(t-=64),o=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>8&63)>=32&&(t-=64),b=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>14&63)>=32&&(t-=64),m=Math.pow(10,t/4/10),(t=a.exp_nspsytune>>20&63)>=32&&(t-=64),p=m*Math.pow(10,t/4/10),t=0;tva.MAX_BITS_PER_GRANULE&&(b=va.MAX_BITS_PER_GRANULE),i=0,o=0;o3*n/4&&(c[o]=3*n/4),c[o]<0&&(c[o]=0),c[o]+s[o]>va.MAX_BITS_PER_CHANNEL&&(c[o]=Math.max(0,va.MAX_BITS_PER_CHANNEL-s[o])),i+=c[o];if(i>u)for(o=0;ova.MAX_BITS_PER_GRANULE){var m=0;for(o=0;o.5&&(n=.5);var r=0|.5*n*(e[0]+e[1]);r>va.MAX_BITS_PER_CHANNEL-e[0]&&(r=va.MAX_BITS_PER_CHANNEL-e[0]),r<0&&(r=0),e[1]>=125&&(e[1]-r>125?(e[0]s&&(e[0]=s*e[0]/r,e[1]=s*e[1]/r),ba(e[0]<=va.MAX_BITS_PER_CHANNEL),ba(e[1]<=va.MAX_BITS_PER_CHANNEL),ba(e[0]+e[1]<=va.MAX_BITS_PER_GRANULE)},this.athAdjust=function(e,a,t){var s=90.30873362,n=ca.FAST_LOG10_X(a,10),r=e*e,_=0;return n-=t,r>1e-20&&(_=1+ca.FAST_LOG10_X(r,10/s)),_<0&&(_=0),n*=_,n+=t+s-94.82444863,Math.pow(10,.1*n)},this.calc_xmin=function(e,a,t,n){var r,_=0,i=e.internal_flags,o=0,l=0,f=i.ATH,c=t.xr,h=e.VBR==la.vbr_mtrh?1:0,u=i.masking_lower;for(e.VBR!=la.vbr_mtrh&&e.VBR!=la.vbr_mt||(u=1),r=0;r>1,B=0;do{B+=E=c[o]*c[o],w+=E0);if(B>S&&l++,r==ma.SBPSY_l)w<(R=S*i.nsPsy.longfact[r])&&(w=R);if(0!=h&&(S=w),!e.ATHonly)if((A=a.en.l[r])>0)R=B*a.thm.l[r]*u/A,0!=h&&(R*=i.nsPsy.longfact[r]),S>1;M=g/v,w=s;do{var E,T;B+=E=c[o]*c[o],w+=E0);if(B>g&&l++,p==ma.SBPSY_s)w<(R=g*i.nsPsy.shortfact[p])&&(w=R);if(S=0!=h?w:g,!e.ATHonly&&!e.ATHshort)if((A=a.en.s[p][d])>0)R=B*a.thm.s[p][d]*u/A,0!=h&&(R*=i.nsPsy.shortfact[p]),Sn[_-3+1]&&(n[_-3+1]+=(n[_-3]-n[_-3+1])*i.decay),n[_-3+1]>n[_-3+2]&&(n[_-3+2]+=(n[_-3+1]-n[_-3+2])*i.decay))}return l},this.calc_noise_core=function(e,a,t,s){var n=0,r=a.s,_=e.l3_enc;if(r>e.count1)for(;0!=t--;){o=e.xr[r],r++,n+=o*o,o=e.xr[r],r++,n+=o*o}else if(r>e.big_values){var i=ha(2);for(i[0]=0,i[1]=s;0!=t--;){o=Math.abs(e.xr[r])-i[_[r]],r++,n+=o*o,o=Math.abs(e.xr[r])-i[_[r]],r++,n+=o*o}}else for(;0!=t--;){var o;o=Math.abs(e.xr[r])-c[_[r]]*s,r++,n+=o*o,o=Math.abs(e.xr[r])-c[_[r]]*s,r++,n+=o*o}return a.s=r,n},this.calc_noise=function(e,a,t,s,n){var r,_,i,f=0,c=0,h=0,u=0,m=0,p=-20,v=0,d=e.scalefac,g=0;for(s.over_SSD=0,r=0;r>1,v+e.width[r]>e.max_nonzero_coeff)_=(A=e.max_nonzero_coeff-v+1)>0?A>>1:0;var B=new b(v);w=this.calc_noise_core(e,B,_,R),v=B.s,null!=n&&(n.step[r]=M,n.noise[r]=w),w=t[f++]=w/a[c++],w=ca.FAST_LOG10(Math.max(w,1e-20)),null!=n&&(n.noise_log[r]=w)}if(null!=n&&(n.global_gain=e.global_gain),m+=w,w>0)S=Math.max(0|10*w+.5,1),s.over_SSD+=S*S,h++,u+=w;p=Math.max(p,w)}return s.over_count=h,s.tot_noise=m,s.over_noise=u,s.max_noise=p,h},this.set_pinfo=function(e,a,t,s,n){var r,_,i,l,f,c=e.internal_flags,h=0==a.scalefac_scale?.5:1,u=a.scalefac,b=ha(L3Side.SFBMAX),m=ha(L3Side.SFBMAX),p=new CalcNoiseResult;calc_xmin(e,t,a,b),calc_noise(a,b,m,p,null);var v=0;for(_=a.sfb_lmax,a.block_type!=ma.SHORT_TYPE&&0==a.mixed_block_flag&&(_=22),r=0;r<_;r++){var d=c.scalefac_band.l[r],g=(S=c.scalefac_band.l[r+1])-d;for(l=0;v0&&!e.ATHonly?l/=t.en.l[r]:l=0,c.pinfo.thr[s][n][r]=f*Math.max(l*t.thm.l[r],c.ATH.l[r]),c.pinfo.LAMEsfb[s][n][r]=0,0!=a.preflag&&r>=11&&(c.pinfo.LAMEsfb[s][n][r]=-h*o[r]),r=0),c.pinfo.LAMEsfb[s][n][r]-=h*u[r])}if(a.block_type==ma.SHORT_TYPE)for(_=r,r=a.sfb_smin;r0?l/=t.en.s[r][M]:l=0,(e.ATHonly||e.ATHshort)&&(l=0),c.pinfo.thr_s[s][n][3*r+M]=f*Math.max(l*t.thm.s[r][M],c.ATH.s[r]),c.pinfo.LAMEsfb_s[s][n][3*r+M]=-2*a.subblock_gain[M],r0),e>>=1;0!=e--;)n[r++]=_>t[s++]?0:1,n[r++]=_>t[s++]?0:1}function r(e,t,s,n,r,_){Ra(e>0);var i=(e>>=1)%2;for(e>>=1;0!=e--;){var o,l,f,c,h,u,b,m;o=s[n++]*t,l=s[n++]*t,h=0|o,f=s[n++]*t,u=0|l,c=s[n++]*t,b=0|f,o+=a.adj43[h],m=0|c,l+=a.adj43[u],r[_++]=0|o,f+=a.adj43[b],r[_++]=0|l,c+=a.adj43[m],r[_++]=0|f,r[_++]=0|c}0!=i&&(h=0|(o=s[n++]*t),u=0|(l=s[n++]*t),o+=a.adj43[h],l+=a.adj43[u],r[_++]=0|o,r[_++]=0|l)}var _=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function i(e,a,t,s){var n=function(e,a,t){var s=0,n=0;do{var r=e[a++],_=e[a++];s>=16)>r&&(i=r,s++),n.bits+=i,s}(e,a,t,_[n-1],s);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return function(e,a,t,s,n){var r=0,_=0,i=0,o=ya.ht[s].xlen,l=ya.ht[s].hlen,f=ya.ht[s+1].hlen,c=ya.ht[s+2].hlen;do{var h=e[a+0]*o+e[a+1];a+=2,r+=l[h],_+=f[h],i+=c[h]}while(a_&&(r=_,u++),r>i&&(r=i,u=s+2),n.bits+=r,u}(e,a,t,_[n-1],s);default:if(n>Ta.IXMAX_VAL)return s.bits=Ta.LARGE_BITS,-1;var r,i;for(n-=15,r=24;r<32&&!(ya.ht[r].linmax>=n);r++);for(i=r-8;i<24&&!(ya.ht[i].linmax>=n);i++);return function(e,a,t,s,n,r){var _,i=65536*ya.ht[s].xlen+ya.ht[n].xlen,o=0;do{var l=e[a++],f=e[a++];0!=l&&(l>14&&(l=15,o+=i),l*=16),0!=f&&(f>14&&(f=15,o+=i),l+=f),o+=ya.largetbl[l]}while(a>=16)>_&&(o=_,s=n),r.bits+=o,s}(e,a,t,i,r,s)}}function o(e,a,s,n,r,_,o,l){for(var f=a.big_values,c=2;c=f)break;var u=r[c-2]+a.count1bits;if(s.part2_3_length<=u)break;var b=new t(u),m=i(n,h,f,b);u=b.bits,s.part2_3_length<=u||(s.assign(a),s.part2_3_length=u,s.region0_count=_[c-2],s.region1_count=c-2-_[c-2],s.table_select[0]=o[c-2],s.table_select[1]=l[c-2],s.table_select[2]=m)}}this.noquant_count_bits=function(e,a,s){var n=a.l3_enc,r=Math.min(576,a.max_nonzero_coeff+2>>1<<1);for(null!=s&&(s.sfb_count1=0);r>1&&!(n[r-1]|n[r-2]);r-=2);a.count1=r;for(var _=0,o=0;r>3;r-=4){var l;if((2147483647&(n[r-1]|n[r-2]|n[r-3]|n[r-4]))>1)break;l=2*(2*(2*n[r-4]+n[r-3])+n[r-2])+n[r-1],_+=ya.t32l[l],o+=ya.t33l[l]}var f=_;if(a.count1table_select=0,_>o&&(f=o,a.count1table_select=1),a.count1bits=f,a.big_values=r,0==r)return f;if(a.block_type==Ba.SHORT_TYPE)(_=3*e.scalefac_band.s[3])>a.big_values&&(_=a.big_values),o=a.big_values;else if(a.block_type==Ba.NORM_TYPE){if(Ra(r<=576),_=a.region0_count=e.bv_scf[r-2],o=a.region1_count=e.bv_scf[r-1],Ra(_+o+2(o=r)&&(_=o);if(_=Math.min(_,r),o=Math.min(o,r),Ra(_>=0),Ra(o>=0),0<_){c=new t(f);a.table_select[0]=i(n,0,_,c),f=c.bits}if(_o)return Ta.LARGE_BITS;if(function(e,t,s,_,i){var o,l,f,c=0,h=0,u=0,b=0,m=t,p=0,v=m,d=0,g=e,S=0;for(f=null!=i&&_.global_gain==i.global_gain,l=_.block_type==Ba.SHORT_TYPE?38:21,o=0;o<=l;o++){var M=-1;if((f||_.block_type==Ba.NORM_TYPE)&&(M=_.global_gain-(_.scalefac[o]+(0!=_.preflag?a.pretab[o]:0)<<_.scalefac_scale+1)-8*_.subblock_gain[_.window[o]]),Ra(_.width[o]>=0),f&&i.step[o]==M)0!=h&&(r(h,s,g,S,v,d),h=0),0!=u&&(n(u,s,g,S,v,d),u=0);else{var w,A=_.width[o];if(c+_.width[o]>_.max_nonzero_coeff&&(w=_.max_nonzero_coeff-c+1,wa.fill(t,_.max_nonzero_coeff,576,0),(A=w)<0&&(A=0),o=l+1),0==h&&0==u&&(v=m,d=p,g=e,S=b),null!=i&&i.sfb_count1>0&&o>=i.sfb_count1&&i.step[o]>0&&M>=i.step[o]?(0!=h&&(r(h,s,g,S,v,d),h=0,v=m,d=p,g=e,S=b),u+=A):(0!=u&&(n(u,s,g,S,v,d),u=0,v=m,d=p,g=e,S=b),h+=A),A<=0){0!=u&&(n(u,s,g,S,v,d),u=0),0!=h&&(r(h,s,g,S,v,d),h=0);break}}o<=l&&(p+=_.width[o],b+=_.width[o],c+=_.width[o])}0!=h&&(r(h,s,g,S,v,d),h=0),0!=u&&(n(u,s,g,S,v,d),u=0)}(t,i,a.IPOW20(s.global_gain),s,_),2&e.substep_shaping)for(var l=0,f=s.global_gain+s.scalefac_scale,c=.634521682242439/a.IPOW20(f),h=0;h=0),0==e.pseudohalf[h])l+=b;else for(u=l,l+=b;u=c?i[u]:0}return this.noquant_count_bits(e,s,_)},this.best_huffman_divide=function(e,a){var s=new Ea,n=a.l3_enc,r=Aa(23),_=Aa(23),l=Aa(23),f=Aa(23);if(a.block_type!=Ba.SHORT_TYPE||1!=e.mode_gr){s.assign(a),a.block_type==Ba.NORM_TYPE&&(!function(e,a,s,n,r,_,o){for(var l=a.big_values,f=0;f<=22;f++)n[f]=Ta.LARGE_BITS;for(f=0;f<16;f++){var c=e.scalefac_band.l[f+1];if(c>=l)break;var h=0,u=new t(h),b=i(s,0,c,u);h=u.bits;for(var m=0;m<8;m++){var p=e.scalefac_band.l[f+m+2];if(p>=l)break;var v=h,d=i(s,c,p,u=new t(v));v=u.bits,n[f+m]>v&&(n[f+m]=v,r[f+m]=f,_[f+m]=b,o[f+m]=d)}}}(e,a,n,r,_,l,f),o(e,s,a,n,r,_,l,f));var c=s.big_values;if(!(0==c||(n[c-2]|n[c-1])>1||(c=a.count1+2)>576)){s.assign(a),s.count1=c;var h=0,u=0;for(Ra(c<=576);c>s.big_values;c-=4){var b=2*(2*(2*n[c-4]+n[c-3])+n[c-2])+n[c-1];h+=ya.t32l[b],u+=ya.t33l[b]}if(s.big_values=c,s.count1table_select=0,h>u&&(h=u,s.count1table_select=1),s.count1bits=h,s.block_type==Ba.NORM_TYPE)o(e,s,a,n,r,_,l,f);else{if(s.part2_3_length=h,(h=e.scalefac_band.l[8])>c&&(h=c),h>0){var m=new t(s.part2_3_length);s.table_select[0]=i(n,0,h,m),s.part2_3_length=m.bits}if(c>h){m=new t(s.part2_3_length);s.table_select[1]=i(n,h,c,m),s.part2_3_length=m.bits}a.part2_3_length>s.part2_3_length&&a.assign(s)}}}};var l=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],f=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],c=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],h=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];e.slen1_tab=c,e.slen2_tab=h,this.best_scalefac_store=function(e,t,s,n){var r,_,i,o,u=n.tt[t][s],b=0;for(i=0,r=0;r=0),i+=m,o=-m;o<0&&0==u.l3_enc[o+i];o++);0==o&&(u.scalefac[r]=b=-2)}if(0==u.scalefac_scale&&0==u.preflag){var p=0;for(r=0;r0&&(p|=u.scalefac[r]);if(!(1&p)&&0!=p){for(r=0;r0&&(u.scalefac[r]>>=1);u.scalefac_scale=b=1}}if(0==u.preflag&&u.block_type!=Ba.SHORT_TYPE&&2==e.mode_gr){for(r=11;r0&&(u.scalefac[r]-=a.pretab[r]);u.preflag=b=1}}for(_=0;_<4;_++)n.scfsi[s][_]=0;for(2==e.mode_gr&&1==t&&n.tt[0][s].block_type!=Ba.SHORT_TYPE&&n.tt[1][s].block_type!=Ba.SHORT_TYPE&&(!function(e,a){for(var t,s=a.tt[1][e],n=a.tt[0][e],r=0;r=0);t++);if(t==ya.scfsi_band[r+1]){for(t=ya.scfsi_band[r];tb&&(s.part2_length=b,s.scalefac_compress=r)}}(s,n),b=0),r=0;rn[t]&&(e.part2_length=n[t],e.scalefac_compress=t);return e.part2_length==Ta.LARGE_BITS};var p=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(e,t){var s,n,r,_,i,o,l,f,c=Aa(4),h=t.scalefac;for(s=0!=t.preflag?2:0,l=0;l<4;l++)c[l]=0;if(t.block_type==Ba.SHORT_TYPE){n=1;var u=a.nr_of_sfb_block[s][n];for(f=0,r=0;r<4;r++)for(_=u[r]/3,l=0;l<_;l++,f++)for(i=0;i<3;i++)h[3*f+i]>c[r]&&(c[r]=h[3*f+i])}else{n=0;u=a.nr_of_sfb_block[s][n];for(f=0,r=0;r<4;r++)for(_=u[r],l=0;l<_;l++,f++)h[f]>c[r]&&(c[r]=h[f])}for(o=!1,r=0;r<4;r++)c[r]>p[s][r]&&(o=!0);if(!o){var b,m,d,g;for(t.sfb_partition_table=a.nr_of_sfb_block[s][n],r=0;r<4;r++)t.slen[r]=v[c[r]];switch(b=t.slen[0],m=t.slen[1],d=t.slen[2],g=t.slen[3],s){case 0:t.scalefac_compress=(5*b+m<<4)+(d<<2)+g;break;case 1:t.scalefac_compress=400+(5*b+m<<2)+d;break;case 2:t.scalefac_compress=500+3*b+m;break;default:Ma.err.printf("intensity stereo not implemented yet\n")}}if(!o)for(Ra(null!=t.sfb_partition_table),t.part2_length=0,r=0;r<4;r++)t.part2_length+=t.slen[r]*t.sfb_partition_table[r];return o};var v=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(e){for(var a=2;a<=576;a+=2){for(var t,n=0;e.scalefac_band.l[++n]a;)t--;for(t<0&&(t=s[n][0]),e.bv_scf[a-2]=t,t=s[n][1];e.scalefac_band.l[t+e.bv_scf[a-2]+2]>a;)t--;t<0&&(t=s[n][1]),e.bv_scf[a-1]=t}}};e(ka);var xa=u,Pa=xa.System;xa.VbrMode,xa.Float,xa.ShortBlock,xa.Util;var Ia=xa.Arrays;xa.new_array_n;var La=xa.new_byte;xa.new_double,xa.new_float;var Va=xa.new_float_n,Ha=xa.new_int;xa.new_int_n;var Na=xa.assert,Oa=ka,Xa=_a,Da=R(),Fa=Le;function Ya(){var e=this,a=32,t=null,s=null,n=null,r=null;this.setModules=function(e,a,_,i){t=e,s=a,n=_,r=i};var _=null,i=0,o=0,l=0;function f(e){Pa.arraycopy(e.header[e.w_ptr].buf,0,_,o,e.sideinfo_len),o+=e.sideinfo_len,i+=8*e.sideinfo_len,e.w_ptr=e.w_ptr+1&Fa.MAX_HEADER_BUF-1}function c(e,t,s){for(Na(s0;){var n;0==l&&(l=8,o++,Na(o=i),e.header[e.w_ptr].write_timing==i&&f(e),_[o]=0),n=Math.min(s,l),l-=n,Na((s-=n)>s<0;){var n;0==l&&(l=8,o++,Na(o>s<=0),a>=8&&(c(s,76,8),a-=8),a>=8&&(c(s,65,8),a-=8),a>=8&&(c(s,77,8),a-=8),a>=8&&(c(s,69,8),a-=8),a>=32){var r=n.getLameShortVersion();if(a>=32)for(t=0;t=8;++t)a-=8,c(s,r.charAt(t),8)}for(;a>=1;a-=1)c(s,s.ancillary_flag,1),s.ancillary_flag^=e.disable_reservoir?0:1;Na(0==a)}function b(e,t,s){for(var n=e.header[e.h_ptr].ptr;s>0;){var r=Math.min(s,8-(7&n));Na((s-=r)>3]|=t>>s<<8-(7&n)-r,n+=r}e.header[e.h_ptr].ptr=n}function m(e,a){e<<=8;for(var t=0;t<8;t++)65536&((a<<=1)^(e<<=1))&&(a^=32773);return a}function p(e,a){var t,s=Xa.ht[a.count1table_select+32],n=0,r=a.big_values,_=a.big_values;for(Na(a.count1table_select<2),t=(a.count1-a.big_values)/4;t>0;--t){var i,o=0,l=0;0!=(i=a.l3_enc[r+0])&&(l+=8,a.xr[_+0]<0&&o++,Na(i<=1)),0!=(i=a.l3_enc[r+1])&&(l+=4,o*=2,a.xr[_+1]<0&&o++,Na(i<=1)),0!=(i=a.l3_enc[r+2])&&(l+=2,o*=2,a.xr[_+2]<0&&o++,Na(i<=1)),0!=(i=a.l3_enc[r+3])&&(l++,o*=2,a.xr[_+3]<0&&o++,Na(i<=1)),r+=4,_+=4,c(e,o+s.table[l],s.hlen[l]),n+=s.hlen[l]}return n}function v(e,t,s,n,r){var _=Xa.ht[t],i=0;if(Na(t<32),0==t)return i;for(var o=s;o15){if(m>14){var v=m-15;Na(v<=_.linmax),b|=v<<1,f=h,m=15}if(p>14){var d=p-15;Na(d<=_.linmax),b<<=h,b|=d,f+=h,p=15}u=16}0!=p&&(b<<=1,r.xr[o+1]<0&&b++,l--),Na((m|p)<16),m=m*u+p,f-=l,l+=_.hlen[m],Na(l<=a),Na(f<=a),c(e,_.table[m],l),c(e,b,f),i+=l+f}return i}function d(e,a){var t=3*e.scalefac_band.s[3];t>a.big_values&&(t=a.big_values);var s=v(e,a.table_select[0],0,t,a);return s+=v(e,a.table_select[1],t,a.big_values,a)}function g(e,a){var t,s,n,r;t=a.big_values,Na(0<=t&&t<=576);var _=a.region0_count+1;return Na(0<=_),Na(_t&&(n=t),(r=e.scalefac_band.l[_])>t&&(r=t),s=v(e,a.table_select[0],0,n,a),s+=v(e,a.table_select[1],n,r,a),s+=v(e,a.table_select[2],r,t,a)}function S(){this.total=0}function M(a,t){var s,n,r,_,l,f=a.internal_flags;return l=f.w_ptr,-1==(_=f.h_ptr-1)&&(_=Fa.MAX_HEADER_BUF-1),s=f.header[_].write_timing-i,t.total=s,s>=0&&(n=1+_-l,_>8),a[5]=byte(255&t)},this.flush_bitstream=function(e){var a,s,n=e.internal_flags,r=n.h_ptr-1;if(-1==r&&(r=Fa.MAX_HEADER_BUF-1),a=n.l3_side,!((s=M(e,new S))<0)){if(u(e,s),Na(n.header[r].write_timing+this.getframebits(e)==i),n.ResvSize=0,a.main_data_begin=0,n.findReplayGain){var _=t.GetTitleGain(n.rgdata);Na(NEQ(_,GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)),n.RadioGain=0|Math.floor(10*_+.5)}n.findPeakSample&&(n.noclipGainChange=0|Math.ceil(20*Math.log10(n.PeakSample/32767)*10),n.noclipGainChange>0&&(EQ(e.scale,1)||EQ(e.scale,0))?n.noclipScale=Math.floor(32767/n.PeakSample*100)/100:n.noclipScale=-1)}},this.add_dummy_byte=function(e,a,t){for(var s,n=e.internal_flags;t-- >0;)for(h(0,a,8),s=0;s=0),b(r,t.main_data_begin,9),2==r.channels_out?b(r,t.private_bits,3):b(r,t.private_bits,5),n=0;n=0),b(r,t.main_data_begin,8),b(r,t.private_bits,r.channels_out),s=0,n=0;n ResvSize"),8*a.main_data_begin!=t.ResvSize&&(Pa.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n",8*a.main_data_begin,t.ResvSize,a.resvDrain_post,a.resvDrain_pre,8*t.sideinfo_len,n-a.resvDrain_post-8*t.sideinfo_len,n,n%8,s),Pa.err.println("This is a fatal error. It has several possible causes:"),Pa.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),Pa.err.println(" 9%% Your system is overclocked"),Pa.err.println(" 1%% bug in LAME encoding library"),t.ResvSize=8*a.main_data_begin),Na(i%8==0),i>1e9){var r;for(r=0;ri)return-1;if(Pa.arraycopy(_,0,a,n,c),o=-1,l=0,0!=f){var h=Ha(1);if(h[0]=e.nMusicCRC,r.updateMusicCRC(h,a,n,c),e.nMusicCRC=h[0],c>0&&(e.VBR_seek_table.nBytesWritten+=c),e.decode_on_the_fly)for(var u,b=Va([2,1152]),m=c,p=-1;0!=p;)if(p=s.hip_decode1_unclipped(e.hip,a,n,m,b[0],b[1]),m=0,-1==p&&(p=0),p>0){if(Na(p<=1152),e.findPeakSample){for(u=0;ue.PeakSample?e.PeakSample=b[0][u]:-b[0][u]>e.PeakSample&&(e.PeakSample=-b[0][u]);if(e.channels_out>1)for(u=0;ue.PeakSample?e.PeakSample=b[1][u]:-b[1][u]>e.PeakSample&&(e.PeakSample=-b[1][u])}if(e.findReplayGain&&t.AnalyzeSamples(e.rgdata,b[0],0,b[1],0,p,e.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6}}return c},this.init_bit_stream_w=function(e){_=La(Lame.LAME_MAXMP3BUFFER),e.h_ptr=e.w_ptr=0,e.header[e.h_ptr].write_timing=0,o=-1,l=0,i=0}}Ya.EQ=function(e,a){return Math.abs(e)>Math.abs(a)?Math.abs(e-a)<=1e-6*Math.abs(e):Math.abs(e-a)<=1e-6*Math.abs(a)},Ya.NEQ=function(e,a){return!Ya.EQ(e,a)};var qa=Ya,Ca=e(qa),Ga=u,ja=Ga.System,Ua=Ga.VbrMode;Ga.Float;var za=Ga.ShortBlock;Ga.Util,Ga.Arrays,Ga.new_array_n,Ga.new_byte,Ga.new_double;var Ka=Ga.new_float;Ga.new_float_n,Ga.new_int;var Za=Ga.new_int_n,Qa=Ga.new_short_n,Wa=Ga.assert,Ja=q,$a=z,et=Le,at=Oe,tt=ze,st=sa,nt=qa,rt=_a,_t=R();var it=function e(){var a,t,s,n,r,_=this;e.V9=410,e.V8=420,e.V7=430,e.V6=440,e.V5=450,e.V4=460,e.V3=470,e.V2=480,e.V1=490,e.V0=500,e.R3MIX=1e3,e.STANDARD=1001,e.EXTREME=1002,e.INSANE=1003,e.STANDARD_FAST=1004,e.EXTREME_FAST=1005,e.MEDIUM=1006,e.MEDIUM_FAST=1007,e.LAME_MAXMP3BUFFER=147456;var i,o,l,f=new Ja;function c(){this.mask_adjust=0,this.mask_adjust_short=0,this.bo_l_weight=Ka(_t.SBMAX_l),this.bo_s_weight=Ka(_t.SBMAX_s)}function h(){this.lowerlimit=0}function u(e,a){this.lowpass=a}this.enc=new _t,this.setModules=function(e,_,c,h,u,b,m,p,v){a=e,t=_,s=c,n=h,r=u,i=b,o=p,l=v,this.enc.setModules(t,f,n,i)};var b=4294479419;function m(e){return e>1?0:e<=0?1:Math.cos(Math.PI/2*e)}function p(e,a){switch(e){case 44100:return a.version=1,0;case 48e3:return a.version=1,1;case 32e3:return a.version=1,2;case 22050:case 11025:return a.version=0,0;case 24e3:case 12e3:return a.version=0,1;case 16e3:case 8e3:return a.version=0,2;default:return a.version=0,-1}}function v(e,a,t){t<16e3&&(a=2);for(var s=rt.bitrate_table[a][1],n=2;n<=14;n++)rt.bitrate_table[a][n]>0&&Math.abs(rt.bitrate_table[a][n]-e)0&&rt.bitrate_table[a][s]==e)return s;return-1}function g(e,a){var t=[new u(8,2e3),new u(16,3700),new u(24,3900),new u(32,5500),new u(40,7e3),new u(48,7500),new u(56,1e4),new u(64,11e3),new u(80,13500),new u(96,15100),new u(112,15600),new u(128,17e3),new u(160,17500),new u(192,18600),new u(224,19400),new u(256,19700),new u(320,20500)],s=_.nearestBitrateFullIndex(a);e.lowerlimit=t[s].lowpass}function S(e){var a=_t.BLKSIZE+e.framesize-_t.FFTOFFSET;return a=Math.max(a,512+e.framesize-32),Wa(et.MFSIZE>=a),a}function M(e,a,t,s,n,r){var i=_.enc.lame_encode_mp3_frame(e,a,t,s,n,r);return e.frameNum++,i}function w(){this.n_in=0,this.n_out=0}function A(){this.num_used=0}function R(e,a){return 0!=a?R(a,e%a):e}function B(e,a,t){var s=Math.PI*a;(e/=t)<0&&(e=0),e>1&&(e=1);var n=e-.5,r=.42-.5*Math.cos(2*e*Math.PI)+.08*Math.cos(4*e*Math.PI);return Math.abs(n)<1e-9?s/Math.PI:r*Math.sin(t*s*n)/(Math.PI*t*n)}function y(e,a,t,s,n,r,_,i,o){var l,f,c=e.internal_flags,h=0,u=e.out_samplerate/R(e.out_samplerate,e.in_samplerate);u>et.BPC&&(u=et.BPC);var b=Math.abs(c.resample_ratio-Math.floor(.5+c.resample_ratio))<1e-4?1:0,m=1/c.resample_ratio;m>1&&(m=1);var p=31;0==p%2&&--p;var v=(p+=b)+1;if(0==c.fill_buffer_resample_init){for(c.inbuf_old[0]=Ka(v),c.inbuf_old[1]=Ka(v),l=0;l<=2*u;++l)c.blackfilt[l]=Ka(v);for(c.itime[0]=0,c.itime[1]=0,h=0;h<=2*u;h++){var d=0,g=(h-u)/(2*u);for(l=0;l<=p;l++)d+=c.blackfilt[h][l]=B(l-g,m,p);for(l=0;l<=p;l++)c.blackfilt[h][l]/=d}c.fill_buffer_resample_init=1}var S=c.inbuf_old[o];for(f=0;f=_)break;g=M-c.itime[o]-(h+p%2*.5);Wa(Math.abs(g)<=.501),w=0|Math.floor(2*g*u+u+.5);var A=0;for(l=0;l<=p;++l){var y=0|l+h-p/2;Wa(y<_),Wa(y+v>=0),A+=(y<0?S[v+y]:n[r+y])*c.blackfilt[w][l]}a[t+f]=A}if(i.num_used=Math.min(_,p+h-p/2),c.itime[o]+=i.num_used-f*c.resample_ratio,i.num_used>=v)for(l=0;l1.0001)for(var i=0;i<_.channels_out;i++){var o=new A;r.n_out=y(e,a[i],_.mf_size,e.framesize,t[i],s,n,o,i),r.n_in=o.num_used}else{r.n_out=Math.min(e.framesize,n),r.n_in=r.n_out;for(var l=0;le-s?t:n},this.lame_init_params=function(e){var _,u,S,M=e.internal_flags;if(M.Class_ID=0,null==M.ATH&&(M.ATH=new at),null==M.PSY&&(M.PSY=new c),null==M.rgdata&&(M.rgdata=new tt),M.channels_in=e.num_channels,1==M.channels_in&&(e.mode=MPEGMode.MONO),M.channels_out=e.mode==MPEGMode.MONO?1:2,M.mode_ext=_t.MPG_MD_MS_LR,e.mode==MPEGMode.MONO&&(e.force_ms=!1),e.VBR==Ua.vbr_off&&128!=e.VBR_mean_bitrate_kbps&&0==e.brate&&(e.brate=e.VBR_mean_bitrate_kbps),e.VBR==Ua.vbr_off||e.VBR==Ua.vbr_mtrh||e.VBR==Ua.vbr_mt||(e.free_format=!1),e.VBR==Ua.vbr_off&&0==e.brate&&nt.EQ(e.compression_ratio,0)&&(e.compression_ratio=11.025),e.VBR==Ua.vbr_off&&e.compression_ratio>0&&(0==e.out_samplerate&&(e.out_samplerate=map2MP3Frequency(int(.97*e.in_samplerate))),e.brate=0|16*e.out_samplerate*M.channels_out/(1e3*e.compression_ratio),M.samplerate_index=p(e.out_samplerate,e),e.free_format||(e.brate=v(e.brate,e.version,e.out_samplerate))),0!=e.out_samplerate&&(e.out_samplerate<16e3?(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,64)):e.out_samplerate<32e3?(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,160)):(e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,32),e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,320))),0==e.lowpassfreq){var w=16e3;switch(e.VBR){case Ua.vbr_off:g(A=new h,e.brate),w=A.lowerlimit;break;case Ua.vbr_abr:var A;g(A=new h,e.VBR_mean_bitrate_kbps),w=A.lowerlimit;break;case Ua.vbr_rh:var R=[19500,19e3,18600,18e3,17500,16e3,15600,14900,12500,1e4,3950];if(0<=e.VBR_q&&e.VBR_q<=9){var B=R[e.VBR_q],y=R[e.VBR_q+1],E=e.VBR_q_frac;w=linear_int(B,y,E)}else w=19500;break;default:R=[19500,19e3,18500,18e3,17500,16500,15500,14500,12500,9500,3950];if(0<=e.VBR_q&&e.VBR_q<=9){B=R[e.VBR_q],y=R[e.VBR_q+1],E=e.VBR_q_frac;w=linear_int(B,y,E)}else w=19500}e.mode!=MPEGMode.MONO||e.VBR!=Ua.vbr_off&&e.VBR!=Ua.vbr_abr||(w*=1.5),e.lowpassfreq=0|w}if(0==e.out_samplerate&&(2*e.lowpassfreq>e.in_samplerate&&(e.lowpassfreq=e.in_samplerate/2),e.out_samplerate=(_=0|e.lowpassfreq,u=e.in_samplerate,S=44100,u>=48e3?S=48e3:u>=44100?S=44100:u>=32e3?S=32e3:u>=24e3?S=24e3:u>=22050?S=22050:u>=16e3?S=16e3:u>=12e3?S=12e3:u>=11025?S=11025:u>=8e3&&(S=8e3),-1==_?S:(_<=15960&&(S=44100),_<=15250&&(S=32e3),_<=11220&&(S=24e3),_<=9970&&(S=22050),_<=7230&&(S=16e3),_<=5420&&(S=12e3),_<=4510&&(S=11025),_<=3970&&(S=8e3),u44100?48e3:u>32e3?44100:u>24e3?32e3:u>22050?24e3:u>16e3?22050:u>12e3?16e3:u>11025?12e3:u>8e3?11025:8e3:S))),e.lowpassfreq=Math.min(20500,e.lowpassfreq),e.lowpassfreq=Math.min(e.out_samplerate/2,e.lowpassfreq),e.VBR==Ua.vbr_off&&(e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.brate)),e.VBR==Ua.vbr_abr&&(e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.VBR_mean_bitrate_kbps)),e.bWriteVbrTag||(e.findReplayGain=!1,e.decode_on_the_fly=!1,M.findPeakSample=!1),M.findReplayGain=e.findReplayGain,M.decode_on_the_fly=e.decode_on_the_fly,M.decode_on_the_fly&&(M.findPeakSample=!0),M.findReplayGain&&a.InitGainAnalysis(M.rgdata,e.out_samplerate)==GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)return e.internal_flags=null,-6;switch(M.decode_on_the_fly&&!e.decode_only&&(null!=M.hip&&l.hip_decode_exit(M.hip),M.hip=l.hip_decode_init()),M.mode_gr=e.out_samplerate<=24e3?1:2,e.framesize=576*M.mode_gr,e.encoder_delay=_t.ENCDELAY,M.resample_ratio=e.in_samplerate/e.out_samplerate,e.VBR){case Ua.vbr_mt:case Ua.vbr_rh:case Ua.vbr_mtrh:e.compression_ratio=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5][e.VBR_q];break;case Ua.vbr_abr:e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.VBR_mean_bitrate_kbps);break;default:e.compression_ratio=16*e.out_samplerate*M.channels_out/(1e3*e.brate)}if(e.mode==MPEGMode.NOT_SET&&(e.mode=MPEGMode.JOINT_STEREO),e.highpassfreq>0?(M.highpass1=2*e.highpassfreq,e.highpasswidth>=0?M.highpass2=2*(e.highpassfreq+e.highpasswidth):M.highpass2=2*e.highpassfreq,M.highpass1/=e.out_samplerate,M.highpass2/=e.out_samplerate):(M.highpass1=0,M.highpass2=0),e.lowpassfreq>0?(M.lowpass2=2*e.lowpassfreq,e.lowpasswidth>=0?(M.lowpass1=2*(e.lowpassfreq-e.lowpasswidth),M.lowpass1<0&&(M.lowpass1=0)):M.lowpass1=2*e.lowpassfreq,M.lowpass1/=e.out_samplerate,M.lowpass2/=e.out_samplerate):(M.lowpass1=0,M.lowpass2=0),function(e){var a=e.internal_flags,t=32,s=-1;if(a.lowpass1>0){for(var n=999,r=0;r<=31;r++)(l=r/31)>=a.lowpass2&&(t=Math.min(t,r)),a.lowpass10&&a.highpass2<.75/31*.9&&(a.highpass1=0,a.highpass2=0,ja.err.println("Warning: highpass filter disabled. highpass frequency too small\n")),a.highpass2>0){var _=-1;for(r=0;r<=31;r++)(l=r/31)<=a.highpass1&&(s=Math.max(s,r)),a.highpass1a.highpass1?m((a.highpass2-l)/(a.highpass2-a.highpass1+1e-20)):1,o=a.lowpass2>a.lowpass1?m((l-a.lowpass1)/(a.lowpass2-a.lowpass1+1e-20)):1,a.amp_filter[r]=i*o}}(e),M.samplerate_index=p(e.out_samplerate,e),M.samplerate_index<0)return e.internal_flags=null,-1;if(e.VBR==Ua.vbr_off){if(e.free_format)M.bitrate_index=0;else if(e.brate=v(e.brate,e.version,e.out_samplerate),M.bitrate_index=d(e.brate,e.version,e.out_samplerate),M.bitrate_index<=0)return e.internal_flags=null,-1}else M.bitrate_index=1;e.analysis&&(e.bWriteVbrTag=!1),null!=M.pinfo&&(e.bWriteVbrTag=!1),t.init_bit_stream_w(M);for(var T,k=M.samplerate_index+3*e.version+6*(e.out_samplerate<16e3?1:0),x=0;x<_t.SBMAX_l+1;x++)M.scalefac_band.l[x]=n.sfBandIndex[k].l[x];for(x=0;x<_t.PSFB21+1;x++){var P=(M.scalefac_band.l[22]-M.scalefac_band.l[21])/_t.PSFB21,I=M.scalefac_band.l[21]+x*P;M.scalefac_band.psfb21[x]=I}M.scalefac_band.psfb21[_t.PSFB21]=576;for(x=0;x<_t.SBMAX_s+1;x++)M.scalefac_band.s[x]=n.sfBandIndex[k].s[x];for(x=0;x<_t.PSFB12+1;x++){P=(M.scalefac_band.s[13]-M.scalefac_band.s[12])/_t.PSFB12,I=M.scalefac_band.s[12]+x*P;M.scalefac_band.psfb12[x]=I}for(M.scalefac_band.psfb12[_t.PSFB12]=192,1==e.version?M.sideinfo_len=1==M.channels_out?21:36:M.sideinfo_len=1==M.channels_out?13:21,e.error_protection&&(M.sideinfo_len+=2),function(e){var a=e.internal_flags;e.frameNum=0,e.write_id3tag_automatic&&o.id3tag_write_v2(e),a.bitrate_stereoMode_Hist=Za([16,5]),a.bitrate_blockType_Hist=Za([16,6]),a.PeakSample=0,e.bWriteVbrTag&&i.InitVbrTag(e)}(e),M.Class_ID=b,T=0;T<19;T++)M.nsPsy.pefirbuf[T]=700*M.mode_gr*M.channels_out;switch(-1==e.ATHtype&&(e.ATHtype=4),Wa(e.VBR_q<=9),Wa(e.VBR_q>=0),e.VBR){case Ua.vbr_mt:e.VBR=Ua.vbr_mtrh;case Ua.vbr_mtrh:null==e.useTemporal&&(e.useTemporal=!1),s.apply_preset(e,500-10*e.VBR_q,0),e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),e.quality<5&&(e.quality=0),e.quality>5&&(e.quality=5),M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,e.experimentalY?M.sfb21_extra=!1:M.sfb21_extra=e.out_samplerate>44e3,M.iteration_loop=new VBRNewIterationLoop(r);break;case Ua.vbr_rh:s.apply_preset(e,500-10*e.VBR_q,0),M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,e.experimentalY?M.sfb21_extra=!1:M.sfb21_extra=e.out_samplerate>44e3,e.quality>6&&(e.quality=6),e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),M.iteration_loop=new VBROldIterationLoop(r);break;default:var L;M.sfb21_extra=!1,e.quality<0&&(e.quality=LAME_DEFAULT_QUALITY),(L=e.VBR)==Ua.vbr_off&&(e.VBR_mean_bitrate_kbps=e.brate),s.apply_preset(e,e.VBR_mean_bitrate_kbps,0),e.VBR=L,M.PSY.mask_adjust=e.maskingadjust,M.PSY.mask_adjust_short=e.maskingadjust_short,L==Ua.vbr_off?M.iteration_loop=new st(r):M.iteration_loop=new ABRIterationLoop(r)}if(Wa(e.scale>=0),e.VBR!=Ua.vbr_off){if(M.VBR_min_bitrate=1,M.VBR_max_bitrate=14,e.out_samplerate<16e3&&(M.VBR_max_bitrate=8),0!=e.VBR_min_bitrate_kbps&&(e.VBR_min_bitrate_kbps=v(e.VBR_min_bitrate_kbps,e.version,e.out_samplerate),M.VBR_min_bitrate=d(e.VBR_min_bitrate_kbps,e.version,e.out_samplerate),M.VBR_min_bitrate<0))return-1;if(0!=e.VBR_max_bitrate_kbps&&(e.VBR_max_bitrate_kbps=v(e.VBR_max_bitrate_kbps,e.version,e.out_samplerate),M.VBR_max_bitrate=d(e.VBR_max_bitrate_kbps,e.version,e.out_samplerate),M.VBR_max_bitrate<0))return-1;e.VBR_min_bitrate_kbps=rt.bitrate_table[e.version][M.VBR_min_bitrate],e.VBR_max_bitrate_kbps=rt.bitrate_table[e.version][M.VBR_max_bitrate],e.VBR_mean_bitrate_kbps=Math.min(rt.bitrate_table[e.version][M.VBR_max_bitrate],e.VBR_mean_bitrate_kbps),e.VBR_mean_bitrate_kbps=Math.max(rt.bitrate_table[e.version][M.VBR_min_bitrate],e.VBR_mean_bitrate_kbps)}return e.tune&&(M.PSY.mask_adjust+=e.tune_value_a,M.PSY.mask_adjust_short+=e.tune_value_a),function(e){var a=e.internal_flags;switch(e.quality){default:case 9:a.psymodel=0,a.noise_shaping=0,a.noise_shaping_amp=0,a.noise_shaping_stop=0,a.use_best_huffman=0,a.full_outer_loop=0;break;case 8:e.quality=7;case 7:a.psymodel=1,a.noise_shaping=0,a.noise_shaping_amp=0,a.noise_shaping_stop=0,a.use_best_huffman=0,a.full_outer_loop=0;break;case 6:case 5:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=0,a.noise_shaping_stop=0,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=0,a.full_outer_loop=0;break;case 4:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=0,a.noise_shaping_stop=0,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 3:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),a.noise_shaping_amp=1,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 2:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),0==a.substep_shaping&&(a.substep_shaping=2),a.noise_shaping_amp=1,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0;break;case 1:case 0:a.psymodel=1,0==a.noise_shaping&&(a.noise_shaping=1),0==a.substep_shaping&&(a.substep_shaping=2),a.noise_shaping_amp=2,a.noise_shaping_stop=1,-1==a.subblock_gain&&(a.subblock_gain=1),a.use_best_huffman=1,a.full_outer_loop=0}}(e),Wa(e.scale>=0),e.athaa_type<0?M.ATH.useAdjust=3:M.ATH.useAdjust=e.athaa_type,M.ATH.aaSensitivityP=Math.pow(10,e.athaa_sensitivity/-10),null==e.short_blocks&&(e.short_blocks=za.short_block_allowed),e.short_blocks!=za.short_block_allowed||e.mode!=MPEGMode.JOINT_STEREO&&e.mode!=MPEGMode.STEREO||(e.short_blocks=za.short_block_coupled),e.quant_comp<0&&(e.quant_comp=1),e.quant_comp_short<0&&(e.quant_comp_short=0),e.msfix<0&&(e.msfix=0),e.exp_nspsytune=1|e.exp_nspsytune,e.internal_flags.nsPsy.attackthre<0&&(e.internal_flags.nsPsy.attackthre=Ja.NSATTACKTHRE),e.internal_flags.nsPsy.attackthre_s<0&&(e.internal_flags.nsPsy.attackthre_s=Ja.NSATTACKTHRE_S),Wa(e.scale>=0),e.scale<0&&(e.scale=1),e.ATHtype<0&&(e.ATHtype=4),e.ATHcurve<0&&(e.ATHcurve=4),e.athaa_loudapprox<0&&(e.athaa_loudapprox=2),e.interChRatio<0&&(e.interChRatio=0),null==e.useTemporal&&(e.useTemporal=!0),M.slot_lag=M.frac_SpF=0,e.VBR==Ua.vbr_off&&(M.slot_lag=M.frac_SpF=72e3*(e.version+1)*e.brate%e.out_samplerate|0),n.iteration_init(e),f.psymodel_init(e),Wa(e.scale>=0),0},this.lame_encode_flush=function(e,a,s,n){var r,_,i,l,f=e.internal_flags,c=Qa([2,1152]),h=0,u=f.mf_samples_to_encode-_t.POSTDELAY,b=S(e);if(f.mf_samples_to_encode<1)return 0;for(r=0,e.in_samplerate!=e.out_samplerate&&(u+=16*e.out_samplerate/e.in_samplerate),(i=e.framesize-u%e.framesize)<576&&(i+=e.framesize),e.encoder_padding=i,l=(u+i)/e.framesize;l>0&&h>=0;){var m=b-f.mf_size,p=e.frameNum;m*=e.in_samplerate,(m/=e.out_samplerate)>1152&&(m=1152),m<1&&(m=1),_=n-r,0==n&&(_=0),s+=h=this.lame_encode_buffer(e,c[0],c[1],m,a,s,_),r+=h,l-=p!=e.frameNum?1:0}if(f.mf_samples_to_encode=0,h<0)return h;if(_=n-r,0==n&&(_=0),t.flush_bitstream(e),(h=t.copy_buffer(f,a,s,_,1))<0)return h;if(s+=h,_=n-(r+=h),0==n&&(_=0),e.write_id3tag_automatic){if(o.id3tag_write_v1(e),(h=t.copy_buffer(f,a,s,_,0))<0)return h;r+=h}return r},this.lame_encode_buffer=function(e,s,n,r,_,i,o){var l=e.internal_flags,f=[null,null];if(l.Class_ID!=b)return-3;if(0==r)return 0;!function(e,a){(null==e.in_buffer_0||e.in_buffer_nsamples1&&(f[1][c]=n[c]);return function(e,s,n,r,_,i,o){var l,f,c,h,u,m=e.internal_flags,p=0,v=[null,null],d=[null,null];if(m.Class_ID!=b)return-3;if(0==r)return 0;if(u=t.copy_buffer(m,_,i,o,0),u<0)return u;if(i+=u,p+=u,d[0]=s,d[1]=n,nt.NEQ(e.scale,0)&&nt.NEQ(e.scale,1))for(f=0;f0;){var A=[null,null],R=0,B=0;A[0]=d[0],A[1]=d[1];var y=new w;if(E(e,v,A,g,r,y),R=y.n_in,B=y.n_out,m.findReplayGain&&!m.decode_on_the_fly&&a.AnalyzeSamples(m.rgdata,v[0],m.mf_size,v[1],m.mf_size,B,m.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6;if(r-=R,g+=R,m.channels_out,m.mf_size+=B,Wa(m.mf_size<=et.MFSIZE),m.mf_samples_to_encode<1&&(m.mf_samples_to_encode=_t.ENCDELAY+_t.POSTDELAY),m.mf_samples_to_encode+=B,m.mf_size>=h){var T=o-p;if(0==o&&(T=0),(l=M(e,v[0],v[1],_,i,T))<0)return l;for(i+=l,p+=l,m.mf_size-=e.framesize,m.mf_samples_to_encode-=e.framesize,c=0;ca&&(t=-1,a=0);90||(e.quant_comp=l.quant_comp),0!=t?e.quant_comp_short=l.quant_comp_s:Math.abs(e.quant_comp_short- -1)>0||(e.quant_comp_short=l.quant_comp_s),0!=l.expY&&(e.experimentalY=0!=l.expY),0!=t?e.internal_flags.nsPsy.attackthre=l.st_lrm:Math.abs(e.internal_flags.nsPsy.attackthre- -1)>0||(e.internal_flags.nsPsy.attackthre=l.st_lrm),0!=t?e.internal_flags.nsPsy.attackthre_s=l.st_s:Math.abs(e.internal_flags.nsPsy.attackthre_s- -1)>0||(e.internal_flags.nsPsy.attackthre_s=l.st_s),0!=t?e.maskingadjust=l.masking_adj:Math.abs(e.maskingadjust-0)>0||(e.maskingadjust=l.masking_adj),0!=t?e.maskingadjust_short=l.masking_adj_short:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=l.masking_adj_short),0!=t?e.ATHlower=-l.ath_lower/10:Math.abs(10*-e.ATHlower-0)>0||(e.ATHlower=-l.ath_lower/10),0!=t?e.ATHcurve=l.ath_curve:Math.abs(e.ATHcurve- -1)>0||(e.ATHcurve=l.ath_curve),0!=t?e.athaa_sensitivity=l.ath_sensitivity:Math.abs(e.athaa_sensitivity- -1)>0||(e.athaa_sensitivity=l.ath_sensitivity),l.interch>0&&(0!=t?e.interChRatio=l.interch:Math.abs(e.interChRatio- -1)>0||(e.interChRatio=l.interch)),l.safejoint>0&&(e.exp_nspsytune=e.exp_nspsytune|l.safejoint),l.sfb21mod>0&&(e.exp_nspsytune=e.exp_nspsytune|l.sfb21mod<<20),0!=t?e.msfix=l.msfix:Math.abs(e.msfix- -1)>0||(e.msfix=l.msfix),0==t&&(e.VBR_q=a,e.VBR_q_frac=_)}var _=[new a(8,9,9,0,0,6.6,145,0,.95,0,-30,11,.0012,1),new a(16,9,9,0,0,6.6,145,0,.95,0,-25,11,.001,1),new a(24,9,9,0,0,6.6,145,0,.95,0,-20,11,.001,1),new a(32,9,9,0,0,6.6,145,0,.95,0,-15,11,.001,1),new a(40,9,9,0,0,6.6,145,0,.95,0,-10,11,9e-4,1),new a(48,9,9,0,0,6.6,145,0,.95,0,-10,11,9e-4,1),new a(56,9,9,0,0,6.6,145,0,.95,0,-6,11,8e-4,1),new a(64,9,9,0,0,6.6,145,0,.95,0,-2,11,8e-4,1),new a(80,9,9,0,0,6.6,145,0,.95,0,0,8,7e-4,1),new a(96,9,9,0,2.5,6.6,145,0,.95,0,1,5.5,6e-4,1),new a(112,9,9,0,2.25,6.6,145,0,.95,0,2,4.5,5e-4,1),new a(128,9,9,0,1.95,6.4,140,0,.95,0,3,4,2e-4,1),new a(160,9,9,1,1.79,6,135,0,.95,-2,5,3.5,0,1),new a(192,9,9,1,1.49,5.6,125,0,.97,-4,7,3,0,0),new a(224,9,9,1,1.25,5.2,125,0,.98,-6,9,2,0,0),new a(256,9,9,1,.97,5.2,125,0,1,-8,10,1,0,0),new a(320,9,9,1,.9,5.2,125,0,1,-10,12,0,0,0)];function i(e,a,s){var n=a,r=t.nearestBitrateFullIndex(a);if(e.VBR=ft.vbr_abr,e.VBR_mean_bitrate_kbps=n,e.VBR_mean_bitrate_kbps=Math.min(e.VBR_mean_bitrate_kbps,320),e.VBR_mean_bitrate_kbps=Math.max(e.VBR_mean_bitrate_kbps,8),e.brate=e.VBR_mean_bitrate_kbps,e.VBR_mean_bitrate_kbps>320&&(e.disable_reservoir=!0),_[r].safejoint>0&&(e.exp_nspsytune=2|e.exp_nspsytune),_[r].sfscale>0&&(e.internal_flags.noise_shaping=2),Math.abs(_[r].nsbass)>0){var i=int(4*_[r].nsbass);i<0&&(i+=64),e.exp_nspsytune=e.exp_nspsytune|i<<2}return 0!=s?e.quant_comp=_[r].quant_comp:Math.abs(e.quant_comp- -1)>0||(e.quant_comp=_[r].quant_comp),0!=s?e.quant_comp_short=_[r].quant_comp_s:Math.abs(e.quant_comp_short- -1)>0||(e.quant_comp_short=_[r].quant_comp_s),0!=s?e.msfix=_[r].nsmsfix:Math.abs(e.msfix- -1)>0||(e.msfix=_[r].nsmsfix),0!=s?e.internal_flags.nsPsy.attackthre=_[r].st_lrm:Math.abs(e.internal_flags.nsPsy.attackthre- -1)>0||(e.internal_flags.nsPsy.attackthre=_[r].st_lrm),0!=s?e.internal_flags.nsPsy.attackthre_s=_[r].st_s:Math.abs(e.internal_flags.nsPsy.attackthre_s- -1)>0||(e.internal_flags.nsPsy.attackthre_s=_[r].st_s),0!=s?e.scale=_[r].scale:Math.abs(e.scale- -1)>0||(e.scale=_[r].scale),0!=s?e.maskingadjust=_[r].masking_adj:Math.abs(e.maskingadjust-0)>0||(e.maskingadjust=_[r].masking_adj),_[r].masking_adj>0?0!=s?e.maskingadjust_short=.9*_[r].masking_adj:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=.9*_[r].masking_adj):0!=s?e.maskingadjust_short=1.1*_[r].masking_adj:Math.abs(e.maskingadjust_short-0)>0||(e.maskingadjust_short=1.1*_[r].masking_adj),0!=s?e.ATHlower=-_[r].ath_lower/10:Math.abs(10*-e.ATHlower-0)>0||(e.ATHlower=-_[r].ath_lower/10),0!=s?e.ATHcurve=_[r].ath_curve:Math.abs(e.ATHcurve- -1)>0||(e.ATHcurve=_[r].ath_curve),0!=s?e.interChRatio=_[r].interch:Math.abs(e.interChRatio- -1)>0||(e.interChRatio=_[r].interch),a}this.apply_preset=function(e,a,t){switch(a){case Lame.R3MIX:a=Lame.V3,e.VBR=ft.vbr_mtrh;break;case Lame.MEDIUM:a=Lame.V4,e.VBR=ft.vbr_rh;break;case Lame.MEDIUM_FAST:a=Lame.V4,e.VBR=ft.vbr_mtrh;break;case Lame.STANDARD:a=Lame.V2,e.VBR=ft.vbr_rh;break;case Lame.STANDARD_FAST:a=Lame.V2,e.VBR=ft.vbr_mtrh;break;case Lame.EXTREME:a=Lame.V0,e.VBR=ft.vbr_rh;break;case Lame.EXTREME_FAST:a=Lame.V0,e.VBR=ft.vbr_mtrh;break;case Lame.INSANE:return a=320,e.preset=a,i(e,a,t),e.VBR=ft.vbr_off,a}switch(e.preset=a,a){case Lame.V9:return r(e,9,t),a;case Lame.V8:return r(e,8,t),a;case Lame.V7:return r(e,7,t),a;case Lame.V6:return r(e,6,t),a;case Lame.V5:return r(e,5,t),a;case Lame.V4:return r(e,4,t),a;case Lame.V3:return r(e,3,t),a;case Lame.V2:return r(e,2,t),a;case Lame.V1:return r(e,1,t),a;case Lame.V0:return r(e,0,t),a}return 8<=a&&a<=320?i(e,a,t):(e.preset=0,a)}};e(ct);var ht=function(){this.setModules=function(e,a){}};e(ht);var ut=function(){this.over_noise=0,this.tot_noise=0,this.max_noise=0,this.over_count=0,this.over_SSD=0,this.bits=0};e(ut);var bt=u,mt=bt.new_float,pt=bt.new_int;bt.assert;var vt=function(){this.global_gain=0,this.sfb_count1=0,this.step=pt(39),this.noise=mt(39),this.noise_log=mt(39)};e(vt);var dt=u,gt=dt.System,St=dt.VbrMode;dt.Float,dt.ShortBlock;var Mt=dt.Util,wt=dt.Arrays;dt.new_array_n,dt.new_byte,dt.new_double;var At=dt.new_float;dt.new_float_n,dt.new_int,dt.new_int_n;var Rt=dt.assert,Bt=ht,yt=ut,Et=vt,Tt=R(),kt=ae,xt=Q;var Pt=function(){var e,a,t;this.rv=null,this.qupvt=null;var s,n=new Bt;function r(e){this.ordinal=e}function _(e){for(var a=0;a0?(r=t.over_SSD<=a.over_SSD,t.over_SSD==a.over_SSD&&(r=t.bits.2||t.max_noise<=0&&a.max_noise<0&&a.max_noise>t.max_noise-.2&&t.tot_noise0&&a.max_noise>t.max_noise-.2&&t.tot_noise0&&a.max_noise>-.05&&a.max_noise>t.max_noise-.1&&t.tot_noise+t.over_noise0&&a.max_noise>-.1&&a.max_noise>t.max_noise-.15&&t.tot_noise+t.over_noise+t.over_noise1?i=Math.pow(i,.5):i*=.95;break;default:i>1?i=1:i*=.95}var f=0;for(o=0;oa.xrpow_max&&(a.xrpow_max=s[f+c]);if(2==_.noise_shaping_amp)return}}}(e,a,n,r,i);var l=_(a);return!l&&(!(l=2==o.mode_gr?s.scale_bitcount(a):s.scale_bitcount_lsf(o,a))||(o.noise_shaping>1&&(wt.fill(o.pseudohalf,0),0==a.scalefac_scale?(!function(e,a){for(var s=0,n=0;ne.xrpow_max&&(e.xrpow_max=a[s+i])}e.scalefac[n]=_>>1}e.preflag=0,e.scalefac_scale=1}(a,r),l=!1):a.block_type==Tt.SHORT_TYPE&&o.subblock_gain>0&&(l=function(e,a,s){var n,r=a.scalefac;for(n=0;n=16)return!0;for(var _=0;_<3;_++){var i=0,o=0;for(n=a.sfb_lmax+_;n=7)return!0;a.subblock_gain[_]++;var l=e.scalefac_band.l[a.sfb_lmax];for(n=a.sfb_lmax+_;n=0),(c-=4>>a.scalefac_scale)>=0)r[n]=c,l+=3*f;else{r[n]=0;var h=210+(c<a.xrpow_max&&(a.xrpow_max=s[l+u]);l+=f*(3-_-1)}}var b=t.IPOW20(202);for(l+=a.width[n]*(_+1),u=-a.width[n];u<0;u++)s[l+u]*=b,s[l+u]>a.xrpow_max&&(a.xrpow_max=s[l+u])}}return!1}(o,a,r)||_(a))),l||(l=2==o.mode_gr?s.scale_bitcount(a):s.scale_bitcount_lsf(o,a)),!l))}this.setModules=function(r,_,i,o){e=r,a=_,this.rv=_,t=i,this.qupvt=i,s=o,n.setModules(t,s)},this.ms_convert=function(e,a){for(var t=0;t<576;++t){var s=e.tt[a][0].xr[t],n=e.tt[a][1].xr[t];e.tt[a][0].xr[t]=(s+n)*(.5*Mt.SQRT2),e.tt[a][1].xr[t]=(s-n)*(.5*Mt.SQRT2)}},this.init_xrpow=function(e,a,t){var s=0,n=0|a.max_nonzero_coeff;if(Rt(null!=t),a.xrpow_max=0,Rt(0<=n&&n<=575),wt.fill(t,n,576,0),s=function(e,a,t,s){s=0;for(var n=0;n<=t;++n){var r=Math.abs(e.xr[n]);s+=r,a[n]=Math.sqrt(r*Math.sqrt(r)),a[n]>e.xrpow_max&&(e.xrpow_max=a[n])}return s}(a,t,n,s),s>1e-20){var r=0;2&e.substep_shaping&&(r=1);for(var _=0;_=0&&!r;_--){var i=e.scalefac_band.psfb21[_],o=e.scalefac_band.psfb21[_+1],l=t.athAdjust(s.adjust,s.psfb21[_],s.floor);e.nsPsy.longfact[21]>1e-12&&(l*=e.nsPsy.longfact[21]);for(var f=o-1;f>=i;f--){if(!(Math.abs(n[f])=0&&!r;_--){o=(i=3*e.scalefac_band.s[12]+(e.scalefac_band.s[13]-e.scalefac_band.s[12])*c+(e.scalefac_band.psfb12[_]-e.scalefac_band.psfb12[0]))+(e.scalefac_band.psfb12[_+1]-e.scalefac_band.psfb12[_]);var h=t.athAdjust(s.adjust,s.psfb12[_],s.floor);for(e.nsPsy.shortfact[12]>1e-12&&(h*=e.nsPsy.shortfact[12]),f=o-1;f>=i;f--){if(!(Math.abs(n[f])=1||(wt.sort(r,i-b,b),BitStream.EQ(r[i-1],0)))){f=(1-_[l])*n[l],c=0,u=0;do{var m;for(h=1;u+h0)}}while(++lt?(c==r.BINSEARCH_DOWN&&(l=!0),l&&(o/=2),c=r.BINSEARCH_UP,h=o):(c==r.BINSEARCH_UP&&(l=!0),l&&(o/=2),c=r.BINSEARCH_DOWN,h=-o),a.global_gain+=h,a.global_gain<0&&(a.global_gain=0,l=!0),a.global_gain>255&&(a.global_gain=255,l=!0)}for(Rt(a.global_gain>=0),Rt(a.global_gain<256);i>t&&a.global_gain<255;)a.global_gain++,i=s.count_bits(e,_,a,null);e.CurrentStep[n]=f-a.global_gain>=4?4:2,e.OldValue[n]=a.global_gain,a.part2_3_length=i}(c,a,f,l,_),0==c.noise_shaping)return 100;t.calc_noise(a,n,b,m,p),m.bits=a.part2_3_length,h.assign(a);var M=0;for(gt.arraycopy(_,0,u,0,576);!d;){do{var w,A=new yt,R=255;if(w=2&c.substep_shaping?20:3,c.sfb21_extra){if(b[h.sfbmax]>1)break;if(h.block_type==Tt.SHORT_TYPE&&(b[h.sfbmax+1]>1||b[h.sfbmax+2]>1))break}if(!o(e,h,b,_,g))break;0!=h.scalefac_scale&&(R=254);var B=f-h.part2_length;if(B<=0)break;for(;(h.part2_3_length=s.count_bits(c,_,h,p))>B&&h.global_gain<=R;)h.global_gain++;if(h.global_gain>R)break;if(0==m.over_count){for(;(h.part2_3_length=s.count_bits(c,_,h,p))>v&&h.global_gain<=R;)h.global_gain++;if(h.global_gain>R)break}if(t.calc_noise(h,n,b,A,p),A.bits=h.part2_3_length,0!=(i(a.block_type!=Tt.SHORT_TYPE?e.quant_comp:e.quant_comp_short,m,A,h,b)?1:0))v=a.part2_3_length,m=A,a.assign(h),M=0,gt.arraycopy(_,0,u,0,576);else if(0==c.full_outer_loop){if(++M>w&&0==m.over_count)break;if(3==c.noise_shaping_amp&&g&&M>30)break;if(3==c.noise_shaping_amp&&g&&h.global_gain-S>15)break}}while(h.global_gain+h.scalefac_scale<255);3==c.noise_shaping_amp?g?d=!0:(h.assign(a),gt.arraycopy(u,0,_,0,576),M=0,S=h.global_gain,g=!0):d=!0}return Rt(a.global_gain+a.scalefac_scale<=255),e.VBR==St.vbr_rh||e.VBR==St.vbr_mtrh?gt.arraycopy(u,0,_,0,576):1&c.substep_shaping&&trancate_smallspectrums(c,a,n,_),m.over_count},this.iteration_finish_one=function(e,t,n){var r=e.l3_side,_=r.tt[t][n];s.best_scalefac_store(e,t,n,r),1==e.use_best_huffman&&s.best_huffman_divide(e,_),a.ResvAdjust(e,_)},this.VBR_encode_granule=function(e,a,t,s,n,r,_){var i,o=e.internal_flags,l=new kt,f=At(576),c=_,h=_+1,u=(_+r)/2,b=0,m=o.sfb21_extra;Rt(c<=LameInternalFlags.MAX_BITS_PER_CHANNEL),wt.fill(l.l3_enc,0);do{Rt(u>=r),Rt(u<=_),Rt(r<=_),o.sfb21_extra=!(u>c-42)&&m,outer_loop(e,a,t,s,n,u)<=0?(b=1,h=a.part2_3_length,l.assign(a),gt.arraycopy(s,0,f,0,576),i=(_=h-32)-r,u=(_+r)/2):(i=_-(r=u+32),u=(_+r)/2,0!=b&&(b=2,a.assign(l),gt.arraycopy(f,0,s,0,576)))}while(i>12);o.sfb21_extra=m,2==b&>.arraycopy(l.l3_enc,0,a.l3_enc,0,576),Rt(a.part2_3_length<=c)},this.get_framebits=function(t,s){var n=t.internal_flags;n.bitrate_index=n.VBR_min_bitrate;var r=e.getframebits(t);n.bitrate_index=1,r=e.getframebits(t);for(var _=1;_<=n.VBR_max_bitrate;_++){n.bitrate_index=_;var i=new MeanBits(r);s[_]=a.ResvFrameBegin(t,i),r=i.bits}},this.VBR_old_prepare=function(e,s,n,r,_,i,o,l,f){var c,h=e.internal_flags,u=0,b=1,m=0;h.bitrate_index=h.VBR_max_bitrate;var p=a.ResvFrameBegin(e,new MeanBits(0))/h.mode_gr;get_framebits(e,i);for(var v=0;vi[h.VBR_max_bitrate]&&(l[v][g]*=i[h.VBR_max_bitrate],l[v][g]/=m),o[v][g]>l[v][g]&&(o[v][g]=l[v][g]);return b},this.bitpressure_strategy=function(e,a,t,s){for(var n=0;no&&(i[b][m]*=o,i[b][m]/=h);return f},this.calc_target_bits=function(s,n,r,_,i,o){var l,f,c,h,u=s.internal_flags,b=u.l3_side,m=0;u.bitrate_index=u.VBR_max_bitrate;var p=new MeanBits(m);for(o[0]=a.ResvFrameBegin(s,p),m=p.bits,u.bitrate_index=1,m=e.getframebits(s)-8*u.sideinfo_len,i[0]=m/(u.mode_gr*u.channels_out),m=s.VBR_mean_bitrate_kbps*s.framesize*1e3,1&u.substep_shaping&&(m*=1.09),m/=s.out_samplerate,m-=8*u.sideinfo_len,m/=u.mode_gr*u.channels_out,(l=.93+.07*(11-s.compression_ratio)/5.5)<.9&&(l=.9),l>1&&(l=1),f=0;f700){var d=int((n[f][c]-700)/1.4),g=b.tt[f][c];_[f][c]=int(l*m),g.block_type==Tt.SHORT_TYPE&&d3*m/2?d=3*m/2:d<0&&(d=0),_[f][c]+=d}_[f][c]>LameInternalFlags.MAX_BITS_PER_CHANNEL&&(_[f][c]=LameInternalFlags.MAX_BITS_PER_CHANNEL),v+=_[f][c]}if(v>LameInternalFlags.MAX_BITS_PER_GRANULE)for(c=0;cLameInternalFlags.MAX_BITS_PER_CHANNEL&&(_[f][c]=LameInternalFlags.MAX_BITS_PER_CHANNEL),h+=_[f][c];if(h>o[0])for(f=0;f320?s=8*int(1e3*a.brate/(a.out_samplerate/1152)/8+.5):(s=11520,a.strict_ISO&&(s=8*int(32e4/(a.out_samplerate/1152)/8+.5))),n.ResvMax=s-_,n.ResvMax>i&&(n.ResvMax=i),(n.ResvMax<0||a.disable_reservoir)&&(n.ResvMax=0);var o=t.bits*n.mode_gr+Math.min(n.ResvSize,n.ResvMax);return o>s&&(o=s),It(0==n.ResvMax%8),It(n.ResvMax>=0),r.resvDrain_pre=0,null!=n.pinfo&&(n.pinfo.mean_bits=t.bits/2,n.pinfo.resvsize=n.ResvSize),o},this.ResvMaxBits=function(e,a,t,s){var n,r=e.internal_flags,_=r.ResvSize,i=r.ResvMax;0!=s&&(_+=a),1&r.substep_shaping&&(i*=.9),t.bits=a,10*_>9*i?(n=_-9*i/10,t.bits+=n,r.substep_shaping|=128):(n=0,r.substep_shaping&=127,e.disable_reservoir||1&r.substep_shaping||(t.bits-=.1*a));var o=_<6*r.ResvMax/10?_:6*r.ResvMax/10;return(o-=n)<0&&(o=0),o},this.ResvAdjust=function(e,a){e.ResvSize-=a.part2_3_length+a.part2_length},this.ResvFrameEnd=function(e,a){var t,s=e.l3_side;e.ResvSize+=a*e.mode_gr;var n=0;s.resvDrain_post=0,s.resvDrain_pre=0,0!=(t=e.ResvSize%8)&&(n+=t),(t=e.ResvSize-n-e.ResvMax)>0&&(It(0==t%8),It(t>=0),n+=t);var r=Math.min(8*s.main_data_begin,n)/8;s.resvDrain_pre+=8*r,n-=8*r,e.ResvSize-=8*r,s.main_data_begin-=r,s.resvDrain_post+=n,e.ResvSize-=n}};e(Lt);var Vt=function(){this.getLameVersion=function(){return"3.98.4"},this.getLameShortVersion=function(){return"3.98.4"},this.getLameVeryShortVersion=function(){return"LAME3.98r"},this.getPsyVersion=function(){return"0.93"},this.getLameUrl=function(){return"http://www.mp3dev.org/"},this.getLameOsBitness=function(){return"32bits"}};e(Vt);var Ht=u,Nt=Ht.System,Ot=Ht.VbrMode;Ht.Float;var Xt=Ht.ShortBlock;Ht.Util;var Dt=Ht.Arrays;Ht.new_array_n;var Ft=Ht.new_byte;Ht.new_double,Ht.new_float,Ht.new_float_n,Ht.new_int,Ht.new_int_n;var Yt=Ht.assert;function qt(){var e,a,t;this.setModules=function(s,n,r){e=s,a=n,t=r};var s=qt.NUMTOCENTRIES,n=qt.MAXFRAMESIZE,r=s+4+4+4+4+4+9+1+1+8+1+1+3+1+1+2+4+2+2,_="Xing",i="Info",o=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8e3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16e3,65089,64001,15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32e3,48577,48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];function l(e,a){var t=255&e[a+0];return t<<=8,t|=255&e[a+1],t<<=8,t|=255&e[a+2],t<<=8,t|=255&e[a+3]}function f(e,a,t){e[a+0]=255&t>>24,e[a+1]=255&t>>16,e[a+2]=255&t>>8,e[a+3]=255&t}function c(e,a,t){e[a+0]=255&t>>8,e[a+1]=255&t}function h(e,a,t){return 255&(e<>8^o[255&(a^e)]}this.addVbrFrame=function(e){var a=e.internal_flags,t=Tables.bitrate_table[e.version][a.bitrate_index];Yt(null!=a.VBR_seek_table.bag),function(e,a){if(e.nVbrNumFrames++,e.sum+=a,e.seen++,!(e.seen>3&1,r=e[t+2]>>2&3,o=e[t+3]>>6&3,f=e[t+2]>>4&15;if(f=Tables.bitrate_table[n][f],e[t+1]>>4==14?a.samprate=Tables.samplerate_table[2][r]:a.samprate=Tables.samplerate_table[n][r],!function(e,a){return new String(e,a,4(),null).equals(_)||new String(e,a,4(),null).equals(i)}(e,t+=0!=n?3!=o?36:21:3!=o?21:13))return null;t+=4,a.hId=n;var c=a.flags=l(e,t);if(t+=4,1&c&&(a.frames=l(e,t),t+=4),2&c&&(a.bytes=l(e,t),t+=4),4&c){if(null!=a.toc)for(var h=0;h>4;var b=(15&e[t+1])<<8;return(u<0||u>3e3)&&(u=-1),((b+=255&e[t+2])<0||b>3e3)&&(b=-1),a.encDelay=u,a.encPadding=b,a},this.InitVbrTag=function(e){var t,s=e.internal_flags;t=1==e.version?128:e.out_samplerate<16e3?32:64,e.VBR==Ot.vbr_off&&(t=e.brate);var _=72e3*(e.version+1)*t/e.out_samplerate,i=s.sideinfo_len+r;if(s.VBR_seek_table.TotalFrameSize=_,_n)e.bWriteVbrTag=!1;else{s.VBR_seek_table.nVbrNumFrames=0,s.VBR_seek_table.nBytesWritten=0,s.VBR_seek_table.sum=0,s.VBR_seek_table.seen=0,s.VBR_seek_table.want=1,s.VBR_seek_table.pos=0,null==s.VBR_seek_table.bag&&(s.VBR_seek_table.bag=new int[400],s.VBR_seek_table.size=400);var o=Ft(n);u(e,o);for(var l=s.VBR_seek_table.TotalFrameSize,f=0;fe.pos-1&&(r=e.pos-1);var _=0|256*e.bag[r]/e.sum;_>255&&(_=255),a[t]=255&_}}(r.VBR_seek_table,o);var h=r.sideinfo_len;e.error_protection&&(h-=2),e.VBR==Ot.vbr_off?(n[h++]=255&i.charAt(0),n[h++]=255&i.charAt(1),n[h++]=255&i.charAt(2),n[h++]=255&i.charAt(3)):(n[h++]=255&_.charAt(0),n[h++]=255&_.charAt(1),n[h++]=255&_.charAt(2),n[h++]=255&_.charAt(3)),f(n,h,15),f(n,h+=4,r.VBR_seek_table.nVbrNumFrames),h+=4;var m=r.VBR_seek_table.nBytesWritten+r.VBR_seek_table.TotalFrameSize;f(n,h,0|m),h+=4,Nt.arraycopy(o,0,n,h,o.length),h+=o.length,e.error_protection&&a.CRC_writeheader(r,n);var p=0;for(l=0;l255?255:e.lowpassfreq/100+.5),w=0,A=0,R=e.internal_flags.noise_shaping,B=0,y=0,E=0,T=!!(1&e.exp_nspsytune),k=!!(2&e.exp_nspsytune),x=!1,P=!1,I=e.internal_flags.nogap_total,L=e.internal_flags.nogap_current,V=e.ATHtype;switch(e.VBR){case vbr_abr:h=e.VBR_mean_bitrate_kbps;break;case vbr_off:h=e.brate;break;default:h=e.VBR_min_bitrate_kbps}switch(_=0+(e.VBR.ordinal()510&&(u.RadioGain=510),u.RadioGain<-510&&(u.RadioGain=-510),A=8192,A|=3072,u.RadioGain>=0?A|=u.RadioGain:(A|=512,A|=-u.RadioGain)),u.findPeakSample&&(w=Math.abs(0|u.PeakSample/32767*Math.pow(2,23)+.5)),-1!=I&&(L>0&&(P=!0),L48e3?3:1,(e.short_blocks==Xt.short_block_forced||e.short_blocks==Xt.short_block_dispensed||-1==e.lowpassfreq&&-1==e.highpassfreq||e.scale_lefte.scale_right||e.disable_reservoir&&e.brate<320||e.noATH||e.ATHonly||0==V||e.in_samplerate<=32e3)&&(y=1),i=R+(B<<2)+(y<<5)+(E<<6),o=u.nMusicCRC,f(s,n+m,d),m+=4;for(var H=0;H<9;H++)s[n+m+H]=255&g.charAt(H);s[n+(m+=9)]=255&_,s[n+ ++m]=255&M,f(s,n+ ++m,w),c(s,n+(m+=4),A),c(s,n+(m+=2),0),s[n+(m+=2)]=255&l,s[n+ ++m]=h>=255?255:255&h,s[n+ ++m]=255&p>>4,s[n+m+1]=255&(p<<4)+(v>>8),s[n+m+2]=255&v,s[n+(m+=3)]=255&i,m++,s[n+m++]=0,c(s,n+m,e.preset),f(s,n+(m+=2),a),c(s,n+(m+=4),o),m+=2;for(var N=0;Ns.length?-1:(r<1||a.write(s,0,r),0)}}qt.NUMTOCENTRIES=100,qt.MAXFRAMESIZE=2880;var Ct=qt;e(Ct);var Gt=u;Gt.System,Gt.VbrMode,Gt.Float,Gt.ShortBlock,Gt.Util,Gt.Arrays,Gt.new_array_n;var jt=Gt.new_byte;Gt.new_double,Gt.new_float,Gt.new_float_n,Gt.new_int,Gt.new_int_n;var Ut=Gt.assert,zt=it,Kt=ct,Zt=qe,Qt=ga,Wt=Pt,Jt=ka,$t=Lt,es=G,as=qa;R();var ts=Vt,ss=Ct;function ns(){this.setModules=function(e,a){}}function rs(){this.setModules=function(e,a,t){}}function _s(){}function is(){this.setModules=function(e,a){}}function os(){this.dataOffset=0,this.dataLen=0,this.channels=0,this.sampleRate=0}function ls(e){return e.charCodeAt(0)<<24|e.charCodeAt(1)<<16|e.charCodeAt(2)<<8|e.charCodeAt(3)}os.RIFF=ls("RIFF"),os.WAVE=ls("WAVE"),os.fmt_=ls("fmt "),os.data=ls("data"),os.readHeader=function(e){var a=new os,t=e.getUint32(0,!1);if(os.RIFF==t&&(e.getUint32(4,!0),os.WAVE==e.getUint32(8,!1)&&os.fmt_==e.getUint32(12,!1))){var s=e.getUint32(16,!0),n=20;switch(s){case 16:case 18:a.channels=e.getUint16(n+2,!0),a.sampleRate=e.getUint32(n+4,!0);break;default:throw"extended fmt chunk not implemented"}n+=s;for(var r=os.data,_=0;r!=t&&(t=e.getUint32(n,!1),_=e.getUint32(n+4,!0),r!=t);)n+=_+8;return a.dataLen=_,a.dataOffset=n+8,a}},a.Mp3Encoder=function(e,a,t){3!=arguments.length&&(console.error("WARN: Mp3Encoder(channels, samplerate, kbps) not specified"),e=1,a=44100,t=128);var s=new zt,n=new ns,r=new Zt,_=new as,i=new Kt,o=new Qt,l=new Wt,f=new ss,c=new ts,h=new is,u=new $t,b=new Jt,m=new rs,p=new _s;s.setModules(r,_,i,o,l,f,c,h,p),_.setModules(r,p,c,f),h.setModules(_,c),i.setModules(s),l.setModules(_,u,o,b),o.setModules(b,u,s.enc.psy),u.setModules(_),b.setModules(o),f.setModules(s,_,c),n.setModules(m,p),m.setModules(c,h,i);var v=s.lame_init();v.num_channels=e,v.in_samplerate=a,v.brate=t,v.mode=es.STEREO,v.quality=3,v.bWriteVbrTag=!1,v.disable_reservoir=!0,v.write_id3tag_automatic=!1;var d=s.lame_init_params(v);Ut(0==d);var g=1152,S=0|1.25*g+7200,M=jt(S);this.encodeBuffer=function(a,t){1==e&&(t=a),Ut(a.length==t.length),a.length>g&&(g=a.length,M=jt(S=0|1.25*g+7200));var n=s.lame_encode_buffer(v,a,t,a.length,M,0,S);return new Int8Array(M.subarray(0,n))},this.flush=function(){var e=s.lame_encode_flush(v,M,0,S);return new Int8Array(M.subarray(0,e))}},a.WavHeader=os,"undefined"!=typeof self&&(self.MPEGMode=j,self.Lame=ot,self.BitStream=Ca);let fs,cs,hs,us=0,bs=[];self.onmessage=function(e){switch(e.data.command){case"init":ms(e.data.config);break;case"record":ps(e.data.buffer);break;case"exportWAV":vs(e.data.type);break;case"exportMP3":ds(e.data.type);break;case"getBuffer":gs();break;case"clear":Ss()}};const ms=e=>{fs=e.sampleRate,cs=e.numChannels,hs=e.bitrate||128,Ms()},ps=e=>{for(let a=0;a{const a=[];for(let e=0;e{const a=[];for(let e=0;e{const e=[];for(let a=0;a{us=0,bs=[],Ms()},Ms=()=>{for(let e=0;e{const t=new Float32Array(a);let s=0;for(let a=0;a{const t=e.length+a.length,s=new Float32Array(t);let n=0,r=0;for(;n{for(let s=0;s{const a=new ArrayBuffer(44+2*e.length),t=new DataView(a);return Rs(t,0,"RIFF"),t.setUint32(4,36+2*e.length,!0),Rs(t,8,"WAVE"),Rs(t,12,"fmt "),t.setUint32(16,16,!0),t.setUint16(20,1,!0),t.setUint16(22,cs,!0),t.setUint32(24,fs,!0),t.setUint32(28,4*fs,!0),t.setUint16(32,2*cs,!0),t.setUint16(34,16,!0),Rs(t,36,"data"),t.setUint32(40,2*e.length,!0),((e,a,t)=>{for(let s=0;s{const t=new a.Mp3Encoder(Math.max(2,cs),fs,hs),s=[],n=Es(e[0]),r=Es(e[1]),_=1152;for(let e=0;e0&&s.push(o)}const i=t.flush();return i.length>0&&s.push(i),s},Es=e=>{const a=new Int16Array(e.length);for(let t=0,s=e.length;t1&&(s=1),s<-1&&(s=-1),a[t]=Math.floor(32767*s)}return a}; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..c91a700 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,23 @@ +/** + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +import type { Config } from "jest"; + +const config: Config = { + clearMocks: true, + collectCoverage: false, + coverageDirectory: undefined, + coverageProvider: "v8", + moduleDirectories: [ + "node_modules", + "lib" + ], + moduleNameMapper: { + "@/(.*)": "/lib/$1" + }, + preset: "ts-jest" +}; + +export default config; diff --git a/lib/index.ts b/lib/index.ts index 445605f..4c06742 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -22,6 +22,8 @@ import { EventEmitterCallback } from "./model/EventEmitterCallback"; import { ConfigService } from "./services/interfaces/ConfigService"; import SaveBufferOptions from "./model/SaveBufferOptions"; import SoundStudioFactory from "./utils/SoundStudioFactory"; +import LimiterFilter from "./filters/LimiterFilter"; +import FilterManager from "./audioEditor/FilterManager"; export { audioEditorContainer, @@ -48,5 +50,7 @@ export { AbstractAudioRenderer, type AudioFilterEntrypointInterface, utilFunctions as UtilFunctions, - SoundStudioFactory + SoundStudioFactory, + FilterManager, + LimiterFilter }; diff --git a/lib/utils/Functions.ts b/lib/utils/Functions.ts index 95d1bff..e29986e 100644 --- a/lib/utils/Functions.ts +++ b/lib/utils/Functions.ts @@ -139,12 +139,12 @@ const utilFunctions = { }, forceDownload(blob: Blob, filename: string) { const link = window.document.createElement("a"); - const url = (window.URL || window.webkitURL).createObjectURL(blob); + const url = URL.createObjectURL(blob); window.document.body.appendChild(link); link.href = url; link.download = filename || "output.wav"; link.click(); - window.URL.revokeObjectURL(url); + URL.revokeObjectURL(url); } }; diff --git a/package-lock.json b/package-lock.json index 58d2618..b38e163 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@types/audioworklet": "^0.0.55", + "@types/jest": "^29.5.12", "@types/lodash": "^4.17.1", "@types/node": "^20.12.10", "@types/semver": "^7.5.8", @@ -27,9 +28,12 @@ "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "glob": "^10.3.10", + "jest": "^29.7.0", "rollup": "^4.17.2", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-dts": "^6.1.0", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.4.5" }, @@ -37,12 +41,24 @@ "@types/audioworklet": "^0.0.55" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, - "optional": true, "dependencies": { "@babel/highlight": "^7.24.2", "picocolors": "^1.0.0" @@ -51,12 +67,244 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, - "optional": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" + }, "engines": { "node": ">=6.9.0" } @@ -66,7 +314,6 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, - "optional": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.5", "chalk": "^2.4.2", @@ -82,7 +329,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -95,7 +341,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -110,7 +355,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "optional": true, "dependencies": { "color-name": "1.1.3" } @@ -119,15 +363,13 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "optional": true + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "optional": true, "engines": { "node": ">=0.8.0" } @@ -137,7 +379,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "optional": true, "engines": { "node": ">=4" } @@ -147,7 +388,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -155,1000 +395,3058 @@ "node": ">=4" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { - "node": "*" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=10.10.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "*" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "engines": { - "node": ">=12.22" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@babel/traverse": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@babel/types": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "optional": true, "engines": { - "node": ">=14" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=10.10.0" } }, - "node_modules/@rollup/plugin-typescript": { - "version": "11.1.6", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", - "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "resolve": "^1.22.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=14.0.0" + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" }, - "peerDependencies": { - "rollup": "^2.14.0||^3.0.0||^4.0.0", - "tslib": "*", - "typescript": ">=3.7.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - }, - "tslib": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=12" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", - "cpu": [ - "arm" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", - "cpu": [ - "x64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", - "cpu": [ - "arm" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", - "cpu": [ - "arm" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", - "cpu": [ - "riscv64" - ], + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "optional": true, - "os": [ - "linux" + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", + "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", + "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/audioworklet": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.55.tgz", + "integrity": "sha512-tL7tMCKPjsAVt2ywgoRhkBIOKHKSf0e9K3+3PTRp1tpUiHyrqA0EOdVeVg4j4bul6zHed3T4hRt0K1E7X5hXQQ==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", + "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001617", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", + "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ] }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", - "cpu": [ - "s390x" - ], + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.761", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz", + "integrity": "sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", - "cpu": [ - "x64" - ], + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", - "cpu": [ - "x64" - ], + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", - "cpu": [ - "arm64" - ], + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">=4.0" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", - "cpu": [ - "ia32" - ], + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", - "cpu": [ - "x64" - ], + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } }, - "node_modules/@types/audioworklet": { - "version": "0.0.55", - "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.55.tgz", - "integrity": "sha512-tL7tMCKPjsAVt2ywgoRhkBIOKHKSf0e9K3+3PTRp1tpUiHyrqA0EOdVeVg4j4bul6zHed3T4hRt0K1E7X5hXQQ==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=8.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10.17.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "node_modules/builtin-modules": { + "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { "node": ">=6" }, @@ -1156,754 +3454,909 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/callsites": { + "node_modules/import-local": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.8.19" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "node_modules/inversify": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.2.tgz", + "integrity": "sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "builtin-modules": "^3.3.0" }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "hasown": "^2.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "is-extglob": "^2.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" + "@types/estree": "*" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=10" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8.6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/inversify": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.2.tgz", - "integrity": "sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==" + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "builtin-modules": "^3.3.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "@types/estree": "*" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-cleanup": { @@ -1933,8 +4386,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "optional": true + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", @@ -1948,12 +4400,30 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1966,6 +4436,18 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1975,6 +4457,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lamejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/lamejs/-/lamejs-1.2.1.tgz", @@ -1983,6 +4474,15 @@ "use-strict": "1.0.1" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1996,6 +4496,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2016,6 +4522,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2040,6 +4552,42 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2062,6 +4610,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", @@ -2098,6 +4655,39 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2107,6 +4697,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2154,6 +4759,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2166,6 +4780,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2237,8 +4869,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "optional": true + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -2252,13 +4883,125 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, "node_modules/punycode": { @@ -2270,6 +5013,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2299,11 +5058,26 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -2321,6 +5095,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2330,6 +5125,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2597,6 +5401,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/skip-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", @@ -2652,6 +5462,46 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -2742,6 +5592,24 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2796,12 +5664,83 @@ "node": ">=10" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2826,6 +5765,92 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-jest": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", + "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -2844,6 +5869,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2875,6 +5909,36 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "node_modules/update-browserslist-db": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2889,6 +5953,35 @@ "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", "integrity": "sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==" }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3013,12 +6106,96 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 605591d..2cacaec 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "lint": "eslint .", "build:type": "tsc --emitDeclarationOnly", "build": "npm run build:type && npm run lint && rollup -c rollup.config.js --bundleConfigAsCjs", - "watch": "rollup -c rollup.config.js --bundleConfigAsCjs --watch" + "watch": "rollup -c rollup.config.js --bundleConfigAsCjs --watch", + "test": "jest" }, "repository": "github:eliastik/simple-sound-studio-lib", "main": "dist/cjs/SimpleSoundStudioLibrary.js", @@ -26,6 +27,7 @@ "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@types/audioworklet": "^0.0.55", + "@types/jest": "^29.5.12", "@types/lodash": "^4.17.1", "@types/node": "^20.12.10", "@types/semver": "^7.5.8", @@ -33,9 +35,12 @@ "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "glob": "^10.3.10", + "jest": "^29.7.0", "rollup": "^4.17.2", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-dts": "^6.1.0", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.4.5" }, diff --git a/tests/FilterManager.test.ts b/tests/FilterManager.test.ts new file mode 100644 index 0000000..74c6ddf --- /dev/null +++ b/tests/FilterManager.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, test } from "@jest/globals"; +import "reflect-metadata"; +import { FilterManager, LimiterFilter } from "../dist/cjs/SimpleSoundStudioLibrary"; + +describe("FilterManager tests", () => { + test("Initialize filter manager with 1 filter", () => { + const filterManager = new FilterManager([new LimiterFilter()], null); + + expect(filterManager.getFiltersState()).toStrictEqual({ + "limiter": true + }); + }); +}); \ No newline at end of file