diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..6f8950c3 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,10 @@ +{ + "postCreateCommand": "./.devcontainer/post-create.sh", + "customizations": { + "vscode": { + "extensions": [ + "github.vscode-github-actions" + ] + } + } +} \ No newline at end of file diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100755 index 00000000..0ca3a21c --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,8 @@ +#!/bin/bash +sudo apt-get install -y pulseaudio +pulseaudio -D --exit-idle-time=-1 +cd wasmaudioworklet +yarn install +yarn playwright install-deps +yarn playwright install + diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 91c525fd..7c2a49ed 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,28 +14,21 @@ jobs: run: | grep -rq --include '*.spec.js' \.only\( . && echo 'You have .only() in your tests!' && exit 1 exit 0 - chromeheadless: - name: Chrome headless + web-test-runner: + name: Web Test Runner runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Chrome headless + - name: Web Test Runner run: | - cd wasmaudioworklet - npm install - npm test - firefoxxvfb: - name: Firefox xvfb - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Firefox xvfb - run: | - sudo apt-get install pulseaudio + sudo apt-get install -y pulseaudio pulseaudio -D --exit-idle-time=-1 cd wasmaudioworklet - npm install - xvfb-run npm run test-firefox + yarn install + yarn playwright install + yarn playwright install-deps + yarn createbrowsersourcebundle + xvfb-run yarn wtr assemblyscriptsynth: name: AssemblyScript synth runs-on: ubuntu-latest @@ -43,9 +36,9 @@ jobs: - uses: actions/checkout@v2 - name: Assemblyscript synth run: | - cd wasmaudioworklet/synth1 - npm install - npm run test:ci + cd wasmaudioworklet + yarn install + yarn test-asc-synth:ci bundle-pianorolldemo: name: Bundle pianorolldemo runs-on: ubuntu-latest @@ -54,8 +47,8 @@ jobs: - name: Bundle pianorolldemo run: | cd wasmaudioworklet - npm install - npm run bundle-pianorolldemo + yarn install + yarn bundle-pianorolldemo bundle-songcompiler: name: Bundle songcompiler runs-on: ubuntu-latest @@ -64,5 +57,5 @@ jobs: - name: Bundle songcompiler run: | cd wasmaudioworklet - npm install - npm run bundle-songcompiler + yarn install + yarn bundle-songcompiler diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4b58c937..b853ffda 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '14.x' + node-version: '18.x' registry-url: 'https://registry.npmjs.org' - run: | cd wasmaudioworklet diff --git a/wasmaudioworklet/audioworkletnode.js b/wasmaudioworklet/audioworkletnode.js index c8767ef9..2b2fd96c 100644 --- a/wasmaudioworklet/audioworkletnode.js +++ b/wasmaudioworklet/audioworkletnode.js @@ -81,7 +81,7 @@ export function initAudioWorkletNode(componentRoot) { response.arrayBuffer() ) : window.WASM_SYNTH_BYTES; - await context.audioWorklet.addModule('./audioworkletprocessor.js'); + await context.audioWorklet.addModule(new URL('audioworkletprocessor.js', import.meta.url)); audioworkletnode = new AudioWorkletNode(context, 'pattern-seq-audio-worklet-processor', { outputChannelCount: [2] }); @@ -102,7 +102,7 @@ export function initAudioWorkletNode(componentRoot) { let currentTimePromiseResolve; audioworkletnode.port.onmessage = msg => { - if (msg.data.channelvalues) { + if (msg.data.channelvalues) { const channelvalues = msg.data.channelvalues; for (let n = 0; n < channelvalues.length; n++) { const note = channelvalues[n]; @@ -138,7 +138,7 @@ export function initAudioWorkletNode(componentRoot) { ); } audioworkletnode.connect(context.destination); - } + } recordAudioNode(audioworkletnode); componentRoot.getElementById('startaudiobutton').style.display = 'none'; componentRoot.getElementById('stopaudiobutton').style.display = 'block'; diff --git a/wasmaudioworklet/editorcontroller.js b/wasmaudioworklet/editorcontroller.js index 43870015..2e43a9a6 100644 --- a/wasmaudioworklet/editorcontroller.js +++ b/wasmaudioworklet/editorcontroller.js @@ -349,7 +349,6 @@ export async function initEditor(componentRoot) {

Select WASM module type to export

-

diff --git a/wasmaudioworklet/editorcontroller.spec.js b/wasmaudioworklet/editorcontroller.spec.js index d06302b8..69874638 100644 --- a/wasmaudioworklet/editorcontroller.spec.js +++ b/wasmaudioworklet/editorcontroller.spec.js @@ -153,45 +153,6 @@ export function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usiz expect(errorMessagesContentElement.innerText).contains(`ERROR TS1005: ')' expected`); expect(errorMessagesContentElement.innerText).contains(`hello`); }); - it('should compile and export song to wasm with WASI main entry point', async () => { - songsourceeditor.doc.setValue(songsource); - synthsourceeditor.doc.setValue(synthsource); - const appElement = document.getElementsByTagName('app-javascriptmusic')[0].shadowRoot; - let audioWorkletMessage; - window.audioworkletnode = { - port: { - postMessage: msg => audioWorkletMessage = msg - }, - context: { - sampleRate: 44100 - } - }; - const downloadPromise = new Promise(resolve => { - document._createElement = document.createElement; - document.createElement = function (elementName, options) { - const elm = this._createElement(elementName, options); - if (elementName === 'a') { - elm.click = () => resolve(elm.href); - } else if (elementName === 'common-modal') { - elm.shadowRoot.result('wasimain'); - } - return elm; - } - }); - - appElement.querySelector('#exportbutton').click(); - const url = await downloadPromise; - - const wasmbinary = await fetch(url).then(r => r.arrayBuffer()); - - assert.isAbove(wasmbinary.byteLength, 1000); - assert.isDefined((await WebAssembly.instantiate(wasmbinary, { - wasi_snapshot_preview1: { - fd_write: () => 0 - } - })).instance.exports._start); - document.createElement = document._createElement; - }); it('should compile and export song to wasm with lib functions exported', async () => { songsourceeditor.doc.setValue(songsource); synthsourceeditor.doc.setValue(synthsource); diff --git a/wasmaudioworklet/karma.conf.cjs b/wasmaudioworklet/karma.conf.cjs index 21bd9937..888f7b56 100644 --- a/wasmaudioworklet/karma.conf.cjs +++ b/wasmaudioworklet/karma.conf.cjs @@ -78,12 +78,12 @@ module.exports = function (config) { }, ChromeHeadless_NoUserGestureRequired: { base: 'Chrome', - flags: ['--autoplay-policy=no-user-gesture-required','--headless=new'] + flags: ['--autoplay-policy=no-user-gesture-required', '--headless=new'] }, FirefoxAutoplay: { base: 'FirefoxHeadless', prefs: { - 'media.autoplay.block-webaudio': false + 'media.autoplay.block-webaudio': false } } }, @@ -94,6 +94,6 @@ module.exports = function (config) { // Concurrency level // how many browser should be started simultaneous - concurrency: Infinity + concurrency: Infinity, }) } diff --git a/wasmaudioworklet/midisequencer/songcompiler.spec.js b/wasmaudioworklet/midisequencer/songcompiler.spec.js index 450e42df..34e7f475 100644 --- a/wasmaudioworklet/midisequencer/songcompiler.spec.js +++ b/wasmaudioworklet/midisequencer/songcompiler.spec.js @@ -37,7 +37,7 @@ loopHere(); try { await compileSong(`createTrack(5).steps(4,[controlChange(91, 100)]);`); } catch (e) { - assert.equal('controlChange is not defined', e.message); + assert.isTrue(e.message === 'controlChange is not defined' || e.message === "Can't find variable: controlChange"); hasError = true; } assert.equal(hasError, true); diff --git a/wasmaudioworklet/package-lock.json b/wasmaudioworklet/package-lock.json deleted file mode 100644 index 52f7b235..00000000 --- a/wasmaudioworklet/package-lock.json +++ /dev/null @@ -1,4932 +0,0 @@ -{ - "name": "wasm-music", - "version": "0.0.39", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "wasm-music", - "version": "0.0.39", - "license": "GPL-3.0", - "devDependencies": { - "@web/rollup-plugin-html": "^1.9.0", - "chai": "^4.2.0", - "http-server": "^14.1.0", - "karma": "^6.3.14", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^2.1.0", - "karma-mocha": "^2.0.1", - "karma-safari-launcher": "^1.0.0", - "mocha": "^9.1.4", - "rollup": "^2.53.3", - "rollup-plugin-terser": "^7.0.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@web/parse5-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", - "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", - "dev": true, - "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/rollup-plugin-html": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@web/rollup-plugin-html/-/rollup-plugin-html-1.11.0.tgz", - "integrity": "sha512-EqUcV5plGYTV/utdbX8g5t8Yq/z6VfFuQuPD39ckOQuRj7Rj6HD15FHwLHpFAWOR0+GrDnNzR74RvI4ipGm0qQ==", - "dev": true, - "dependencies": { - "@web/parse5-utils": "^1.3.0", - "glob": "^7.1.6", - "html-minifier-terser": "^6.0.0", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/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/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "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/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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/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/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "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/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "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/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "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": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "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/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "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/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.5.tgz", - "integrity": "sha512-mjEyaa4zhuuRhaSLOdjEb57X0XPP9JEsnXI4E+ivhwT0GgzUogARx4MqoY1jQyB+4Bkz3BUOmzL7t9RMKmlG3g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/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/engine.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "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": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "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/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "dev": true, - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.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==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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": ">=0.10.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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "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/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/karma": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", - "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chai": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", - "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", - "dev": true, - "peerDependencies": { - "chai": "*", - "karma": ">=0.10.9" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "dependencies": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - } - }, - "node_modules/karma-firefox-launcher/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.3" - } - }, - "node_modules/karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha512-qmypLWd6F2qrDJfAETvXDfxHvKDk+nyIjpH9xIeI3/hENr0U3nuqkxaftq73PfXZ4aOuOChA6SnLW4m4AxfRjQ==", - "dev": true, - "peerDependencies": { - "karma": ">=0.9" - } - }, - "node_modules/karma/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log4js": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz", - "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.3" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/log4js/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/log4js/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/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/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/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": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "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/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dev": true, - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "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/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/socket.io": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", - "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.1", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-parser/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/socket.io-parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/socket.io/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/socket.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.4.tgz", - "integrity": "sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/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/streamroller/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/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/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "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-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dev": true, - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": 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/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@web/parse5-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", - "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", - "dev": true, - "requires": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - } - }, - "@web/rollup-plugin-html": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@web/rollup-plugin-html/-/rollup-plugin-html-1.11.0.tgz", - "integrity": "sha512-EqUcV5plGYTV/utdbX8g5t8Yq/z6VfFuQuPD39ckOQuRj7Rj6HD15FHwLHpFAWOR0+GrDnNzR74RvI4ipGm0qQ==", - "dev": true, - "requires": { - "@web/parse5-utils": "^1.3.0", - "glob": "^7.1.6", - "html-minifier-terser": "^6.0.0", - "parse5": "^6.0.1" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "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 - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "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 - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "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 - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "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, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "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 - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.5.tgz", - "integrity": "sha512-mjEyaa4zhuuRhaSLOdjEb57X0XPP9JEsnXI4E+ivhwT0GgzUogARx4MqoY1jQyB+4Bkz3BUOmzL7t9RMKmlG3g==", - "dev": true - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "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 - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "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, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "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 - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "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, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "dev": true, - "requires": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "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, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "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 - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "karma": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", - "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - } - } - }, - "karma-chai": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", - "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", - "dev": true, - "requires": {} - }, - "karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "requires": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "requires": { - "minimist": "^1.2.3" - } - }, - "karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha512-qmypLWd6F2qrDJfAETvXDfxHvKDk+nyIjpH9xIeI3/hENr0U3nuqkxaftq73PfXZ4aOuOChA6SnLW4m4AxfRjQ==", - "dev": true, - "requires": {} - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log4js": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz", - "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "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 - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "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 - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dev": true, - "requires": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "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 - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "socket.io": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", - "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.1", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true - }, - "socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - }, - "streamroller": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.4.tgz", - "integrity": "sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "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 - } - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "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 - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", - "dev": true - }, - "union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dev": true, - "requires": { - "qs": "^6.4.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "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, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/wasmaudioworklet/package.json b/wasmaudioworklet/package.json index 8516b661..161b492d 100644 --- a/wasmaudioworklet/package.json +++ b/wasmaudioworklet/package.json @@ -1,7 +1,7 @@ { "name": "wasm-music", "description": "Javascript/WebAssembly live coding environment for music and synthesis", - "version": "0.0.39", + "version": "0.0.40", "repository": { "url": "https://github.com/petersalomonsen/javascriptmusic" }, @@ -16,10 +16,12 @@ ], "type": "module", "scripts": { - "test": "karma start --single-run --browsers ChromeHeadless_NoUserGestureRequired karma.conf.cjs", - "test-firefox": "karma start --single-run --browsers FirefoxAutoplay karma.conf.cjs", - "test-firefox-watch": "karma start --browsers FirefoxAutoplay karma.conf.cjs", - "test-watch": "karma start --browsers Chrome_NoUserGestureRequired karma.conf.cjs", + "test-wtr": "wtr", + "asbuild": "(cd synth1 && asc --runtime stub assembly/index.ts -o build/index.wasm -Oz)", + "fastbuild": "(cd synth1 && asc --runtime stub assembly/index.ts -o build/index.wasm -t build/index.wat)", + "createbrowsersourcebundle": "(cd synth1 && node createbrowsertsbundle.js)", + "test-asc-synth": "(cd synth1 && asp --verbose)", + "test-asc-synth:ci": "(cd synth1 && asp --summary)", "bundle-pianorolldemo": "(cd midisequencer/ui/pianorolldemo && rm -Rf dist && rollup -c rollup-config.js)", "bundle-songcompiler": "rollup -c rollup-config-songcompiler.js", "bundle-musicandshadervideoplayer": "(cd player/musicandshadervideoplayer && rollup -c rollup.config.js)", @@ -27,18 +29,18 @@ "serve": "http-server -p 8080 ." }, "devDependencies": { - "@rollup/plugin-terser": "^0.3.0", - "@web/rollup-plugin-html": "^1.11.0", + "@as-pect/cli": "^8.1.0", + "@esm-bundle/chai": "^4.3.4-fix.0", + "@rollup/plugin-terser": "^0.4.4", + "@web/rollup-plugin-html": "^2.0.1", + "@web/test-runner": "^0.18.0", + "@web/test-runner-playwright": "^0.11.0", + "assemblyscript": "^0.27.14", "chai": "^4.3.7", "http-server": "^14.1.1", - "karma": "^6.4.1", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.1", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-safari-launcher": "^1.0.0", "mocha": "^10.2.0", - "rollup": "^3.9.1", + "rollup": "^4.1.5", "rollup-plugin-terser": "^7.0.2" - } + }, + "dependencies": {} } diff --git a/wasmaudioworklet/synth1/.gitignore b/wasmaudioworklet/synth1/.gitignore index 0a727b97..46e0962b 100644 --- a/wasmaudioworklet/synth1/.gitignore +++ b/wasmaudioworklet/synth1/.gitignore @@ -2,3 +2,4 @@ out.flac # ignore generated Amiga Protracker modules *.mod .DS_Store + diff --git a/wasmaudioworklet/synth1/as-pect.asconfig.json b/wasmaudioworklet/synth1/as-pect.asconfig.json new file mode 100644 index 00000000..024f9dc7 --- /dev/null +++ b/wasmaudioworklet/synth1/as-pect.asconfig.json @@ -0,0 +1,36 @@ +{ + "targets": { + "coverage": { + "lib": [ + "../node_modules/@as-covers/assembly/index.ts" + ], + "transform": [ + "@as-covers/transform", + "@as-pect/transform" + ] + }, + "noCoverage": { + "transform": [ + "@as-pect/transform" + ] + } + }, + "options": { + "initialMemory": 1024, + "exportMemory": true, + "outFile": "output.wasm", + "textFile": "output.wat", + "bindings": "raw", + "exportStart": "_start", + "exportRuntime": true, + "use": [ + "RTRACE=1" + ], + "debug": true, + "exportTable": true + }, + "extends": "./asconfig.json", + "entries": [ + "../node_modules/@as-pect/assembly/assembly/index.ts" + ] +} \ No newline at end of file diff --git a/wasmaudioworklet/synth1/as-pect.config.js b/wasmaudioworklet/synth1/as-pect.config.js index 3d7331db..2f87e24e 100644 --- a/wasmaudioworklet/synth1/as-pect.config.js +++ b/wasmaudioworklet/synth1/as-pect.config.js @@ -1,55 +1,18 @@ -module.exports = { - /** - * A set of globs passed to the glob package that qualify typescript files for testing. - */ - include: ["assembly/__tests__/**/*.spec.ts"], - /** - * A set of globs passed to the glob package that quality files to be added to each test. - */ - add: ["assembly/__tests__/**/*.include.ts"], - /** - * All the compiler flags needed for this test suite. Make sure that a binary file is output. - */ +export default { + entries: ["assembly/__tests__/**/*.spec.ts"], + include: ["assembly/__tests__/**/*.include.ts"], flags: { - /** To output a wat file, uncomment the following line. */ - // "--textFile": ["output.wat"], - /** A runtime must be provided here. */ - "--runtime": ["stub"], // Acceptable values are: full, half, stub (arena) + "--runtime": ["stub"] }, - /** - * A set of regexp that will disclude source files from testing. - */ - disclude: [/node_modules/], - /** - * Add your required AssemblyScript imports here. - */ - imports(memory, createImports, instantiateSync, binary) { + disclude: [/node_modules/i], + async instantiate(memory, createImports, instantiate, binary) { let instance; // Imports can reference this const myImports = { - // put your web assembly imports here, and return the module + env: { memory } + // put your web assembly imports here, and return the module promise }; - instance = instantiateSync(binary, createImports(myImports)); + instance = instantiate(binary, createImports(myImports)); return instance; }, - /** - * Add a custom reporter here if you want one. The following example is in typescript. - * - * @example - * import { TestReporter, TestGroup, TestResult, TestContext } from "as-pect"; - * - * export class CustomReporter extends TestReporter { - * // implement each abstract method here - * public abstract onStart(suite: TestContext): void; - * public abstract onGroupStart(group: TestGroup): void; - * public abstract onGroupFinish(group: TestGroup): void; - * public abstract onTestStart(group: TestGroup, result: TestResult): void; - * public abstract onTestFinish(group: TestGroup, result: TestResult): void; - * public abstract onFinish(suite: TestContext): void; - * } - */ - // reporter: new CustomReporter(), - /** - * Specify if the binary wasm file should be written to the file system. - */ outputBinary: false, }; diff --git a/wasmaudioworklet/synth1/asconfig.json b/wasmaudioworklet/synth1/asconfig.json new file mode 100644 index 00000000..6e0a1ba9 --- /dev/null +++ b/wasmaudioworklet/synth1/asconfig.json @@ -0,0 +1,22 @@ +{ + "targets": { + "debug": { + "outFile": "build/debug.wasm", + "textFile": "build/debug.wat", + "sourceMap": true, + "debug": true + }, + "release": { + "outFile": "build/release.wasm", + "textFile": "build/release.wat", + "sourceMap": true, + "optimizeLevel": 3, + "shrinkLevel": 0, + "converge": false, + "noAssert": false + } + }, + "options": { + "bindings": "esm" + } +} \ No newline at end of file diff --git a/wasmaudioworklet/synth1/assembly/__tests__/midi/midisynth.spec.ts b/wasmaudioworklet/synth1/assembly/__tests__/midi/midisynth.spec.ts index aec0218b..63fe60b2 100644 --- a/wasmaudioworklet/synth1/assembly/__tests__/midi/midisynth.spec.ts +++ b/wasmaudioworklet/synth1/assembly/__tests__/midi/midisynth.spec.ts @@ -73,7 +73,7 @@ class LongReleaseInstrument extends MidiVoice { } nextframe(): void { - signal = this.osc.next() * this.env.next() * this.velocity / 256; + signal = this.osc.next() * this.env.next() * this.velocity / 256; } } @@ -90,8 +90,8 @@ class ClipVoice extends MidiVoice { } class FlatVoiceMidiChannel extends MidiChannel { preprocess(): void { - this.signal.left*=0.5; - this.signal.right*=0.5; + this.signal.left *= 0.5; + this.signal.right *= 0.5; } } @@ -100,7 +100,7 @@ class LowerKeys extends MidiVoice { super(channel); this.maxnote = 63; } - + nextframe(): void { this.channel.signal.add(0.6, -0.6); } @@ -118,537 +118,540 @@ class UpperKeys extends MidiVoice { } describe("midisynth", () => { - it("should activate and deactivate one midivoice", () => { - const channel = midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new TestMidiInstrument(channel)); - const availableVoice = channel.voices[0]; - - midichannels[0] = channel; - - expect(activeVoices[0]).toBe(null, 'should be no active voices'); - shortmessage(0x90, 69, 100); - - expect(activeVoices[0]).toBe(availableVoice, 'should be one active voice'); - - const activeVoice: TestMidiInstrument = activeVoices[0] as TestMidiInstrument; - expect(activeVoice.note).toBe(69, "note is 69"); - expect(activeVoice.velocity).toBe(100, "velocity is 100"); - expect(activeVoice.osc.frequency).toBe(440, "frequency is 440"); - - expect(activeVoice.env.state).toBe(EnvelopeState.ATTACK); - let attackFrameCount = 0; - while (activeVoice.env.state === EnvelopeState.ATTACK) { - playActiveVoices(); - attackFrameCount++; - } - cleanupInactiveVoices(); - expect(attackFrameCount as f32 / SAMPLERATE).toBeCloseTo(0.1 as f32); - expect(activeVoice.env.state).toBe(EnvelopeState.DECAY); - - // note off - shortmessage(0x90, 69, 0); - expect(activeVoice.env.state).toBe(EnvelopeState.RELEASE); - let releaseFrameCount = 0; - while (activeVoice.env.state === EnvelopeState.RELEASE) { - expect(activeVoices[0]).toBe(availableVoice, 'voice should be active as long as it is in the release state'); - playActiveVoices(); - releaseFrameCount++; - } - - cleanupInactiveVoices(); - expect(activeVoice.env.state).toBe(EnvelopeState.DONE); - expect(releaseFrameCount as f32 / SAMPLERATE).toBeCloseTo(0.1 as f32); - expect(activeVoice.activeVoicesIndex).toBe(-1); - expect(activeVoices[0]).toBe(null, 'should be no active voices'); - }); - it("should keep a list of active voices without holes when adding/removing multiple voices", () => { - const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); - - expect(numActiveVoices).toBe(0); - - shortmessage(0x90, 69, 100); - shortmessage(0x90, 72, 100); - shortmessage(0x90, 76, 100); - - expect(numActiveVoices).toBe(3); - expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); - expect(activeVoices[1]).toBe(channel.voices[1], 'voice 2 should be active'); - expect(activeVoices[2]).toBe(channel.voices[2], 'voice 3 should be active'); - - shortmessage(0x90, 72, 0); - while ((activeVoices[1] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - playActiveVoices(); - expect(activeVoices[1]).toBe(channel.voices[1], 'voice 2 should be active'); - } - - cleanupInactiveVoices(); - expect(numActiveVoices).toBe(2); - expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); - expect(activeVoices[1]).toBe(channel.voices[2], 'voice 3 should be active'); - - shortmessage(0x90, 73, 100); - cleanupInactiveVoices(); - - expect(numActiveVoices).toBe(3); - expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); - expect(activeVoices[1]).toBe(channel.voices[2], 'voice 3 should be active'); - expect(activeVoices[2]).toBe(channel.voices[1], 'voice 2 should be active'); - - shortmessage(0x90, 69, 0); - cleanupInactiveVoices(); - - while ((activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - playActiveVoices(); - } - cleanupInactiveVoices(); - expect(numActiveVoices).toBe(2); - expect(activeVoices[0]).toBe(channel.voices[2], 'voice 3 should be active'); + it("should activate and deactivate one midivoice", () => { + const channel = midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new TestMidiInstrument(channel)); + const availableVoice = channel.voices[0]; + + midichannels[0] = channel; + + expect(activeVoices[0]).toBe(null, 'should be no active voices'); + shortmessage(0x90, 69, 100); + + expect(activeVoices[0]).toBe(availableVoice, 'should be one active voice'); + + const activeVoice: TestMidiInstrument = activeVoices[0] as TestMidiInstrument; + expect(activeVoice.note).toBe(69, "note is 69"); + expect(activeVoice.velocity).toBe(100, "velocity is 100"); + expect(activeVoice.osc.frequency).toBe(440, "frequency is 440"); + + expect(activeVoice.env.state).toBe(EnvelopeState.ATTACK); + let attackFrameCount = 0; + while (activeVoice.env.state === EnvelopeState.ATTACK) { + playActiveVoices(); + attackFrameCount++; + } + cleanupInactiveVoices(); + expect(attackFrameCount as f32 / SAMPLERATE).toBeCloseTo(0.1 as f32); + expect(activeVoice.env.state).toBe(EnvelopeState.DECAY); + + // note off + shortmessage(0x90, 69, 0); + expect(activeVoice.env.state).toBe(EnvelopeState.RELEASE); + let releaseFrameCount = 0; + while (activeVoice.env.state === EnvelopeState.RELEASE) { + expect(activeVoices[0]).toBe(availableVoice, 'voice should be active as long as it is in the release state'); + playActiveVoices(); + releaseFrameCount++; + } + + cleanupInactiveVoices(); + expect(activeVoice.env.state).toBe(EnvelopeState.DONE); + expect(releaseFrameCount as f32 / SAMPLERATE).toBeCloseTo(0.1 as f32); + expect(activeVoice.activeVoicesIndex).toBe(-1); + expect(activeVoices[0]).toBe(null, 'should be no active voices'); + }); + it("should keep a list of active voices without holes when adding/removing multiple voices", () => { + const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); + + expect(numActiveVoices).toBe(0); + + shortmessage(0x90, 69, 100); + shortmessage(0x90, 72, 100); + shortmessage(0x90, 76, 100); + + expect(numActiveVoices).toBe(3); + expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); + expect(activeVoices[1]).toBe(channel.voices[1], 'voice 2 should be active'); + expect(activeVoices[2]).toBe(channel.voices[2], 'voice 3 should be active'); + + shortmessage(0x90, 72, 0); + while ((activeVoices[1] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + playActiveVoices(); expect(activeVoices[1]).toBe(channel.voices[1], 'voice 2 should be active'); - - shortmessage(0x90, 73, 0); - shortmessage(0x90, 76, 0); - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE || - (activeVoices[1] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - playActiveVoices(); - } - cleanupInactiveVoices(); - - expect(numActiveVoices).toBe(0, 'should be no active voices'); - expect(activeVoices[0]).toBe(null, 'voice 1 should be inactive'); - expect(activeVoices[1]).toBe(null, 'voice 2 should be inactive'); - expect(activeVoices[2]).toBe(null, 'voice 3 should be inactive'); - - }); - it("should not activate more than one voice for a note (per channel)", () => { - const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); - - midichannels[0] = channel; - - expect(numActiveVoices).toBe(0); - - shortmessage(0x90, 69, 100); - shortmessage(0x90, 69, 100); - shortmessage(0x90, 69, 100); - - expect(numActiveVoices).toBe(1, 'should be only one active voice'); - expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); - expect(activeVoices[1]).toBe(null, 'voice 2 should be inactive'); - expect(activeVoices[2]).toBe(null, 'voice 3 should be inactive'); - - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DECAY) { - playActiveVoices(); - } - shortmessage(0x80, 69, 0); - expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.RELEASE); - expect(numActiveVoices).toBe(1, 'should be one active voice'); - shortmessage(0x90, 69, 80); - expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.ATTACK); - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DECAY) { - playActiveVoices(); - } - expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.DECAY); - shortmessage(0x80, 69, 0); - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - playActiveVoices(); - } - cleanupInactiveVoices(); - expect(numActiveVoices).toBe(0, 'should be no active voices'); - }); - it("should produce sound", () => { - fillSampleBuffer(); - for (let n=0; n(samplebuffer[n]).toBe(0); - } - shortmessage(0x91, 69, 100); - - expect(numActiveVoices).toBe(1, 'should be one active voice'); - - fillSampleBuffer(); - for (let n=1; n(samplebuffer[n]).not.toBe(samplebuffer[n-1], 'signal should be changing'); - } - - shortmessage(0x91, 69, 0); - - while ( - numActiveVoices > 0) { - fillSampleBuffer(); - } - - for (let n=0; n(samplebuffer[n]).toBe(0, 'signal should be quiet'); - } - }); - it("should be able to turn voices on and off without waiting for release when there is only one available voice", () => { - const channel = midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new TestMidiInstrument(channel)); - - midichannels[0] = channel; - shortmessage(0x90, 69, 100); - - expect(numActiveVoices).toBe(1, 'should be one active voice'); - fillSampleBuffer(); - fillSampleBuffer(); - - shortmessage(0x90, 69, 0); - shortmessage(0x90, 71, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(71, 'should be the second note'); - fillSampleBuffer(); - fillSampleBuffer(); - - shortmessage(0x90, 71, 0); - shortmessage(0x90, 73, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(73, 'should still be the third note'); - - fillSampleBuffer(); - shortmessage(0x90, 73, 0); - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - fillSampleBuffer(); - } - fillSampleBuffer(); - expect(numActiveVoices).toBe(0, 'should be no active voices after release'); - }); - it("should take over the oldest voice if all voices for a channel are active", () => { - const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); - - midichannels[0] = channel; - shortmessage(0x90, 69, 100); - - expect(numActiveVoices).toBe(1, 'should be one active voice'); - fillSampleBuffer(); - fillSampleBuffer(); - - - shortmessage(0x90, 71, 100); - expect(numActiveVoices).toBe(2, 'should be two active voices'); - expect((activeVoices[0] as MidiVoice).note).toBe(69, 'voice 1 should be the first note'); - expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); - fillSampleBuffer(); - - shortmessage(0x90, 73, 100); - expect(numActiveVoices).toBe(3, 'should be three active voices'); - expect((activeVoices[0] as MidiVoice).note).toBe(69, 'voice 1 should be the first note'); - expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); - expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the third note'); - fillSampleBuffer(); - - shortmessage(0x90, 75, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); - expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); - expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the third note'); - fillSampleBuffer(); - - shortmessage(0x90, 77, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); - expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); - expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the second note'); - fillSampleBuffer(); - - shortmessage(0x90, 79, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); - expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); - expect((activeVoices[2] as MidiVoice).note).toBe(79, 'voice 3 should be the sixth note'); - fillSampleBuffer(); - - shortmessage(0x90, 81, 100); - expect((activeVoices[0] as MidiVoice).note).toBe(81, 'voice 1 should be the seventh note'); - expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); - expect((activeVoices[2] as MidiVoice).note).toBe(79, 'voice 3 should be the sixth note'); - fillSampleBuffer(); - - shortmessage(0x90, 81, 0); - shortmessage(0x90, 77, 0); - shortmessage(0x90, 79, 0); - - while ( - (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { - fillSampleBuffer(); - } - fillSampleBuffer(); - expect(numActiveVoices).toBe(0, 'should be no active voices after release'); - }); - it("should play all the notes being passed to a long release instrument", () => { - midichannels[0] = new MidiChannel(2, (channel: MidiChannel) => new LongReleaseInstrument(channel)); - - for (let n=1; n < 126; n++) { - const note: u8 = n as u8; - - shortmessage(0x90, note, 100); - let noteVoice: LongReleaseInstrument; - - for (let voiceIndex=0; voiceIndex < numActiveVoices; voiceIndex++) { - if ((activeVoices[voiceIndex] as MidiVoice).note === note) { - noteVoice = activeVoices[voiceIndex] as LongReleaseInstrument; - } + } + + cleanupInactiveVoices(); + expect(numActiveVoices).toBe(2); + expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); + expect(activeVoices[1]).toBe(channel.voices[2], 'voice 3 should be active'); + + shortmessage(0x90, 73, 100); + cleanupInactiveVoices(); + + expect(numActiveVoices).toBe(3); + expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); + expect(activeVoices[1]).toBe(channel.voices[2], 'voice 3 should be active'); + expect(activeVoices[2]).toBe(channel.voices[1], 'voice 2 should be active'); + + shortmessage(0x90, 69, 0); + cleanupInactiveVoices(); + + while ((activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + playActiveVoices(); + } + cleanupInactiveVoices(); + expect(numActiveVoices).toBe(2); + expect(activeVoices[0]).toBe(channel.voices[2], 'voice 3 should be active'); + expect(activeVoices[1]).toBe(channel.voices[1], 'voice 2 should be active'); + + shortmessage(0x90, 73, 0); + shortmessage(0x90, 76, 0); + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE || + (activeVoices[1] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + playActiveVoices(); + } + cleanupInactiveVoices(); + + expect(numActiveVoices).toBe(0, 'should be no active voices'); + expect(activeVoices[0]).toBe(null, 'voice 1 should be inactive'); + expect(activeVoices[1]).toBe(null, 'voice 2 should be inactive'); + expect(activeVoices[2]).toBe(null, 'voice 3 should be inactive'); + + }); + it("should not activate more than one voice for a note (per channel)", () => { + const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); + + midichannels[0] = channel; + + expect(numActiveVoices).toBe(0); + + shortmessage(0x90, 69, 100); + shortmessage(0x90, 69, 100); + shortmessage(0x90, 69, 100); + + expect(numActiveVoices).toBe(1, 'should be only one active voice'); + expect(activeVoices[0]).toBe(channel.voices[0], 'voice 1 should be active'); + expect(activeVoices[1]).toBe(null, 'voice 2 should be inactive'); + expect(activeVoices[2]).toBe(null, 'voice 3 should be inactive'); + + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DECAY) { + playActiveVoices(); + } + shortmessage(0x80, 69, 0); + expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.RELEASE); + expect(numActiveVoices).toBe(1, 'should be one active voice'); + shortmessage(0x90, 69, 80); + expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.ATTACK); + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DECAY) { + playActiveVoices(); + } + expect((activeVoices[0] as TestMidiInstrument).env.state).toBe(EnvelopeState.DECAY); + shortmessage(0x80, 69, 0); + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + playActiveVoices(); + } + cleanupInactiveVoices(); + expect(numActiveVoices).toBe(0, 'should be no active voices'); + }); + it("should produce sound", () => { + fillSampleBuffer(); + for (let n = 0; n < samplebuffer.length; n++) { + expect(samplebuffer[n]).toBe(0); + } + shortmessage(0x91, 69, 100); + + expect(numActiveVoices).toBe(1, 'should be one active voice'); + + fillSampleBuffer(); + for (let n = 1; n < samplebuffer.length; n++) { + expect(samplebuffer[n]).not.toBe(samplebuffer[n - 1], 'signal should be changing'); + } + + shortmessage(0x91, 69, 0); + + while ( + numActiveVoices > 0) { + fillSampleBuffer(); + } + + for (let n = 0; n < samplebuffer.length; n++) { + expect(samplebuffer[n]).toBe(0, 'signal should be quiet'); + } + }); + it("should be able to turn voices on and off without waiting for release when there is only one available voice", () => { + const channel = midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new TestMidiInstrument(channel)); + + midichannels[0] = channel; + shortmessage(0x90, 69, 100); + + expect(numActiveVoices).toBe(1, 'should be one active voice'); + fillSampleBuffer(); + fillSampleBuffer(); + + shortmessage(0x90, 69, 0); + shortmessage(0x90, 71, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(71, 'should be the second note'); + fillSampleBuffer(); + fillSampleBuffer(); + + shortmessage(0x90, 71, 0); + shortmessage(0x90, 73, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(73, 'should still be the third note'); + + fillSampleBuffer(); + shortmessage(0x90, 73, 0); + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + fillSampleBuffer(); + } + fillSampleBuffer(); + expect(numActiveVoices).toBe(0, 'should be no active voices after release'); + }); + it("should take over the oldest voice if all voices for a channel are active", () => { + const channel = midichannels[0] = new MidiChannel(3, (channel: MidiChannel) => new TestMidiInstrument(channel)); + + midichannels[0] = channel; + shortmessage(0x90, 69, 100); + + expect(numActiveVoices).toBe(1, 'should be one active voice'); + fillSampleBuffer(); + fillSampleBuffer(); + + + shortmessage(0x90, 71, 100); + expect(numActiveVoices).toBe(2, 'should be two active voices'); + expect((activeVoices[0] as MidiVoice).note).toBe(69, 'voice 1 should be the first note'); + expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); + fillSampleBuffer(); + + shortmessage(0x90, 73, 100); + expect(numActiveVoices).toBe(3, 'should be three active voices'); + expect((activeVoices[0] as MidiVoice).note).toBe(69, 'voice 1 should be the first note'); + expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); + expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the third note'); + fillSampleBuffer(); + + shortmessage(0x90, 75, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); + expect((activeVoices[1] as MidiVoice).note).toBe(71, 'voice 2 should be the second note'); + expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the third note'); + fillSampleBuffer(); + + shortmessage(0x90, 77, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); + expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); + expect((activeVoices[2] as MidiVoice).note).toBe(73, 'voice 3 should be the second note'); + fillSampleBuffer(); + + shortmessage(0x90, 79, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(75, 'voice 1 should be the fourth note'); + expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); + expect((activeVoices[2] as MidiVoice).note).toBe(79, 'voice 3 should be the sixth note'); + fillSampleBuffer(); + + shortmessage(0x90, 81, 100); + expect((activeVoices[0] as MidiVoice).note).toBe(81, 'voice 1 should be the seventh note'); + expect((activeVoices[1] as MidiVoice).note).toBe(77, 'voice 2 should be the fifth note'); + expect((activeVoices[2] as MidiVoice).note).toBe(79, 'voice 3 should be the sixth note'); + fillSampleBuffer(); + + shortmessage(0x90, 81, 0); + shortmessage(0x90, 77, 0); + shortmessage(0x90, 79, 0); + + while ( + (activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.DONE) { + fillSampleBuffer(); + } + fillSampleBuffer(); + expect(numActiveVoices).toBe(0, 'should be no active voices after release'); + }); + it("should play all the notes being passed to a long release instrument", () => { + midichannels[0] = new MidiChannel(2, (channel: MidiChannel) => new LongReleaseInstrument(channel)); + + for (let n = 1; n < 126; n++) { + const note: u8 = n as u8; + + shortmessage(0x90, note, 100); + let noteVoice: LongReleaseInstrument | null = null; + + for (let voiceIndex = 0; voiceIndex < numActiveVoices; voiceIndex++) { + if ((activeVoices[voiceIndex] as MidiVoice).note === note) { + noteVoice = activeVoices[voiceIndex] as LongReleaseInstrument; } + } + if (noteVoice) { expect(noteVoice.env.state).toBe(EnvelopeState.ATTACK, 'expected note to be triggered'); - + while (noteVoice.env.state === EnvelopeState.ATTACK) { fillSampleBuffer(); } - + shortmessage(0x80, note, 0); fillSampleBuffer(); expect(noteVoice.env.state).toBe(EnvelopeState.RELEASE, 'expected note to be released'); } - }); - it("should deactivate all voices after all notes off", () => { - midichannels[0] = new MidiChannel(60, (channel: MidiChannel) => new LongReleaseInstrument(channel)); + expect(noteVoice).not.toBeNull(); + } + }); + it("should deactivate all voices after all notes off", () => { + midichannels[0] = new MidiChannel(60, (channel: MidiChannel) => new LongReleaseInstrument(channel)); - for (let n=1; n < 127; n++) { - const note: u8 = n as u8; - - shortmessage(0x90, note, 100); - } - expect(numActiveVoices).toBe(activeVoices.length, 'all voices should be active'); + for (let n = 1; n < 127; n++) { + const note: u8 = n as u8; - allNotesOff(); - expect(numActiveVoices).toBe(activeVoices.length, 'all voices should be active before release'); + shortmessage(0x90, note, 100); + } + expect(numActiveVoices).toBe(activeVoices.length, 'all voices should be active'); - while (numActiveVoices > 0) { - fillSampleBuffer(); - } - - expect(numActiveVoices).toBe(0, 'all voices should be deactivated after release'); - }); - it("should sustain notes on a channel", () => { - midichannels[0] = midichannels[0] = new MidiChannel(20, (channel: MidiChannel) => new TestMidiInstrument(channel)); + allNotesOff(); + expect(numActiveVoices).toBe(activeVoices.length, 'all voices should be active before release'); - for (let n=1; n < 11; n++) { - const note: u8 = n as u8; - shortmessage(0x90, note, 100); - } + while (numActiveVoices > 0) { fillSampleBuffer(); - shortmessage(0xb0, 64, 127); // sustain control change + } - expect(numActiveVoices).toBe(10, 'should be active voices'); - expect(midichannels[0].controllerValues[64]).toBe(127); + expect(numActiveVoices).toBe(0, 'all voices should be deactivated after release'); + }); + it("should sustain notes on a channel", () => { + midichannels[0] = midichannels[0] = new MidiChannel(20, (channel: MidiChannel) => new TestMidiInstrument(channel)); - fillSampleBuffer(); + for (let n = 1; n < 11; n++) { + const note: u8 = n as u8; + shortmessage(0x90, note, 100); + } + fillSampleBuffer(); + shortmessage(0xb0, 64, 127); // sustain control change - for (let n=1; n < 11; n++) { - const note: u8 = n as u8; - shortmessage(0x90, note, 0); // all notes off - } + expect(numActiveVoices).toBe(10, 'should be active voices'); + expect(midichannels[0].controllerValues[64]).toBe(127); - fillSampleBuffer(); + fillSampleBuffer(); - for (let n=1; n < 11; n++) { - const note: u8 = n as u8; - expect(midichannels[0].sustainedVoices[n]).not.toBe(null); - } + for (let n = 1; n < 11; n++) { + const note: u8 = n as u8; + shortmessage(0x90, note, 0); // all notes off + } - for (let n=0; n < numActiveVoices; n++) { - expect((activeVoices[n] as TestMidiInstrument).env.state) - .not.toBe(EnvelopeState.RELEASE, 'notes should not be in release'); - } + fillSampleBuffer(); - fillSampleBuffer(); - shortmessage(0x90, 10, 100); // reactivate note 10, and expect it not to be released - expect(midichannels[0].sustainedVoices[10]).toBe(null); - - shortmessage(0xb0, 64, 0); // release all held by sustain - expect(midichannels[0].controllerValues[64]).toBe(0); - for (let n=1; n < 11; n++) { - const note: u8 = n as u8; - expect(midichannels[0].sustainedVoices[n]).toBe(null); - } + for (let n = 1; n < 11; n++) { + const note: u8 = n as u8; + expect(midichannels[0].sustainedVoices[n]).not.toBe(null); + } + + for (let n = 0; n < numActiveVoices; n++) { + expect((activeVoices[n] as TestMidiInstrument).env.state) + .not.toBe(EnvelopeState.RELEASE, 'notes should not be in release'); + } - expect(numActiveVoices).toBe(10, 'should be active voices'); - - for (let n=0; n < numActiveVoices - 1; n++) { - expect((activeVoices[n] as TestMidiInstrument).env.state) - .toBe(EnvelopeState.RELEASE, 'notes should be in release'); - } - expect((activeVoices[numActiveVoices - 1] as TestMidiInstrument).env.state) - .toBe(EnvelopeState.ATTACK, 'one note should be in attack'); - - while (numActiveVoices > 1) { - fillSampleBuffer(); - } - - expect(numActiveVoices).toBe(1, 'all voices but one should be deactivated after release'); + fillSampleBuffer(); + shortmessage(0x90, 10, 100); // reactivate note 10, and expect it not to be released + expect(midichannels[0].sustainedVoices[10]).toBe(null); - while ((activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.SUSTAIN) { - fillSampleBuffer(); - } - - expect((activeVoices[0] as TestMidiInstrument).env.state) - .toBe(EnvelopeState.SUSTAIN, 'one note should be in sustain'); - - shortmessage(0xb0, 64, 127); // sustain control change - shortmessage(0x90, 10, 0); // note 10 off, and expect it to be sustained - fillSampleBuffer(); + shortmessage(0xb0, 64, 0); // release all held by sustain + expect(midichannels[0].controllerValues[64]).toBe(0); + for (let n = 1; n < 11; n++) { + const note: u8 = n as u8; + expect(midichannels[0].sustainedVoices[n]).toBe(null); + } - expect((activeVoices[0] as TestMidiInstrument).env.state) - .toBe(EnvelopeState.SUSTAIN, 'one note should be in sustain'); - - shortmessage(0xb0, 64, 0); // release sustained + expect(numActiveVoices).toBe(10, 'should be active voices'); - while (numActiveVoices > 0) { - fillSampleBuffer(); + for (let n = 0; n < numActiveVoices - 1; n++) { + expect((activeVoices[n] as TestMidiInstrument).env.state) + .toBe(EnvelopeState.RELEASE, 'notes should be in release'); + } + expect((activeVoices[numActiveVoices - 1] as TestMidiInstrument).env.state) + .toBe(EnvelopeState.ATTACK, 'one note should be in attack'); + + while (numActiveVoices > 1) { + fillSampleBuffer(); + } + + expect(numActiveVoices).toBe(1, 'all voices but one should be deactivated after release'); + + while ((activeVoices[0] as TestMidiInstrument).env.state !== EnvelopeState.SUSTAIN) { + fillSampleBuffer(); + } + + expect((activeVoices[0] as TestMidiInstrument).env.state) + .toBe(EnvelopeState.SUSTAIN, 'one note should be in sustain'); + + shortmessage(0xb0, 64, 127); // sustain control change + shortmessage(0x90, 10, 0); // note 10 off, and expect it to be sustained + fillSampleBuffer(); + + expect((activeVoices[0] as TestMidiInstrument).env.state) + .toBe(EnvelopeState.SUSTAIN, 'one note should be in sustain'); + + shortmessage(0xb0, 64, 0); // release sustained + + while (numActiveVoices > 0) { + fillSampleBuffer(); + } + + expect(numActiveVoices).toBe(0, 'all voices should be deactivated after release'); + }); + it("should handle midi volume control change", () => { + midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new FlatSignalVoice(channel)); + shortmessage(0x90, 64, 127); + fillSampleBuffer(); + + const pan = new Pan(); + expect(samplebuffer[0]).toBe(NativeMathf.pow(10, 40 * NativeMathf.log10(100 / 127) / 20) * pan.leftLevel); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10, 40 * NativeMathf.log10(100 / 127) / 20) * pan.rightLevel); + + shortmessage(0xb0, 7, 127); + fillSampleBuffer(); + expect(samplebuffer[0]).toBe(1 * pan.leftLevel); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(1 * pan.rightLevel); + + shortmessage(0xb0, 7, 64); + fillSampleBuffer(); + expect(samplebuffer[0]).toBe(NativeMathf.pow(10, 40 * NativeMathf.log10(64 / 127) / 20) * pan.leftLevel); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10, 40 * NativeMathf.log10(64 / 127) / 20) * pan.rightLevel); + + shortmessage(0xb0, 7, 32); + fillSampleBuffer(); + expect(samplebuffer[0]).toBe(NativeMathf.pow(10, 40 * NativeMathf.log10(32 / 127) / 20) * pan.leftLevel); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10, 40 * NativeMathf.log10(32 / 127) / 20) * pan.rightLevel); + }); + it("should handle midi pan control change", () => { + midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new FlatSignalVoice(channel)); + + shortmessage(0x90, 10, 127); + shortmessage(0xb0, 7, 127); + shortmessage(0xb0, 10, 0); + fillSampleBuffer(); + expect(samplebuffer[0]).toBeCloseTo(1.0); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.0); + + shortmessage(0xb0, 10, 127); + fillSampleBuffer(); + expect(samplebuffer[0]).toBeCloseTo(0.0); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(1.0); + + shortmessage(0xb0, 10, 64); + fillSampleBuffer(); + expect(samplebuffer[0]).toBeCloseTo(NativeMathf.sqrt(1 / 2)); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.sqrt(1 / 2)); + }); + it("channel preprocess", () => { + midichannels[0] = new FlatVoiceMidiChannel(1, (channel: MidiChannel) => new FlatSignalVoice(channel)); + shortmessage(0xb0, 7, 127); + shortmessage(0x90, 10, 127); + + fillSampleBuffer(); + expect(samplebuffer[0]).toBeCloseTo(NativeMathf.sqrt(1 / 2) / 2); + + }); + it("global postprocess", () => { + midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new ClipVoice(channel)); + + shortmessage(0x90, 10, 127); + + fillSampleBuffer(); + + expect(samplebuffer[0]).toBeCloseTo(1); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(-1); + }); + it("should be able to use multiple different voices for channel", () => { + midichannels[0] = new MidiChannel(2, (ch, n) => { + switch (n) { + case 0: + return new LowerKeys(ch); + default: + return new UpperKeys(ch); } - - expect(numActiveVoices).toBe(0, 'all voices should be deactivated after release'); - }); - it("should handle midi volume control change", () => { - midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new FlatSignalVoice(channel)); - shortmessage(0x90, 64, 127); - fillSampleBuffer(); - - const pan = new Pan(); - expect(samplebuffer[0]).toBe(NativeMathf.pow(10,40 * NativeMathf.log10(100/127) / 20)* pan.leftLevel); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10,40 * NativeMathf.log10(100/127) / 20) * pan.rightLevel); - - shortmessage(0xb0, 7, 127); - fillSampleBuffer(); - expect(samplebuffer[0]).toBe(1 * pan.leftLevel); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(1 * pan.rightLevel); - - shortmessage(0xb0, 7, 64); - fillSampleBuffer(); - expect(samplebuffer[0]).toBe(NativeMathf.pow(10,40 * NativeMathf.log10(64/127) / 20) * pan.leftLevel); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10, 40 * NativeMathf.log10(64/127) / 20)* pan.rightLevel); - - shortmessage(0xb0, 7, 32); - fillSampleBuffer(); - expect(samplebuffer[0]).toBe(NativeMathf.pow(10, 40 * NativeMathf.log10(32/127) / 20)* pan.leftLevel); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.pow(10, 40 * NativeMathf.log10(32/127) / 20) * pan.rightLevel); }); - it("should handle midi pan control change", () => { - midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new FlatSignalVoice(channel)); - - shortmessage(0x90, 10, 127); - shortmessage(0xb0, 7, 127); - shortmessage(0xb0, 10, 0); - fillSampleBuffer(); - expect(samplebuffer[0]).toBeCloseTo(1.0); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.0); - - shortmessage(0xb0, 10, 127); - fillSampleBuffer(); - expect(samplebuffer[0]).toBeCloseTo(0.0); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(1.0); - shortmessage(0xb0, 10, 64); - fillSampleBuffer(); - expect(samplebuffer[0]).toBeCloseTo(NativeMathf.sqrt(1/2)); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(NativeMathf.sqrt(1/2)); - }); - it("channel preprocess", () => { - midichannels[0] = new FlatVoiceMidiChannel(1, (channel: MidiChannel) =>new FlatSignalVoice(channel)); - shortmessage(0xb0, 7, 127); - shortmessage(0x90, 10, 127); - - fillSampleBuffer(); - expect(samplebuffer[0]).toBeCloseTo(NativeMathf.sqrt(1/2) / 2); - - }); - it("global postprocess", () => { - midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new ClipVoice(channel)); - - shortmessage(0x90, 10, 127); - - fillSampleBuffer(); - - expect(samplebuffer[0]).toBeCloseTo(1); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(-1); - }); - it("should be able to use multiple different voices for channel", () => { - midichannels[0] = new MidiChannel(2, (ch, n) => { - switch(n) { - case 0: - return new LowerKeys(ch); - default: - return new UpperKeys(ch); - } - }); - - shortmessage(0x90, 10, 127); - shortmessage(0xb0, 7, 127); - - fillSampleBuffer(); - - expect(samplebuffer[0]).toBeCloseTo(0.6 * NativeMathf.sqrt(1/2)); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1/2)); - - shortmessage(0x90, 10, 0); - shortmessage(0x90, 64, 127); - - fillSampleBuffer(); - fillSampleBuffer(); - - expect(samplebuffer[0]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1/2)); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.6 * NativeMathf.sqrt(1/2)); - - shortmessage(0x90, 65, 127); - - fillSampleBuffer(); - fillSampleBuffer(); - - expect(samplebuffer[0]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1/2)); - expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.6 * NativeMathf.sqrt(1/2)); - allNotesOff(); - while (activeVoices[0] != null) { - fillSampleBuffer(); - } - }); - it("should provide shapshot of active voices", () => { - midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new ShortReleaseMidiInstrument(channel)); - midichannels[1] = new MidiChannel(2, (channel: MidiChannel) => new ShortReleaseMidiInstrument(channel)); - - expect(activeVoices[0]).toBe(null, 'should be no active voices'); - shortmessage(0x90, 69, 100); - - const activeVoicesShapshotLocation = changetype(getActiveVoicesStatusSnapshot()); - expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); - expect(load(activeVoicesShapshotLocation + 1)).toBe(69, "note is 69"); - expect(load(activeVoicesShapshotLocation + 2)).toBe(100, "velocity is 100" ); - - // note off - shortmessage(0x90, 69, 0); - fillSampleBuffer(); - fillSampleBuffer(); - getActiveVoicesStatusSnapshot(); - expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); - expect(load(activeVoicesShapshotLocation + 1)).toBe(0, "note is 0"); - expect(load(activeVoicesShapshotLocation + 2)).toBe(0, "velocity is 0" ); - - shortmessage(0x90, 69, 100); - - shortmessage(0x91, 69, 100); - shortmessage(0x91, 70, 101); - - getActiveVoicesStatusSnapshot(); - expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); - expect(load(activeVoicesShapshotLocation + 1)).toBe(69, "note is 69"); - expect(load(activeVoicesShapshotLocation + 2)).toBe(100, "velocity is 100" ); - - expect(load(activeVoicesShapshotLocation + 3)).toBe(1, "channel is 1"); - expect(load(activeVoicesShapshotLocation + 4)).toBe(69, "note is 69"); - expect(load(activeVoicesShapshotLocation + 5)).toBe(100, "velocity is 100" ); - - expect(load(activeVoicesShapshotLocation + 6)).toBe(1, "channel is 1"); - expect(load(activeVoicesShapshotLocation + 7)).toBe(70, "note is 70"); - expect(load(activeVoicesShapshotLocation + 8)).toBe(101, "velocity is 101" ); - - allNotesOff(); - fillSampleBuffer(); - fillSampleBuffer(); - - getActiveVoicesStatusSnapshot(); - expect(load(activeVoicesShapshotLocation)).toBe(0); - expect(load(activeVoicesShapshotLocation + 1)).toBe(0, "note 0 should be 0"); - expect(load(activeVoicesShapshotLocation + 2)).toBe(0, "vel 0 should be 0"); - expect(load(activeVoicesShapshotLocation + 3)).toBe(0, "ch 1 should be 0"); - expect(load(activeVoicesShapshotLocation + 4)).toBe(0, "note 1 should be 0"); - expect(load(activeVoicesShapshotLocation + 5)).toBe(0, "vel 1 should be 0"); - expect(load(activeVoicesShapshotLocation + 6)).toBe(0); - expect(load(activeVoicesShapshotLocation + 7)).toBe(0); - expect(load(activeVoicesShapshotLocation + 8)).toBe(0); - }); + shortmessage(0x90, 10, 127); + shortmessage(0xb0, 7, 127); + + fillSampleBuffer(); + + expect(samplebuffer[0]).toBeCloseTo(0.6 * NativeMathf.sqrt(1 / 2)); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1 / 2)); + + shortmessage(0x90, 10, 0); + shortmessage(0x90, 64, 127); + + fillSampleBuffer(); + fillSampleBuffer(); + + expect(samplebuffer[0]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1 / 2)); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.6 * NativeMathf.sqrt(1 / 2)); + + shortmessage(0x90, 65, 127); + + fillSampleBuffer(); + fillSampleBuffer(); + + expect(samplebuffer[0]).toBeCloseTo(-0.6 * NativeMathf.sqrt(1 / 2)); + expect(samplebuffer[sampleBufferFrames]).toBeCloseTo(0.6 * NativeMathf.sqrt(1 / 2)); + allNotesOff(); + while (activeVoices[0] != null) { + fillSampleBuffer(); + } + }); + it("should provide shapshot of active voices", () => { + midichannels[0] = new MidiChannel(1, (channel: MidiChannel) => new ShortReleaseMidiInstrument(channel)); + midichannels[1] = new MidiChannel(2, (channel: MidiChannel) => new ShortReleaseMidiInstrument(channel)); + + expect(activeVoices[0]).toBe(null, 'should be no active voices'); + shortmessage(0x90, 69, 100); + + const activeVoicesShapshotLocation = changetype(getActiveVoicesStatusSnapshot()); + expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); + expect(load(activeVoicesShapshotLocation + 1)).toBe(69, "note is 69"); + expect(load(activeVoicesShapshotLocation + 2)).toBe(100, "velocity is 100"); + + // note off + shortmessage(0x90, 69, 0); + fillSampleBuffer(); + fillSampleBuffer(); + getActiveVoicesStatusSnapshot(); + expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); + expect(load(activeVoicesShapshotLocation + 1)).toBe(0, "note is 0"); + expect(load(activeVoicesShapshotLocation + 2)).toBe(0, "velocity is 0"); + + shortmessage(0x90, 69, 100); + + shortmessage(0x91, 69, 100); + shortmessage(0x91, 70, 101); + + getActiveVoicesStatusSnapshot(); + expect(load(activeVoicesShapshotLocation)).toBe(0, "channel is 0"); + expect(load(activeVoicesShapshotLocation + 1)).toBe(69, "note is 69"); + expect(load(activeVoicesShapshotLocation + 2)).toBe(100, "velocity is 100"); + + expect(load(activeVoicesShapshotLocation + 3)).toBe(1, "channel is 1"); + expect(load(activeVoicesShapshotLocation + 4)).toBe(69, "note is 69"); + expect(load(activeVoicesShapshotLocation + 5)).toBe(100, "velocity is 100"); + + expect(load(activeVoicesShapshotLocation + 6)).toBe(1, "channel is 1"); + expect(load(activeVoicesShapshotLocation + 7)).toBe(70, "note is 70"); + expect(load(activeVoicesShapshotLocation + 8)).toBe(101, "velocity is 101"); + + allNotesOff(); + fillSampleBuffer(); + fillSampleBuffer(); + + getActiveVoicesStatusSnapshot(); + expect(load(activeVoicesShapshotLocation)).toBe(0); + expect(load(activeVoicesShapshotLocation + 1)).toBe(0, "note 0 should be 0"); + expect(load(activeVoicesShapshotLocation + 2)).toBe(0, "vel 0 should be 0"); + expect(load(activeVoicesShapshotLocation + 3)).toBe(0, "ch 1 should be 0"); + expect(load(activeVoicesShapshotLocation + 4)).toBe(0, "note 1 should be 0"); + expect(load(activeVoicesShapshotLocation + 5)).toBe(0, "vel 1 should be 0"); + expect(load(activeVoicesShapshotLocation + 6)).toBe(0); + expect(load(activeVoicesShapshotLocation + 7)).toBe(0); + expect(load(activeVoicesShapshotLocation + 8)).toBe(0); + }); }); \ No newline at end of file diff --git a/wasmaudioworklet/synth1/assembly/fx/monocompressor.ts b/wasmaudioworklet/synth1/assembly/fx/monocompressor.ts index 5f745560..b3b785de 100644 --- a/wasmaudioworklet/synth1/assembly/fx/monocompressor.ts +++ b/wasmaudioworklet/synth1/assembly/fx/monocompressor.ts @@ -9,9 +9,9 @@ export class MonoCompressor { releasesamplecount: f64; constructor(numsamples: usize) { + this.delay = new DelayLine(numsamples); this.delaybuffersamplecount = numsamples as f64; this.releasesamplecount = this.delaybuffersamplecount; - this.delay = new DelayLine(numsamples); } setRelaseSampleCount(releasesamplecount: f64): void { diff --git a/wasmaudioworklet/synth1/assembly/fx/tribandstereocompressor.ts b/wasmaudioworklet/synth1/assembly/fx/tribandstereocompressor.ts index de51fd02..3f1247ff 100644 --- a/wasmaudioworklet/synth1/assembly/fx/tribandstereocompressor.ts +++ b/wasmaudioworklet/synth1/assembly/fx/tribandstereocompressor.ts @@ -18,7 +18,7 @@ export class TriBandStereoCompressor { stereosignal: StereoSignal = new StereoSignal(); - constructor(compressor_delay: f32, low: f32, midlo: f32, midhi: f32, high: f32) { + constructor(low: f32, midlo: f32, midhi: f32, high: f32, compressor_delay: f32 = 0.2) { this.compressorLow = new StereoCompressor((SAMPLERATE * compressor_delay) as usize); this.compressorMid = new StereoCompressor((SAMPLERATE * compressor_delay) as usize); this.compressorHigh = new StereoCompressor((SAMPLERATE * compressor_delay) as usize); diff --git a/wasmaudioworklet/synth1/assembly/mixes/newyear.mix.ts b/wasmaudioworklet/synth1/assembly/mixes/newyear.mix.ts index b8d8fc7f..5a055954 100644 --- a/wasmaudioworklet/synth1/assembly/mixes/newyear.mix.ts +++ b/wasmaudioworklet/synth1/assembly/mixes/newyear.mix.ts @@ -24,7 +24,7 @@ import { TriBandStereoCompressor } from "../fx/tribandstereocompressor"; export const PATTERN_SIZE_SHIFT: usize = 4; export const BEATS_PER_PATTERN_SHIFT: usize = 2; -const tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500); +const tribandstereocompressor = new TriBandStereoCompressor(0.05, 25,150,1500,20000); const ENABLE_MULTIBAND_COMPRESSOR = true; const gain: f32 = 0.5; diff --git a/wasmaudioworklet/synth1/assemblyscriptcompiler.html b/wasmaudioworklet/synth1/assemblyscriptcompiler.html deleted file mode 100644 index be8d8012..00000000 --- a/wasmaudioworklet/synth1/assemblyscriptcompiler.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/wasmaudioworklet/synth1/browsercompilerwebworker.js b/wasmaudioworklet/synth1/browsercompilerwebworker.js index ce4606ac..a7d4c5e6 100644 --- a/wasmaudioworklet/synth1/browsercompilerwebworker.js +++ b/wasmaudioworklet/synth1/browsercompilerwebworker.js @@ -1,12 +1,4 @@ -/** - * Web worker to compile web assembly synth in the browser - */ - -self.require = (name) => self[name]; - -importScripts('https://cdn.jsdelivr.net/npm/binaryen@102.0.0-nightly.20211028/index.js'); -importScripts('https://cdn.jsdelivr.net/npm/assemblyscript@0.19.22/dist/assemblyscript.js'); -importScripts('https://cdn.jsdelivr.net/npm/assemblyscript@0.19.22/dist/asc.js'); +import asc from 'assemblyscript/asc'; let mix_source = 'mixes/newyear.mix.ts'; let index_source = 'index.ts'; @@ -14,7 +6,6 @@ const wasi_main_src = 'wasi_main.ts'; let assemblyscriptsynthsources; -const EXPORT_MODE_WASI_MAIN = 'wasimain'; const EXPORT_MODE_WASM_LIB = 'libmodule'; const EXPORT_MODE_MIDISYNTH_WASM_LIB = 'midilibmodule'; const EXPORT_MODE_MIDISYNTH_MULTIPART_WASM_LIB = 'midimultipartmodule'; @@ -27,7 +18,7 @@ const ready = new Promise(resolve => fetch('wasmsynthassemblyscriptsources.json' })); -function createWebAssemblySongData(song, mode = EXPORT_MODE_WASI_MAIN) { +function createWebAssemblySongData(song, mode = EXPORT_MODE_MIDISYNTH_MULTIPART_WASM_LIB) { if (mode === EXPORT_MODE_MIDISYNTH_WASM_LIB) { console.log('exporting midisynth WASM lib module'); assemblyscriptsynthsources['environment.ts'] = `export declare const SAMPLERATE: f32;` @@ -47,18 +38,17 @@ function createWebAssemblySongData(song, mode = EXPORT_MODE_WASI_MAIN) { `; } else if (mode === EXPORT_MODE_MIDISYNTH_MULTIPART_WASM_LIB) { console.log('exporting midisynth multipart WASM lib module'); - + assemblyscriptsynthsources['environment.ts'] = `export declare const SAMPLERATE: f32;` assemblyscriptsynthsources['midi/sequencer/midiparts.ts'] = ` import { MidiSequencerPart, MidiSequencerPartSchedule } from "./midisequencerpart"; - export const midiparts: MidiSequencerPart[] = [${song.map(part => 'new MidiSequencerPart(['+part.eventlist.join(',')+'])')}]; - export const midipartschedule: MidiSequencerPartSchedule[] = [${ - song.reduce((p, c, ndx) => p.concat(c.startTimes.map(t => - ({startTime: t, patternIndex: ndx}) - )), []).sort((a, b) => a.startTime - b.startTime) - .map(schedule => `new MidiSequencerPartSchedule(${schedule.patternIndex}, ${schedule.startTime})`) - .join(',') + export const midiparts: MidiSequencerPart[] = [${song.map(part => 'new MidiSequencerPart([' + part.eventlist.join(',') + '])')}]; + export const midipartschedule: MidiSequencerPartSchedule[] = [${song.reduce((p, c, ndx) => p.concat(c.startTimes.map(t => + ({ startTime: t, patternIndex: ndx }) + )), []).sort((a, b) => a.startTime - b.startTime) + .map(schedule => `new MidiSequencerPartSchedule(${schedule.patternIndex}, ${schedule.startTime})`) + .join(',') }]; `; assemblyscriptsynthsources[wasi_main_src] = ` @@ -76,9 +66,9 @@ function createWebAssemblySongData(song, mode = EXPORT_MODE_WASI_MAIN) { } } - songlength = song.instrumentPatternLists[0].length; + const songlength = song.instrumentPatternLists[0].length; - instrumentpatternslistsize = song.instrumentPatternLists.length * songlength; + const instrumentpatternslistsize = song.instrumentPatternLists.length * songlength; const instrumentpatternslist = new Array(instrumentpatternslistsize); for (let instrIndex = 0; @@ -91,37 +81,7 @@ function createWebAssemblySongData(song, mode = EXPORT_MODE_WASI_MAIN) { } } - if (mode === EXPORT_MODE_WASI_MAIN) { - console.log('exporting WASM module with WASI main'); - assemblyscriptsynthsources[wasi_main_src] = ` - import { fd_write, iovec} from 'bindings/wasi'; - import { allocateSampleBuffer, getTick, setBPM, setPatternsPtr, setInstrumentPatternListPtr, fillSampleBufferInterleaved } from './index'; - - const patterns: u8[] = [${patternsbuffer.map(v => '' + v).join(',')}]; - const instrumentspatternlists: u8[] = [${instrumentpatternslist.map(v => '' + v).join(',')}]; - - export function _start(): void { - const samplebuf = allocateSampleBuffer(128); - setPatternsPtr(load(changetype(patterns))); - setInstrumentPatternListPtr(load(changetype(instrumentspatternlists)), - ${songlength}, ${song.instrumentPatternLists.length}); - setBPM(${song.BPM}); - - const iov = new iovec(); - iov.buf = samplebuf; - iov.buf_len = 128 * 8; - - const written_ptr = changetype(new ArrayBuffer(sizeof())); - - let previousTick: f64; - do { - previousTick = getTick(); - fillSampleBufferInterleaved(); - fd_write(1, changetype(iov), 1, written_ptr); - } while(previousTick < getTick()) - } - `; - } else if (mode === EXPORT_MODE_WASM_LIB) { + if (mode === EXPORT_MODE_WASM_LIB) { console.log('exporting WASM lib module'); assemblyscriptsynthsources[wasi_main_src] = ` import { allocateSampleBuffer, getTick, setBPM, setPatternsPtr, setInstrumentPatternListPtr, fillSampleBufferInterleaved } from './index'; @@ -139,14 +99,14 @@ function createWebAssemblySongData(song, mode = EXPORT_MODE_WASI_MAIN) { } } -function compileAssemblyScript(sources, options, entrypoint) { +async function compileAssemblyScript(sources, options, entrypoint) { if (typeof sources === "string") sources = { "input.ts": sources }; const output = Object.create({ stdout: asc.createMemoryStream(), stderr: asc.createMemoryStream() }); var argv = [ - "--binaryFile", "binary", + "--outFile", "binary", "--textFile", "text", ]; Object.keys(options || {}).forEach(key => { @@ -154,7 +114,7 @@ function compileAssemblyScript(sources, options, entrypoint) { if (Array.isArray(val)) val.forEach(val => argv.push("--" + key, String(val))); else argv.push("--" + key, String(val)); }); - asc.main(entrypoint ? argv.concat(entrypoint) : argv.concat(Object.keys(sources)), { + await asc.main(entrypoint ? argv.concat(entrypoint) : argv.concat(Object.keys(sources)), { stdout: output.stdout, stderr: output.stderr, readFile: name => sources.hasOwnProperty(name) ? sources[name] : null, @@ -185,7 +145,7 @@ onmessage = async function (msg) { midisynthsource = midisynthsource.replace(/\n(export.*allocateAudioBuffer[^\n]+)/, '\n// $1'); } assemblyscriptsynthsources[index_source] = midisynthsource; - + } else { mix_source = 'mixes/newyear.mix.ts'; index_source = 'index.ts'; @@ -198,7 +158,7 @@ onmessage = async function (msg) { assemblyscriptsynthsources['environment.ts'] = `export const SAMPLERATE: f32 = 44100;` console.log(msg.data.song, msg.data.exportmode); createWebAssemblySongData(msg.data.song, msg.data.exportmode); - const { stderr, text, binary } = compileAssemblyScript(assemblyscriptsynthsources, + const { stderr, text, binary } = await compileAssemblyScript(assemblyscriptsynthsources, { "runtime": "stub", "optimizeLevel": 3, @@ -216,7 +176,7 @@ onmessage = async function (msg) { assemblyscriptsynthsources['environment.ts'] = `export const SAMPLERATE: f32 = ${samplerate};` assemblyscriptsynthsources[mix_source] = synthsource; - const { stderr, text, binary } = compileAssemblyScript(assemblyscriptsynthsources, + const { stderr, text, binary } = await compileAssemblyScript(assemblyscriptsynthsources, { "runtime": "stub", "optimizeLevel": 0, "shrinkLevel": 0 }, index_source); @@ -229,7 +189,7 @@ onmessage = async function (msg) { nochanges: true }); } - } catch(err) { + } catch (err) { this.postMessage({ error: err.message }); diff --git a/wasmaudioworklet/synth1/browsersynthcompiler.js b/wasmaudioworklet/synth1/browsersynthcompiler.js index 598a8dbd..21477e7f 100644 --- a/wasmaudioworklet/synth1/browsersynthcompiler.js +++ b/wasmaudioworklet/synth1/browsersynthcompiler.js @@ -1,14 +1,18 @@ -const synthcompilerworker = new Worker(new URL('browsercompilerwebworker.js', import.meta.url)); +const synthcompilerworker = new Promise(resolve => { + const worker = new Worker(new URL('moduleworkerloader.js', import.meta.url)); + worker.onmessage = () => resolve(worker); +}); export async function compileWebAssemblySynth(synthsource, song, samplerate, exportmode) { - synthcompilerworker.postMessage({ + const worker = await synthcompilerworker; + worker.postMessage({ synthsource: synthsource, samplerate: samplerate, song: song, exportmode: exportmode }); - const result = await new Promise((resolve) => synthcompilerworker.onmessage = (msg) => resolve(msg)); + const result = await new Promise((resolve) => worker.onmessage = (msg) => resolve(msg)); if (result.data.binary) { console.log('successfully compiled webassembly synth'); return result.data.binary; diff --git a/wasmaudioworklet/synth1/createbrowsertsbundle.js b/wasmaudioworklet/synth1/createbrowsertsbundle.js index 8084a726..5dbc46cf 100644 --- a/wasmaudioworklet/synth1/createbrowsertsbundle.js +++ b/wasmaudioworklet/synth1/createbrowsertsbundle.js @@ -1,7 +1,7 @@ /** * Create JSON bundle with sources of the webassembly synth to be compiled directly in the browser */ -const fs = require('fs'); +import fs from 'fs'; function walkSync(dir, filelist) { if (dir.indexOf('__tests__') > -1) { diff --git a/wasmaudioworklet/synth1/moduleworkerloader.js b/wasmaudioworklet/synth1/moduleworkerloader.js new file mode 100644 index 00000000..9c0e3e1d --- /dev/null +++ b/wasmaudioworklet/synth1/moduleworkerloader.js @@ -0,0 +1,18 @@ +importScripts('https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.wasm.min.js'); + + +const importMap = { + imports: { + "assemblyscript": "https://cdn.jsdelivr.net/npm/assemblyscript@0.27.14/dist/assemblyscript.js", + "assemblyscript/asc": "https://cdn.jsdelivr.net/npm/assemblyscript@0.27.14/dist/asc.js", + "binaryen": "https://cdn.jsdelivr.net/npm/binaryen@112.0.0-nightly.20230411/index.js", + "long": "https://cdn.jsdelivr.net/npm/long@5.2.1/index.js" + } +}; + + +importShim.addImportMap(importMap); +importShim('./browsercompilerwebworker.js').then((res) => { + console.log("module has been loaded"); + postMessage('ready'); +}).catch(e => setTimeout(() => { throw e; })); \ No newline at end of file diff --git a/wasmaudioworklet/synth1/package-lock.json b/wasmaudioworklet/synth1/package-lock.json deleted file mode 100644 index 2f7586dd..00000000 --- a/wasmaudioworklet/synth1/package-lock.json +++ /dev/null @@ -1,1214 +0,0 @@ -{ - "name": "synth1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "assemblyscript": "^0.19.22" - }, - "devDependencies": { - "@as-pect/cli": "^6.2.0" - } - }, - "node_modules/@as-covers/assembly": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@as-covers/assembly/-/assembly-0.2.0.tgz", - "integrity": "sha512-3Mo0pdLmaorJPqookq10LmJlWIpyXF/D9JWjphMtv5Th23yO537t6vMGi92uKe35d07k2xMOH/4WRHi04mlk6Q==", - "dev": true - }, - "node_modules/@as-covers/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@as-covers/core/-/core-0.2.1.tgz", - "integrity": "sha512-/GGTzPB850shvL6ZiidKDmIXSpBflYfzhYyipe7HA1eijBQKKluaLSRy/JLSN53f6kp3tLrCevPXN6HA2fyuBw==", - "dev": true, - "dependencies": { - "@as-covers/assembly": "^0.2.0", - "@as-covers/glue": "^0.2.0", - "@as-covers/transform": "^0.2.1" - } - }, - "node_modules/@as-covers/glue": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@as-covers/glue/-/glue-0.2.0.tgz", - "integrity": "sha512-oIRC3q5TA4zfNBv+UwNH10FKq1poAeRTrZUg5pmEcFNv2HpZfED30mb9fF0anNRbr7gmXrSY9iMsRSz6hkrmYQ==", - "dev": true, - "dependencies": { - "csv-stringify": "^5.6.2", - "table": "^6.7.1" - } - }, - "node_modules/@as-covers/transform": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@as-covers/transform/-/transform-0.2.1.tgz", - "integrity": "sha512-FutGj2yMIT2GOfqXrbnqSpeZ0eB5Bsnsg+BLnmqpEszthFhe/5/hKYmfNsiF2QBYZnqcIQ7dHw/z31+PlyUDug==", - "dev": true, - "dependencies": { - "line-column": "^1.0.2", - "visitor-as": "^0.6.0" - } - }, - "node_modules/@as-covers/transform/node_modules/assemblyscript": { - "version": "0.18.32", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.18.32.tgz", - "integrity": "sha512-Py6zremwGhO3nSoI/VxyVUzTZfNhTjzNzFDaUdG4JhPJHeG+FzVlEoNCrw4bE5nPc7F+P2DJ8tZQCqIt15ceKw==", - "dev": true, - "peer": true, - "dependencies": { - "binaryen": "100.0.0-nightly.20210413", - "long": "^4.0.0" - }, - "bin": { - "asc": "bin/asc", - "asinit": "bin/asinit" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/assemblyscript" - } - }, - "node_modules/@as-covers/transform/node_modules/binaryen": { - "version": "100.0.0-nightly.20210413", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-100.0.0-nightly.20210413.tgz", - "integrity": "sha512-EeGLIxQmJS0xnYl+SH34mNBqVMoixKd9nsE7S7z+CtS9A4eoWn3Qjav+XElgunUgXIHAI5yLnYT2TUGnLX2f1w==", - "dev": true, - "peer": true, - "bin": { - "wasm-opt": "bin/wasm-opt" - } - }, - "node_modules/@as-covers/transform/node_modules/visitor-as": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/visitor-as/-/visitor-as-0.6.0.tgz", - "integrity": "sha512-4WcnwCLXWjhNkwJj9gSqh46sdIv9CyIvnSuwr61OOfrGCtN2mKcW5KE828OeEr1rYjEy0Z/CIdPBJKJRLsUgDA==", - "dev": true, - "dependencies": { - "lodash.clonedeep": "^4.5.0", - "ts-mixer": "^5.4.1" - }, - "peerDependencies": { - "assemblyscript": "^0.18.31" - } - }, - "node_modules/@as-pect/assembly": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-6.2.0.tgz", - "integrity": "sha512-jYr1jdlr0xNndIhOpTMBaPHmlhD/c3PcVCzow8wIkzLxgcSOzhBkqjip+LWPWGsiFK1vsZ8ZUaMTeK3fcnXQhw==", - "dev": true, - "peerDependencies": { - "assemblyscript": "^0.19.3" - } - }, - "node_modules/@as-pect/cli": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@as-pect/cli/-/cli-6.2.4.tgz", - "integrity": "sha512-OSWehx90djGxgR4RxFZKixRyh9hsMLNM/6otayAljijEPjiD1zS2lxu3WCu/DiwSWIRJUYdGOUVzw15nqvdcZQ==", - "dev": true, - "dependencies": { - "@as-covers/core": "0.2.1", - "@as-pect/assembly": "^6.2.0", - "@as-pect/core": "^6.2.1", - "chalk": "^4.1.1", - "glob": "^7.1.7" - }, - "bin": { - "asp": "bin/asp", - "aspect": "bin/asp" - }, - "optionalDependencies": { - "@as-pect/csv-reporter": "^6.2.1", - "@as-pect/json-reporter": "^6.2.1" - }, - "peerDependencies": { - "assemblyscript": "^0.19.3" - } - }, - "node_modules/@as-pect/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-6.2.1.tgz", - "integrity": "sha512-JnvUb55OhGP7CYUnYtsLXttUb+FGv+6kEN9NleTbIMvU73NFJzyTCGjoZuayPNpfiUzOF96j91XuMHuinJ8BAg==", - "dev": true, - "dependencies": { - "@as-pect/assembly": "^6.2.0", - "@as-pect/snapshots": "^6.2.1", - "chalk": "^4.1.1", - "long": "^4.0.0" - }, - "peerDependencies": { - "assemblyscript": "^0.19.3" - } - }, - "node_modules/@as-pect/csv-reporter": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/csv-reporter/-/csv-reporter-6.2.1.tgz", - "integrity": "sha512-jy8ka8dEP4UY/pK/OIjHFUqs4j2Hvw3r6no6XfX1AkOd9CRLlt/JIDddlzwEqCGEfF83GSBQfQ1At86FkE7RtA==", - "dev": true, - "optional": true, - "dependencies": { - "@as-pect/core": "^6.2.1" - } - }, - "node_modules/@as-pect/json-reporter": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/json-reporter/-/json-reporter-6.2.1.tgz", - "integrity": "sha512-vsTYOiqB42+WPpec0M3apm9P2SjstUe6MfXepDvVIu2DCZzt1rkEuIIXro13LLQCnOzwXgHO/00sn+uPEjsmSQ==", - "dev": true, - "optional": true, - "dependencies": { - "@as-pect/core": "^6.2.1" - } - }, - "node_modules/@as-pect/snapshots": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/snapshots/-/snapshots-6.2.1.tgz", - "integrity": "sha512-a6xcOUaXMrR3f1n6vgGxMJxUUd6MIVm5vlQ3nZ2hDEMz1PFyEQ04OvGqqUIYHhKAeXIvD3iwz02cI8Wh9lDK7Q==", - "dev": true, - "dependencies": { - "diff": "^5.0.0", - "nearley": "^2.20.1" - } - }, - "node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/assemblyscript": { - "version": "0.19.22", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.19.22.tgz", - "integrity": "sha512-+Rclbx0+BI3qAe9fjc8XGbSUDaayTtjINnD19I4MmfpT2R43c9YTQERP36676shkPxb1fisDFZeSTL65Da8Q2g==", - "dependencies": { - "binaryen": "102.0.0-nightly.20211028", - "long": "^5.2.0", - "source-map-support": "^0.5.20" - }, - "bin": { - "asc": "bin/asc", - "asinit": "bin/asinit" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/assemblyscript" - } - }, - "node_modules/assemblyscript/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "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/binaryen": { - "version": "102.0.0-nightly.20211028", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz", - "integrity": "sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w==", - "bin": { - "wasm-opt": "bin/wasm-opt" - } - }, - "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/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==" - }, - "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/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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", - "dev": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "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/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/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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/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/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", - "dev": true, - "dependencies": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true - }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ts-mixer": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-5.4.1.tgz", - "integrity": "sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - }, - "dependencies": { - "@as-covers/assembly": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@as-covers/assembly/-/assembly-0.2.0.tgz", - "integrity": "sha512-3Mo0pdLmaorJPqookq10LmJlWIpyXF/D9JWjphMtv5Th23yO537t6vMGi92uKe35d07k2xMOH/4WRHi04mlk6Q==", - "dev": true - }, - "@as-covers/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@as-covers/core/-/core-0.2.1.tgz", - "integrity": "sha512-/GGTzPB850shvL6ZiidKDmIXSpBflYfzhYyipe7HA1eijBQKKluaLSRy/JLSN53f6kp3tLrCevPXN6HA2fyuBw==", - "dev": true, - "requires": { - "@as-covers/assembly": "^0.2.0", - "@as-covers/glue": "^0.2.0", - "@as-covers/transform": "^0.2.1" - } - }, - "@as-covers/glue": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@as-covers/glue/-/glue-0.2.0.tgz", - "integrity": "sha512-oIRC3q5TA4zfNBv+UwNH10FKq1poAeRTrZUg5pmEcFNv2HpZfED30mb9fF0anNRbr7gmXrSY9iMsRSz6hkrmYQ==", - "dev": true, - "requires": { - "csv-stringify": "^5.6.2", - "table": "^6.7.1" - } - }, - "@as-covers/transform": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@as-covers/transform/-/transform-0.2.1.tgz", - "integrity": "sha512-FutGj2yMIT2GOfqXrbnqSpeZ0eB5Bsnsg+BLnmqpEszthFhe/5/hKYmfNsiF2QBYZnqcIQ7dHw/z31+PlyUDug==", - "dev": true, - "requires": { - "line-column": "^1.0.2", - "visitor-as": "^0.6.0" - }, - "dependencies": { - "assemblyscript": { - "version": "0.18.32", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.18.32.tgz", - "integrity": "sha512-Py6zremwGhO3nSoI/VxyVUzTZfNhTjzNzFDaUdG4JhPJHeG+FzVlEoNCrw4bE5nPc7F+P2DJ8tZQCqIt15ceKw==", - "dev": true, - "peer": true, - "requires": { - "binaryen": "100.0.0-nightly.20210413", - "long": "^4.0.0" - } - }, - "binaryen": { - "version": "100.0.0-nightly.20210413", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-100.0.0-nightly.20210413.tgz", - "integrity": "sha512-EeGLIxQmJS0xnYl+SH34mNBqVMoixKd9nsE7S7z+CtS9A4eoWn3Qjav+XElgunUgXIHAI5yLnYT2TUGnLX2f1w==", - "dev": true, - "peer": true - }, - "visitor-as": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/visitor-as/-/visitor-as-0.6.0.tgz", - "integrity": "sha512-4WcnwCLXWjhNkwJj9gSqh46sdIv9CyIvnSuwr61OOfrGCtN2mKcW5KE828OeEr1rYjEy0Z/CIdPBJKJRLsUgDA==", - "dev": true, - "requires": { - "lodash.clonedeep": "^4.5.0", - "ts-mixer": "^5.4.1" - } - } - } - }, - "@as-pect/assembly": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-6.2.0.tgz", - "integrity": "sha512-jYr1jdlr0xNndIhOpTMBaPHmlhD/c3PcVCzow8wIkzLxgcSOzhBkqjip+LWPWGsiFK1vsZ8ZUaMTeK3fcnXQhw==", - "dev": true, - "requires": {} - }, - "@as-pect/cli": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@as-pect/cli/-/cli-6.2.4.tgz", - "integrity": "sha512-OSWehx90djGxgR4RxFZKixRyh9hsMLNM/6otayAljijEPjiD1zS2lxu3WCu/DiwSWIRJUYdGOUVzw15nqvdcZQ==", - "dev": true, - "requires": { - "@as-covers/core": "0.2.1", - "@as-pect/assembly": "^6.2.0", - "@as-pect/core": "^6.2.1", - "@as-pect/csv-reporter": "^6.2.1", - "@as-pect/json-reporter": "^6.2.1", - "chalk": "^4.1.1", - "glob": "^7.1.7" - } - }, - "@as-pect/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-6.2.1.tgz", - "integrity": "sha512-JnvUb55OhGP7CYUnYtsLXttUb+FGv+6kEN9NleTbIMvU73NFJzyTCGjoZuayPNpfiUzOF96j91XuMHuinJ8BAg==", - "dev": true, - "requires": { - "@as-pect/assembly": "^6.2.0", - "@as-pect/snapshots": "^6.2.1", - "chalk": "^4.1.1", - "long": "^4.0.0" - } - }, - "@as-pect/csv-reporter": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/csv-reporter/-/csv-reporter-6.2.1.tgz", - "integrity": "sha512-jy8ka8dEP4UY/pK/OIjHFUqs4j2Hvw3r6no6XfX1AkOd9CRLlt/JIDddlzwEqCGEfF83GSBQfQ1At86FkE7RtA==", - "dev": true, - "optional": true, - "requires": { - "@as-pect/core": "^6.2.1" - } - }, - "@as-pect/json-reporter": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/json-reporter/-/json-reporter-6.2.1.tgz", - "integrity": "sha512-vsTYOiqB42+WPpec0M3apm9P2SjstUe6MfXepDvVIu2DCZzt1rkEuIIXro13LLQCnOzwXgHO/00sn+uPEjsmSQ==", - "dev": true, - "optional": true, - "requires": { - "@as-pect/core": "^6.2.1" - } - }, - "@as-pect/snapshots": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@as-pect/snapshots/-/snapshots-6.2.1.tgz", - "integrity": "sha512-a6xcOUaXMrR3f1n6vgGxMJxUUd6MIVm5vlQ3nZ2hDEMz1PFyEQ04OvGqqUIYHhKAeXIvD3iwz02cI8Wh9lDK7Q==", - "dev": true, - "requires": { - "diff": "^5.0.0", - "nearley": "^2.20.1" - } - }, - "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "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 - }, - "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, - "requires": { - "color-convert": "^2.0.1" - } - }, - "assemblyscript": { - "version": "0.19.22", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.19.22.tgz", - "integrity": "sha512-+Rclbx0+BI3qAe9fjc8XGbSUDaayTtjINnD19I4MmfpT2R43c9YTQERP36676shkPxb1fisDFZeSTL65Da8Q2g==", - "requires": { - "binaryen": "102.0.0-nightly.20211028", - "long": "^5.2.0", - "source-map-support": "^0.5.20" - }, - "dependencies": { - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - } - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "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 - }, - "binaryen": { - "version": "102.0.0-nightly.20211028", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz", - "integrity": "sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w==" - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "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 - }, - "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 - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "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 - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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 - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", - "dev": true, - "requires": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true - }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "ts-mixer": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-5.4.1.tgz", - "integrity": "sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } -} diff --git a/wasmaudioworklet/synth1/package.json b/wasmaudioworklet/synth1/package.json deleted file mode 100644 index 8663d153..00000000 --- a/wasmaudioworklet/synth1/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "scripts": { - "asbuild": "asc --runtime stub assembly/index.ts -b build/index.wasm -Oz", - "fastbuild": "asc --runtime stub assembly/index.ts -b build/index.wasm -t build/index.wat", - "createbrowsersourcebundle": "node createbrowsertsbundle.js", - "test": "asp --verbose", - "test:ci": "asp --summary" - }, - "dependencies": { - "assemblyscript": "^0.19.22" - }, - "devDependencies": { - "@as-pect/cli": "^6.2.0" - } -} diff --git a/wasmaudioworklet/synth1/wasmsynthassemblyscriptsources.json b/wasmaudioworklet/synth1/wasmsynthassemblyscriptsources.json index 48683d3e..6862fb4e 100644 --- a/wasmaudioworklet/synth1/wasmsynthassemblyscriptsources.json +++ b/wasmaudioworklet/synth1/wasmsynthassemblyscriptsources.json @@ -1 +1 @@ -{"common/mixcommon.ts":"export function createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n","environment.ts":"// earlier this used to externally declared\nexport const SAMPLERATE: f32 = 44100;","fx/allpass.ts":"import { DelayLine } from \"./delayline\";\n\nexport class AllPass {\n readonly delay_line: DelayLine;\n\n constructor(delay_length: usize) {\n this.delay_line = new DelayLine(delay_length);\n }\n\n tick(input: f32): f32 {\n let delayed: f32 = this.delay_line.read();\n let output: f32 = -input + delayed;\n\n // in the original version of freeverb this is a member which is never modified\n const feedback: f32 = 0.5;\n\n this.delay_line\n .write_and_advance(input + delayed * feedback);\n\n return output;\n }\n}\n\nexport class AllPassFloat {\n coeff: f32;\n previousinput: f32;\n previousoutput: f32;\n\n setDelta(delta: f32): void {\n this.coeff = (1 - delta) / (1 + delta);\n }\n\n clearBuffers(): void {\n this.previousinput = 0;\n this.previousoutput = 0;\n }\n\n process(input: f32): f32 {\n const output = this.coeff * (input\n - this.previousoutput)\n + this.previousinput;\n this.previousoutput = output;\n this.previousinput = input;\n return output;\n }\n}\n","fx/bandpass.ts":"import { BiQuadFilter, FilterType, Q_BUTTERWORTH } from \"../synth/biquad\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class BandPass {\n lpfilter: BiQuadFilter = new BiQuadFilter();\n hpfilter: BiQuadFilter = new BiQuadFilter();\n \n constructor(lowfreq: f32, hifreq: f32) {\n this.update_frequencies(lowfreq, hifreq);\n }\n\n clearBuffers(): void {\n this.hpfilter.clearBuffers();\n this.lpfilter.clearBuffers();\n }\n\n update_frequencies(lowfreq: f32, hifreq: f32): void {\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH);\n }\n\n process(sample: f32): f32 {\n return this.lpfilter.process(this.hpfilter.process(sample)); \n }\n}","fx/comb.ts":"import { DelayLine } from \"./delayline\";\n\nexport class Comb {\n readonly delay_line: DelayLine;\n feedback: f32;\n filter_state: f32;\n dampening: f32;\n dampening_inverse: f32;\n\n constructor(delay_length: usize) { \n this.delay_line = new DelayLine(delay_length);\n this.feedback= 0.5;\n this.filter_state = 0.0;\n this.dampening = 0.5;\n this.dampening_inverse = 0.5;\n \n }\n\n set_dampening(value: f32): void{\n this.dampening = value;\n this.dampening_inverse = 1.0 - value;\n }\n\n set_feedback(value: f32): void {\n this.feedback = value;\n }\n\n tick(input: f32): f32 {\n let output = this.delay_line.read();\n\n this.filter_state =\n output * this.dampening_inverse + this.filter_state * this.dampening;\n\n this.delay_line\n .write_and_advance(input + this.filter_state * this.feedback);\n\n return output;\n }\n}\n","fx/delayline.ts":"import { AllPassFloat } from \"./allpass\";\n\nexport class DelayLine {\n readonly bufferPointer: usize;\n index: usize = 0;\n length: usize = 0;\n currentPeak: f32 = 0;\n currentPeakSamplesToLive: usize = 0;\n\n private numsamplesf64: f64 = 0\n private meanSquared: f64 = 0;\n\n constructor(private numsamples: usize) {\n this.numsamplesf64 = numsamples as f64;\n this.length = numsamples * 4 as usize;\n this.bufferPointer = __new(this.length, 0);\n }\n\n read(): f32 {\n return load(this.bufferPointer + this.index);\n }\n\n calculateRMS(): f32 {\n let ndx = this.index;\n let bufferPointer = this.bufferPointer;\n\n let leastrecentsample: f64 = load(bufferPointer + ndx) as f64;\n if (ndx === 0) {\n ndx = this.length;\n }\n ndx -= 4;\n let mostrecentsample: f64 = load(bufferPointer + ndx) as f64;\n\n let meanSquared: f64 = this.meanSquared;\n let numSamples: f64 = this.numsamplesf64;\n meanSquared += ((mostrecentsample * mostrecentsample) / numSamples);\n meanSquared -= ((leastrecentsample * leastrecentsample) / numSamples);\n this.meanSquared = meanSquared;\n\n return Math.sqrt(meanSquared) as f32;\n }\n\n getPeakValue(): f32 {\n let ndx = this.index;\n if (ndx === 0) {\n ndx = this.length;\n }\n ndx -= 4;\n let mostrecentsample: f32 = load(this.bufferPointer + ndx) as f32;\n if (mostrecentsample < 0) {\n mostrecentsample = -mostrecentsample;\n }\n if (mostrecentsample > this.currentPeak) {\n this.currentPeak = mostrecentsample;\n this.currentPeakSamplesToLive = this.numsamples;\n } else if (this.currentPeakSamplesToLive > 0) {\n this.currentPeakSamplesToLive--;\n }\n if (this.currentPeakSamplesToLive == 0) {\n this.currentPeak = this.calculatePeakValue();\n }\n return this.currentPeak;\n }\n\n private calculatePeakValue(): f32 {\n let peak: f32 = 0.0;\n for (let i: usize = 0; i < this.length; i += 4) {\n let value = load(this.bufferPointer + i);\n if (value < 0) {\n value = -value;\n }\n if (value > peak) {\n peak = value;\n this.currentPeakSamplesToLive = ((i >= this.index) ? (i - this.index) : ((this.length) - this.index) + i) >> 2;\n }\n }\n return peak;\n }\n\n write_and_advance(value: f32): void {\n store(this.bufferPointer + this.index, value);\n\n if (this.index === this.length - 4) {\n this.index = 0;\n } else {\n this.index += 4;\n }\n }\n}\n\nexport class DelayLineFloat {\n buffer: StaticArray;\n frame: f64 = 0;\n numframes: f64 = 1;\n previous: f32;\n allpass: AllPassFloat = new AllPassFloat();\n\n constructor(private buffersizeframes: i32) {\n this.buffer = new StaticArray(buffersizeframes);\n }\n\n read(): f32 {\n const index = this.frame as i32 % this.buffer.length;\n return this.allpass.process(this.buffer[index]);\n }\n\n reset(): void {\n this.allpass.previousoutput = 0;\n this.allpass.previousinput = 0;\n for (let n = 0; n < this.numframes; n++) {\n this.buffer[n] = 0;\n }\n this.frame = 0;\n }\n\n setNumFramesAndClear(numframes: f64): void {\n this.numframes = Math.floor(numframes);\n this.allpass.setDelta((numframes - this.numframes) as f32);\n this.reset();\n }\n\n write_and_advance(value: f32): void {\n const index = ((this.frame++) + this.numframes) as i32 % this.buffer.length;\n this.buffer[index] = value;\n }\n}\n","fx/eqband.ts":"import { BiQuadFilter, FilterType, Q_BUTTERWORTH } from \"../synth/biquad\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class EQBand {\n lpfilter: BiQuadFilter = new BiQuadFilter();\n hpfilter: BiQuadFilter = new BiQuadFilter();\n lpfilter2: BiQuadFilter = new BiQuadFilter();\n hpfilter2: BiQuadFilter = new BiQuadFilter();\n \n \n constructor(lowfreq: f32, hifreq: f32) {\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.lpfilter2.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH);\n this.hpfilter2.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH); \n }\n\n process(left: f32): f32 {\n return this.lpfilter2.process(this.lpfilter.process(this.hpfilter2.process(this.hpfilter.process(left)))); \n }\n}","fx/freeverb.ts":"\n/**\n * Freeverb implementation taken from Rust implementation here:\n * https://github.com/irh/freeverb-rs/blob/master/freeverb/src/freeverb.rs\n */\nimport { Comb } from './comb';\nimport { AllPass } from './allpass';\nimport { SAMPLERATE as SAMPLERATE_f32 } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\n\nlet SAMPLERATE = SAMPLERATE_f32 as usize;\nconst FIXED_GAIN: f32 = 0.015;\n\nconst SCALE_WET: f32 = 3.0;\nconst SCALE_DAMPENING: f32 = 0.4;\n\nconst SCALE_ROOM: f32 = 0.28;\nconst OFFSET_ROOM: f32 = 0.7;\n\nconst STEREO_SPREAD: usize = 23;\n\nconst COMB_TUNING_L1: usize = 1116;\nconst COMB_TUNING_R1: usize = 1116 + STEREO_SPREAD;\nconst COMB_TUNING_L2: usize = 1188;\nconst COMB_TUNING_R2: usize = 1188 + STEREO_SPREAD;\nconst COMB_TUNING_L3: usize = 1277;\nconst COMB_TUNING_R3: usize = 1277 + STEREO_SPREAD;\nconst COMB_TUNING_L4: usize = 1356;\nconst COMB_TUNING_R4: usize = 1356 + STEREO_SPREAD;\nconst COMB_TUNING_L5: usize = 1422;\nconst COMB_TUNING_R5: usize = 1422 + STEREO_SPREAD;\nconst COMB_TUNING_L6: usize = 1491;\nconst COMB_TUNING_R6: usize = 1491 + STEREO_SPREAD;\nconst COMB_TUNING_L7: usize = 1557;\nconst COMB_TUNING_R7: usize = 1557 + STEREO_SPREAD;\nconst COMB_TUNING_L8: usize = 1617;\nconst COMB_TUNING_R8: usize = 1617 + STEREO_SPREAD;\n\nconst ALLPASS_TUNING_L1: usize = 556;\nconst ALLPASS_TUNING_R1: usize = 556 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L2: usize = 441;\nconst ALLPASS_TUNING_R2: usize = 441 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L3: usize = 341;\nconst ALLPASS_TUNING_R3: usize = 341 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L4: usize = 225;\nconst ALLPASS_TUNING_R4: usize = 225 + STEREO_SPREAD;\n\nfunction adjust_length(length: usize, sr: usize): usize {\n return ((length as f32) * (sr as f32) / SAMPLERATE_f32) as usize;\n}\n\nexport class Freeverb { \n readonly COMB1_L: Comb = new Comb(adjust_length(COMB_TUNING_L1, SAMPLERATE));\n readonly COMB1_R: Comb = new Comb(adjust_length(COMB_TUNING_L1, SAMPLERATE));\n readonly COMB2_L: Comb = new Comb(adjust_length(COMB_TUNING_R2, SAMPLERATE));\n readonly COMB2_R: Comb = new Comb(adjust_length(COMB_TUNING_L2, SAMPLERATE));\n readonly COMB3_L: Comb = new Comb(adjust_length(COMB_TUNING_R3, SAMPLERATE));\n readonly COMB3_R: Comb = new Comb(adjust_length(COMB_TUNING_L3, SAMPLERATE));\n readonly COMB4_L: Comb = new Comb(adjust_length(COMB_TUNING_R4, SAMPLERATE));\n readonly COMB4_R: Comb = new Comb(adjust_length(COMB_TUNING_L4, SAMPLERATE));\n readonly COMB5_L: Comb = new Comb(adjust_length(COMB_TUNING_R5, SAMPLERATE));\n readonly COMB5_R: Comb = new Comb(adjust_length(COMB_TUNING_L5, SAMPLERATE));\n readonly COMB6_L: Comb = new Comb(adjust_length(COMB_TUNING_R6, SAMPLERATE));\n readonly COMB6_R: Comb = new Comb(adjust_length(COMB_TUNING_L6, SAMPLERATE));\n readonly COMB7_L: Comb = new Comb(adjust_length(COMB_TUNING_R7, SAMPLERATE));\n readonly COMB7_R: Comb = new Comb(adjust_length(COMB_TUNING_L7, SAMPLERATE));\n readonly COMB8_L: Comb = new Comb(adjust_length(COMB_TUNING_R8, SAMPLERATE));\n readonly COMB8_R: Comb = new Comb(adjust_length(COMB_TUNING_L8, SAMPLERATE));\n\n readonly ALL1_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L1, SAMPLERATE));\n readonly ALL1_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R1, SAMPLERATE));\n readonly ALL2_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L2, SAMPLERATE));\n readonly ALL2_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R2, SAMPLERATE));\n readonly ALL3_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L3, SAMPLERATE));\n readonly ALL3_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R3, SAMPLERATE));\n readonly ALL4_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L4, SAMPLERATE));\n readonly ALL4_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R4, SAMPLERATE));\n\n wet_gain_left: f32 = 0;\n wet_gain_right: f32 = 0;\n \n wet: f32 = 0;\n width: f32 = 0;\n dry: f32 = 0;\n input_gain: f32 = 0;\n dampening: f32 = 0;\n room_size: f32 = 0;\n frozen: bool = 0;\n\n constructor() {\n this.set_wet(1.0);\n this.set_width(0.5);\n this.set_dampening(0.5);\n this.set_room_size(0.7);\n this.set_frozen(false); \n }\n\n tick(signal: StereoSignal): void {\n let input_mixed = (signal.left + signal.right) * FIXED_GAIN * this.input_gain;\n\n let leftoutput:f32 = 0;\n let rightoutput:f32 = 0;\n\n leftoutput += this.COMB1_L.tick(input_mixed);\n rightoutput+= this.COMB1_R.tick(input_mixed);\n leftoutput += this.COMB2_L.tick(input_mixed);\n rightoutput+= this.COMB2_R.tick(input_mixed);\n leftoutput += this.COMB3_L.tick(input_mixed);\n rightoutput+= this.COMB3_R.tick(input_mixed);\n leftoutput += this.COMB4_L.tick(input_mixed);\n rightoutput+= this.COMB4_R.tick(input_mixed);\n leftoutput += this.COMB5_L.tick(input_mixed);\n rightoutput+= this.COMB5_R.tick(input_mixed);\n leftoutput += this.COMB6_L.tick(input_mixed);\n rightoutput+= this.COMB6_R.tick(input_mixed);\n leftoutput += this.COMB7_L.tick(input_mixed);\n rightoutput+= this.COMB7_R.tick(input_mixed);\n leftoutput += this.COMB8_L.tick(input_mixed);\n rightoutput+= this.COMB8_R.tick(input_mixed);\n \n leftoutput= this.ALL1_L.tick(leftoutput);\n rightoutput = this.ALL1_R.tick(rightoutput);\n leftoutput= this.ALL2_L.tick(leftoutput);\n rightoutput = this.ALL2_R.tick(rightoutput);\n leftoutput= this.ALL3_L.tick(leftoutput);\n rightoutput = this.ALL3_R.tick(rightoutput);\n leftoutput= this.ALL4_L.tick(leftoutput);\n rightoutput = this.ALL4_R.tick(rightoutput);\n\n signal.left = leftoutput * this.wet_gain_left +\n rightoutput * this.wet_gain_right +\n signal.left * this.dry;\n signal.right = rightoutput * this.wet_gain_left +\n leftoutput * this.wet_gain_right +\n signal.right * this.dry; \n }\n\n update_combs(): void {\n let feedback: f32;\n let dampening: f32;\n\n if(this.frozen) {\n feedback =1.0;\n dampening = 0.0;\n } else {\n feedback = this.room_size;\n dampening = this.dampening;\n }\n \n this.COMB1_L.set_feedback(feedback);\n this.COMB1_R.set_feedback(feedback);\n this.COMB1_L.set_dampening(dampening);\n this.COMB1_R.set_dampening(dampening);\n this.COMB2_L.set_feedback(feedback);\n this.COMB2_R.set_feedback(feedback);\n this.COMB2_L.set_dampening(dampening);\n this.COMB2_R.set_dampening(dampening);\n this.COMB3_L.set_feedback(feedback);\n this.COMB3_R.set_feedback(feedback);\n this.COMB3_L.set_dampening(dampening);\n this.COMB3_R.set_dampening(dampening);\n this.COMB4_L.set_feedback(feedback);\n this.COMB4_R.set_feedback(feedback);\n this.COMB4_L.set_dampening(dampening);\n this.COMB4_R.set_dampening(dampening);\n this.COMB5_L.set_feedback(feedback);\n this.COMB5_R.set_feedback(feedback);\n this.COMB5_L.set_dampening(dampening);\n this.COMB5_R.set_dampening(dampening);\n this.COMB6_L.set_feedback(feedback);\n this.COMB6_R.set_feedback(feedback);\n this.COMB6_L.set_dampening(dampening);\n this.COMB6_R.set_dampening(dampening);\n this.COMB7_L.set_feedback(feedback);\n this.COMB7_R.set_feedback(feedback);\n this.COMB7_L.set_dampening(dampening);\n this.COMB7_R.set_dampening(dampening);\n this.COMB8_L.set_feedback(feedback);\n this.COMB8_R.set_feedback(feedback);\n this.COMB8_L.set_dampening(dampening);\n this.COMB8_R.set_dampening(dampening);\n }\n\n set_dampening(value: f32): void {\n this.dampening = value * SCALE_DAMPENING;\n this.update_combs();\n }\n\n set_freeze(frozen: bool): void {\n this.frozen = frozen;\n this.update_combs();\n }\n\n set_wet(value: f32): void {\n this.wet = value * SCALE_WET;\n this.update_wet_gains();\n }\n\n set_width(value: f32): void {\n this.width = value;\n this.update_wet_gains();\n }\n\n update_wet_gains(): void {\n this.wet_gain_left = this.wet * (this.width / 2.0 + 0.5);\n this.wet_gain_right = this.wet * ((1.0 - this.width) / 2.0); \n }\n\n set_frozen(frozen: bool): void {\n this.frozen = frozen;\n this.input_gain = frozen ? 0.0 : 1.0;\n this.update_combs();\n }\n\n set_room_size(value: f32): void {\n this.room_size = value * SCALE_ROOM + OFFSET_ROOM;\n this.update_combs();\n }\n\n set_dry(value: f32): void {\n this.dry = value;\n }\n}\n","fx/limiter.ts":"import { SAMPLERATE } from '../environment';\n\nexport class Limiter {\n attack: f32 = 0;\n release: f32 = 0;\n envelope: f32 = 0;\n\n constructor(attackMs: f32, releaseMs: f32) {\n this.attack = Mathf.pow(0.01, 1.0 / (attackMs * SAMPLERATE * 0.001));\n this.release = Mathf.pow(0.01, 1.0 / (releaseMs * SAMPLERATE * 0.001));\n }\n\n process(signal: f32): f32 {\n const v = Mathf.abs(signal);\n if (v > this.envelope) {\n this.envelope = this.attack * (this.envelope - v) + v;\n } else {\n this.envelope = this.release * (this.envelope - v) + v;\n }\n\n if (this.envelope > 1) {\n signal /= this.envelope;\n }\n return signal;\n }\n}\n","fx/midsideprocessor.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nexport class MidSideProcessor {\n signal: StereoSignal = new StereoSignal();\n\n constructor(private side_level: f32) {\n\n }\n\n process(left: f32, right: f32): void {\n // Mid-side processing\n let mid: f32 = (left + right) / 2.0;\n let side: f32 = (left - right) / 2.0;\n\n side *= this.side_level;\n this.signal.left = mid + side;\n this.signal.right = mid - side;\n }\n}","fx/monocompressor.ts":"import { DelayLine } from \"./delayline\";\nexport class MonoCompressor {\n delay: DelayLine;\n\n gain: f64 = 1.0;\n targetgain: f64 = 1.0;\n gainChangePerSample: f64 = 0;\n delaybuffersamplecount: f64;\n releasesamplecount: f64;\n\n constructor(numsamples: usize) {\n this.delaybuffersamplecount = numsamples as f64;\n this.releasesamplecount = this.delaybuffersamplecount;\n this.delay = new DelayLine(numsamples);\n }\n\n setRelaseSampleCount(releasesamplecount: f64): void {\n this.releasesamplecount = releasesamplecount;\n }\n\n process(signal: f32, threshold: f32, makeupgain: f32): f32 {\n this.delay.write_and_advance(signal);\n\n let currentTargetGain: f64 = this.targetgain;\n let currentGain: f64 = this.gain;\n\n let peak: f64 = this.delay.getPeakValue();\n\n if(peak > threshold) {\n let targetGain = threshold / peak;\n\n if(targetGain < currentTargetGain) {\n currentTargetGain = targetGain;\n this.targetgain = targetGain;\n\n let newGainChangePerSample = (currentTargetGain - currentGain) / this.delaybuffersamplecount;\n \n if(newGainChangePerSample < this.gainChangePerSample) {\n this.gainChangePerSample = newGainChangePerSample;\n }\n } \n } else if(currentTargetGain < 1.0) {\n currentTargetGain = 1.0;\n this.targetgain = currentTargetGain; \n this.gainChangePerSample = (currentTargetGain - currentGain) / this.releasesamplecount;\n }\n\n let gainChangePerSample: f64 = this.gainChangePerSample;\n if((gainChangePerSample < 0 && currentTargetGain < currentGain) ||\n (gainChangePerSample > 0 && currentTargetGain > currentGain)) {\n currentGain += gainChangePerSample;\n this.gain = currentGain;\n }\n\n return this.delay.read() * currentGain as f32 * makeupgain;\n }\n}\n\nexport class StereoCompressor {\n leftCompressor: MonoCompressor;\n rightCompressor: MonoCompressor;\n\n resultSignal: StereoSignal = new StereoSignal();\n \n constructor(numsamples: usize) {\n this.leftCompressor = new MonoCompressor(numsamples);\n this.rightCompressor = new MonoCompressor(numsamples);\n }\n\n process(left: f32, right: f32, threshold: f32, makeupgain: f32): void {\n this.resultSignal.left = this.leftCompressor.process(left, threshold, makeupgain);\n \tthis.resultSignal.right = this.rightCompressor.process(right, threshold, makeupgain); \n }\n}\n","fx/multibandeq.ts":"import { EQBand } from './eqband';\nexport class MultiBandEQ {\n bands: StaticArray;\n\n constructor(freqs: f32[]) {\n this.bands = new StaticArray(freqs.length - 1);\n for (let n = 1; n < freqs.length; n++) {\n this.bands[n - 1] = new EQBand(freqs[n - 1], freqs[n]);\n }\n }\n\n\n process(signal: f32, levels: f32[]): f32 {\n let ret: f32 = 0;\n const numbands = this.bands.length;\n for (let n = 0; n < numbands; n++) {\n ret += this.bands[n].process(signal) * levels[n];\n }\n return ret;\n }\n}\n","fx/stereocompressor.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\nimport { MonoCompressor } from \"./monocompressor\";\n\nexport class StereoCompressor {\n leftCompressor: MonoCompressor;\n rightCompressor: MonoCompressor;\n\n resultSignal: StereoSignal = new StereoSignal();\n \n constructor(numsamples: usize) {\n this.leftCompressor = new MonoCompressor(numsamples);\n this.rightCompressor = new MonoCompressor(numsamples);\n }\n\n process(left: f32, right: f32, threshold: f32, makeupgain: f32): void {\n this.resultSignal.left = this.leftCompressor.process(left, threshold, makeupgain);\n \tthis.resultSignal.right = this.rightCompressor.process(right, threshold, makeupgain); \n }\n}\n","fx/tribandeq.ts":"import { EQBand } from \"./eqband\";\n\nexport class TriBandEQ {\n \n lowerband: EQBand;\n midband: EQBand;\n hiband: EQBand;\n\n constructor(low: f32, midlo: f32, midhi: f32, high: f32) {\n this.lowerband = new EQBand(low, midlo);\n this.midband = new EQBand(midlo, midhi);\n this.hiband = new EQBand(midhi, high);\n }\n\n process(signal: f32, lolevel: f32, midlevel: f32, hilevel: f32): f32 {\n return this.lowerband.process(signal) * lolevel +\n this.midband.process(signal) * midlevel +\n this.hiband.process(signal) * hilevel;\n }\n}","fx/tribandstereocompressor.ts":"import { EQBand } from \"./eqband\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { StereoCompressor } from \"./stereocompressor\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class TriBandStereoCompressor {\n lowerbandl: EQBand; \n midbandl: EQBand; \n hibandl: EQBand;\n \n lowerbandr: EQBand; \n midbandr: EQBand; \n hibandr: EQBand;\n \n compressorLow: StereoCompressor;\n compressorMid: StereoCompressor;\n compressorHigh: StereoCompressor;\n\n stereosignal: StereoSignal = new StereoSignal();\n\n constructor(compressor_delay: f32, low: f32, midlo: f32, midhi: f32, high: f32) {\n this.compressorLow = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n this.compressorMid = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n this.compressorHigh = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n\n this.lowerbandl = new EQBand(low, midlo);\n this.lowerbandr = new EQBand(low, midlo);\n \n this.midbandl = new EQBand(midlo, midhi);\n this.midbandr = new EQBand(midlo, midhi);\n \n this.hibandl = new EQBand(midhi, high);\n this.hibandr = new EQBand(midhi, high);\n }\n\n process(left: f32, right: f32, \n lolevel: f32, \n midlevel: f32, \n hilevel: f32,\n lomakeupgain: f32,\n midmakeupgain: f32,\n himakeupgain: f32): void {\n let lowleft = this.lowerbandl.process(left);\n let midleft = this.midbandl.process(left);\n let hileft = this.hibandl.process(left);\n\n let lowright = this.lowerbandr.process(right);\n let midright = this.midbandr.process(right);\n let hiright = this.hibandr.process(right);\n\n this.compressorLow.process(lowleft,lowright,lolevel,lomakeupgain);\n this.compressorMid.process(midleft,midright,midlevel,midmakeupgain);\n this.compressorHigh.process(hileft,hiright,hilevel,himakeupgain);\n \n this.stereosignal.left = this.compressorLow.resultSignal.left + this.compressorMid.resultSignal.left + this.compressorHigh.resultSignal.left;\n this.stereosignal.right = this.compressorLow.resultSignal.right + this.compressorMid.resultSignal.right + this.compressorHigh.resultSignal.right;\n }\n}","index.ts":"// The entry file of the synth WebAssembly module.\n\n// --- Replace with your own mix implementation here\nimport { mixernext, setChannelValue, PATTERN_SIZE_SHIFT, BEATS_PER_PATTERN_SHIFT } from './mixes/newyear.mix';\nexport { setChannelValue } from './mixes/newyear.mix';\n// -------------------------------------------------\n\nimport { SAMPLERATE } from './environment';\n\nconst PATTERN_LENGTH: f32 = (1 << PATTERN_SIZE_SHIFT) as f32;\n\nlet NUM_INSTRUMENTS: i32;\n\nlet holdChannelValuesBufferPtr: usize;\nlet currentChannelValuesBufferPtr: usize;\nlet patternsPtr: usize;\nlet instrumentPatternListsPtr: usize;\nlet sampleBufferPtr: usize;\nlet sampleBufferFrames: usize;\nlet songlength: usize = 0;\n\nlet patternIndexf64: f64 = 0;\nlet patternIndex: usize = 0; \nlet patternNoteIndex: usize = -1;\n\nlet tick: f64 = 0;\nlet ticksPerBeat: f32 = (1 << PATTERN_SIZE_SHIFT >> BEATS_PER_PATTERN_SHIFT) as f32;\nlet bpm: f32 = 120;\n\nlet ticksPerSec = ticksPerBeat * bpm / 60;\nlet ticksPerSample = ticksPerSec / SAMPLERATE;\n\nlet playOrPause: boolean = true;\n\nexport function setBPM(BPM: f32): void {\n bpm = BPM;\n ticksPerSec = ticksPerBeat * BPM / 60;\n ticksPerSample = ticksPerSec / SAMPLERATE;\n}\n\nexport function setTick(newtick: f64): void {\n tick = newtick;\n}\n\nexport function getTick(): f64 {\n return tick;\n}\n\nexport function setMilliSecondPosition(millis: f64): void {\n let newtick: f64 = millis * ticksPerSec / 1000;\n let ticklength = songlength as f64 * PATTERN_LENGTH;\n\n newtick -= (floor(newtick / ticklength) * ticklength);\n if(abs(newtick - tick) > 1) {\n tick = newtick;\n }\n}\n\nexport function getPatternIndex(): usize {\n return patternIndex;\n}\n\nexport function getPatternNoteIndex(): usize {\n return patternNoteIndex;\n}\n\nexport function toggleSongPlay(status: boolean): void {\n if(!status && playOrPause) {\n for(let n=0;n songlengthf64) {\n tick -= (songlengthf64 * PATTERN_LENGTH); \n }\n\n patternIndexf64 = (tick / PATTERN_LENGTH) as f64;\n patternIndex = patternIndexf64 as usize; \n let newPatternNoteIndex: usize = ((patternIndexf64 - (patternIndex as f64)) * PATTERN_LENGTH) as usize;\n\n if(newPatternNoteIndex===patternNoteIndex) {\n return;\n }\n\n patternNoteIndex = newPatternNoteIndex;\n \n for(let n=0;n(instrumentPatternListsPtr +\n n * songlength +\n patternIndex) as usize;\n \n let channelValue: f32 = load(patternsPtr + (instrumentPatternIndex << PATTERN_SIZE_SHIFT)\n + patternNoteIndex) as f32;\n \n let holdChannelValue: f32 = load(holdChannelValuesBufferPtr + n * 4);\n if(holdChannelValue > 0 && channelValue !== 1 && channelValue !== holdChannelValue) {\n // Hold value\n channelValue = 1;\n store(patternsPtr + (instrumentPatternIndex << PATTERN_SIZE_SHIFT)\n + patternNoteIndex, 1 as u8);\n }\n\n // 1 means HOLD value - no change to the visualizer \n if(channelValue !== 1) { \n // For external visualizer to monitor channel values currently been played by the sequencer \n store(currentChannelValuesBufferPtr + n*4, channelValue);\n setChannelValue(n, channelValue);\n } \n }\n}\n\nexport function getHoldChannelValuesBufferPtr(): usize {\n return holdChannelValuesBufferPtr;\n}\n\nexport function recordChannelValue(channel: usize, value: f32): void {\n store(holdChannelValuesBufferPtr + channel * 4, value);\n setChannelValue(channel, value);\n}\n\nexport function setPatternsPtr(ptr: usize): void {\n patternsPtr = ptr;\n}\n\nexport function allocatePatterns(numpatterns: i32): usize {\n patternsPtr = __new(numpatterns << PATTERN_SIZE_SHIFT, idof>());\n return patternsPtr;\n}\n\nexport function setInstrumentPatternListPtr(ptr: usize, songpatternslength: i32, numinstruments: i32): void {\n instrumentPatternListsPtr = ptr;\n NUM_INSTRUMENTS = numinstruments;\n songlength = songpatternslength;\n \n currentChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n holdChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n}\n\nexport function allocateInstrumentPatternList(songpatternslength: i32, numinstruments: i32): usize {\n NUM_INSTRUMENTS = numinstruments;\n songlength = songpatternslength;\n \n currentChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n holdChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n instrumentPatternListsPtr = __new(songpatternslength * NUM_INSTRUMENTS, idof>());\n\n return instrumentPatternListsPtr;\n}\n\nexport function allocateSampleBuffer(frames: usize): usize {\n sampleBufferFrames = frames;\n sampleBufferPtr = __new(frames * 2 * 4, idof>());\n return sampleBufferPtr;\n}\n\nexport function getCurrentChannelValuesBufferPtr(): usize {\n return currentChannelValuesBufferPtr;\n}\n\nexport function fillSampleBuffer(): void { \n updateInstrumentNotes();\n for(let n: usize = 0;n 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1) / 2;\n this.sawoscillator2.frequency = notefreq(note - 0.1) / 2;\n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n let filterenv = this.filterenv.next();\n this.signal.left *= 0.9 * env; // feedback\n this.signal.right *= 0.9 * env; // feedback\n this.lpfilterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (100 * filterenv), Q_BUTTERWORTH);\n this.lpfilterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (100 * filterenv), Q_BUTTERWORTH);\n \n this.signal.addMonoSignal(\n this.lpfilterl.process(this.hpfilterl.process(this.sawoscillator.next() * env)), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.lpfilterr.process(this.hpfilterr.process(this.sawoscillator2.next() * env)), 0.3, 0.7\n );\n } \n}\n ","instruments/bass/sawbass2.class.ts":"\nimport { SAMPLERATE } from '../../environment';\n\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\n\n\nexport class SawBass2 {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly filterenv: Envelope = new Envelope(0.01, 0.4, 0.0, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterr: BiQuadFilter = new BiQuadFilter();\n \n readonly lpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly lpfilterr: BiQuadFilter = new BiQuadFilter();\n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n this.hpfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n this.hpfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1);\n this.sawoscillator2.frequency = notefreq(note - 0.1);\n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n let filterenv = this.filterenv.next();\n this.signal.left /= 1.03; // feedback\n this.signal.right /= 1.03; // feedback\n this.lpfilterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (8000 * filterenv), Q_BUTTERWORTH);\n this.lpfilterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (8000 * filterenv), Q_BUTTERWORTH);\n \n this.signal.addMonoSignal(\n this.lpfilterl.process(this.hpfilterl.process(this.sawoscillator.next() * env)), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.lpfilterr.process(this.hpfilterr.process(this.sawoscillator2.next() * env)), 0.3, 0.7\n );\n } \n}\n ","instruments/bass/sawbass3.ts":"\nimport { SAMPLERATE } from '../../environment';\n\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { BandPass } from '../../fx/bandpass';\n\n\nexport class SawBass3 {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.3, 0.8, 0.2);\n readonly filterenv: Envelope = new Envelope(0.01, 0.2, 0.1, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n \n readonly lpfilter: BiQuadFilter = new BiQuadFilter();\n readonly band1: BandPass = new BandPass(1000, 2000);\n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note);\n \n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n \n let filterenv = this.filterenv.next();\n \n let signal = this.sawoscillator.next();\n signal *= env;\n \n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n this.sawoscillator.frequency + (16 * this.sawoscillator.frequency * filterenv), Q_BUTTERWORTH);\n \n const band1freq = this.sawoscillator.frequency * 4;\n this.band1.update_frequencies(band1freq, band1freq + env * this.sawoscillator.frequency);\n\n let band1 = this.band1.process(signal);\n signal = this.lpfilter.process(signal);\n \n this.signal.left = signal * 2 + band1; \n this.signal.right = signal * 2 - band1;\n \n } \n}\n ","instruments/drivelead.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { Noise } from '../synth/noise.class';\nimport { WaveShaper } from '../synth/shaper';\nimport { notefreq } from '../synth/note';\n\n\nexport class DriveLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.1, 1.0, 0.6, 0.2);\n readonly sawoscillatorl: SawOscillator = new SawOscillator();\n readonly sawoscillatorr: SawOscillator = new SawOscillator();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n readonly lfoenvelope: Envelope = new Envelope(1.0, 0, 1.0, 0.1);\n readonly lfo: SineOscillator = new SineOscillator();\n baseFrequency : f32;\n pitchbend: f32 = 0;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note);\n this.lfo.frequency = 8;\n this.envelope.attack(); \n this.lfoenvelope.attack(); \n this._note = note;\n } else {\n this.envelope.release();\n this.lfoenvelope.release();\n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n setPitchbend(bend: f32): void {\n this.pitchbend = bend; \n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env===0) {\n this.signal.clear();\n return;\n }\n \n const pitchbend: f32 = this.pitchbend;\n if (Math.abs(pitchbend) > 0.01) {\n // Simple pitchbend that always will return to base note\n this.baseFrequency = notefreq(this._note + pitchbend);\n this.pitchbend = pitchbend * 0.9999;\n } else if(pitchbend !==0 ) {\n this.pitchbend = 0;\n this.baseFrequency = notefreq(this._note);\n }\n \n let lfo: f32 = this.lfo.next() * 3 * this.lfoenvelope.next();\n this.sawoscillatorl.frequency = this.baseFrequency + lfo + 0.5;\n this.sawoscillatorr.frequency = this.baseFrequency + lfo - 0.5;\n \n let left = env* this.sawoscillatorl.next() + this.signal.right * 0.5;\n left = this.shaper.process(left);\n \n let right = env* this.sawoscillatorr.next() + this.signal.left * 0.5;\n right = this.shaper.process(right);\n \n this.signal.left = left * 0.5 + right;\n this.signal.right = right * 0.5 + left; \n } \n}\n ","instruments/drums/kick2.class.ts":"\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { Instrument } from '../instrument.class';\n\nexport class Kick2 extends Instrument {\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n \n readonly env2: Envelope = new Envelope(0.001, 0.01, 0.0, 1);\n readonly bp2: BandPass = new BandPass(4000, 5000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.1, 0.05, 0.1);\n readonly bp3: BandPass = new BandPass(10, 100);\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env2.attack(); \n this.env3.attack(); \n } else {\n \n this.env2.release(); \n this.env3.release(); \n }\n }\n\n next(): void {\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n \n let sig2 = this.bp2.process(osc) * env2 ;\n let sig3 = this.bp3.process(osc) * env3 * 8;\n\n this.signal.left = this.velocity * (-sig2 + sig3);\n this.signal.right = this.velocity * ( + sig2 - sig3); \n } \n}\n ","instruments/drums/rimshot.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\n\nexport class Rimshot {\n private _note: f32;\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.001, 0.08, 0.06, 1);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.05, 0.01, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n let sig1 = this.bp1.process(osc) * env1;\n let sig2 = this.bp2.process(osc) * env2 * 2;\n let sig3 = this.bp3.process(osc) * env3 * 16;\n\n this.signal.left = this.velocity * (sig1 + sig2 * 0.8 + sig3);\n this.signal.right = this.velocity * (sig1 * 0.8 + sig2 + sig3);\n \n \n } \n}\n ","instruments/drums/snare2.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\n\nexport class Snare2 {\n private _note: f32;\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.001, 0.08, 0.06, 0.5);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.05, 0.01, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n let sig1 = this.bp1.process(osc) * env1 * 6;\n let sig2 = this.bp2.process(osc) * env2 * 2;\n let sig3 = this.bp3.process(osc) * env3 * 4;\n\n this.signal.left = this.velocity * (sig1 + sig2 * 0.8 + sig3);\n this.signal.right = this.velocity * (sig1 * 0.8 + sig2 + sig3);\n \n \n } \n}\n ","instruments/hihat.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\n\nexport class Hihat {\n private _note: f32;\n private velocity: f32;\n\n readonly envelope: Envelope = new Envelope(0.0, 0.08, 0, 0.1); \n readonly noise: Noise = new Noise();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 32; \n this.envelope.attack(); \n } else {\n this.envelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next(); \n if(env === 0) {\n this.signal.clear();\n return;\n } \n let osc: f32 = this.noise.next(); \n let signal = this.velocity * 2 * env * osc;\n \n this.filter.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n 10000 + 2000 * env, Q_BUTTERWORTH);\n\n signal = this.filter.process(signal);\n\n this.signal.left = signal;\n this.signal.right = signal;\n } \n}\n ","instruments/instrument.class.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nexport abstract class Instrument {\n abstract set note(note: f32);\n readonly signal: StereoSignal = new StereoSignal();\n abstract next(): void;\n}","instruments/kick.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\n\n\n\nexport class Kick {\n private _note: f32;\n private velocity: f32;\n readonly envelope: Envelope = new Envelope(0.0, 0.2, 0, 0.2);\n readonly filterenvelope: Envelope = new Envelope(0.0, 0.05, 0.05, 0.1);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly noise: Noise = new Noise();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 150;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.filterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n this.sawoscillator.frequency = 20.0 + (env * 150.0);\n \n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 40 + (this.filterenvelope.next() * 2000), 0.2);\n\n let osc1: f32 = this.envelope.next() * this.velocity * this.sawoscillator.next() * 0.8 + this.noise.next();\n\n osc1 = this.filter.process(osc1);\n \n this.signal.left = env * osc1;\n this.signal.right = env * osc1;\n } \n}\n ","instruments/lead/brassy.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\n\nimport { SineOscillator } from '../../synth/sineoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nexport class BrassyLead {\n private _note: f32;\n \n readonly osc: SineOscillator = new SineOscillator();\n readonly osc2: SawOscillator = new SawOscillator();\n \n readonly env1: Envelope = new Envelope(0.01, 0.1, 0.4, 0.3);\n \n readonly filterenv: Envelope = new Envelope(0.01, 0.1, 0.1, 0.3);\n \n readonly lopass: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this.osc2.frequency = notefreq(note);\n this._note = note;\n this.env1.attack();\n \n this.filterenv.attack(); \n } else {\n this.env1.release(); \n \n this.filterenv.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n if(env1 === 0) {\n this.signal.clear();\n return;\n }\n \n let osc: f32 = this.osc.next() * 0.05;\n let osc2: f32 = this.osc2.next() * env1 * 0.2;\n\n const pan = this._note / 127;\n\n let sig = osc + osc2;\n\n const filterenv = this.filterenv.next();\n this.lopass.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n (14000 * filterenv) , Q_BUTTERWORTH);\n sig = this.lopass.process(sig);\n \n this.signal.left = sig;\n this.signal.right = sig;\n \n \n } \n}\n ","instruments/lead/eftang.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class Eftang {\n private _note: f32;\n \n\n readonly lfo: SineOscillator = new SineOscillator();\n readonly osc: SawOscillator = new SawOscillator();\n readonly osc2: SawOscillator = new SawOscillator();\n readonly osc3: SawOscillator = new SawOscillator();\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.1, 0.2, 0.5, 1);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.3, 0.1, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this.osc2.frequency = notefreq(note - 0.1);\n this.osc3.frequency = notefreq(note + 0.1);\n this.lfo.position = 0;\n this.lfo.frequency = 4;\n \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n if(env1 === 0) {\n this.signal.clear();\n return;\n }\n \n const env2: f32 = this.env2.next();\n const env3: f32 = this.env3.next();\n \n const osc: f32 = this.osc.next() + this.osc2.next() + this.osc3.next();\n \n const lfo = this.lfo.next() + 1;\n const basefreq = this.osc.frequency;\n this.bp1.update_frequencies(20, basefreq + 1);\n this.bp2.update_frequencies(basefreq * 1.5,basefreq * 1.6);\n this.bp3.update_frequencies(basefreq * 12, 8000 + (lfo * 5000));\n const noise = this.noise.next();\n\n const sig1 = this.bp1.process(osc) * env1;\n const sig2 = this.bp2.process(osc) * env2;\n const sig3 = this.bp3.process(osc + noise * 0.2) * env3;\n\n this.signal.left = (sig1 + sig3);\n this.signal.right = ( sig1 + sig2 );\n \n \n } \n}\n ","instruments/lead/sinelead.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SineLead {\n private _note: f32;\n \n\n readonly osc: SineOscillator = new SineOscillator();\n readonly osc2: SineOscillator = new SineOscillator();\n \n readonly env1: Envelope = new Envelope(0.02, 0.15, 0.05, 0.3);\n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note) * 2;\n this.osc2.frequency = notefreq(note);\n this._note = note;\n this.env1.attack(); \n } else {\n this.env1.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n \n let osc: f32 = this.osc.next();\n let osc2: f32 = this.osc2.next() * 0.2 * env1;\n osc *= env1;\n\n const pan = this._note / 127;\n\n this.signal.left = osc * pan + osc2 * (1-pan);\n this.signal.right = osc * (1 - pan) + osc2 * pan;\n \n \n } \n}\n ","instruments/pad/flatpad.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class FlatPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.1, 1.0, 0.1);\n readonly filterenvelope: Envelope = new Envelope(0.001, 1.0, 1.0, 0.1);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo: f32 = (lfo * 0.9) + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n ","instruments/pad/softpad.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SoftPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.2, 0.6, 0.75, 0.5);\n readonly filterenvelope: Envelope = new Envelope(0.8, 1.0, 0.6, 0.5);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo = lfo + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 2000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 2000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n ","instruments/pad.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { WaveShaper } from '../synth/shaper';\n\n\n\nexport class Pad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.05, 0.6, 0.75, 0.3);\n readonly filterenvelope: Envelope = new Envelope(0.06, 0.6, 0.3, 0.3);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hipassfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hipassfilterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.05);\n this.sawoscillator3.frequency = notefreq(note - 0.05);\n this.sawoscillator4.frequency = notefreq(note + 0.1);\n this.sawoscillator5.frequency = notefreq(note - 0.1);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * 18000, 0.2);\n let hpfilterfreq: f32 = 0 + (1-this.hipassfilterenvelope.next()) * 500;\n this.hipassfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n hpfilterfreq, 0.3);\n this.hipassfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n hpfilterfreq, 0.3);\n \n this.signal.left = this.hipassfilterl.process(this.filter.process(left ));\n this.signal.right = this.hipassfilterr.process(this.filter.process(right ));\n } \n}\n ","instruments/piano/subpiano.ts":"import { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { notefreq } from '../../synth/note';\nimport { SquareOscillator } from '../../synth/squareoscillator.class';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SubPiano {\n private _note: f32;\n private pan: f32;\n\n readonly lfo: SineOscillator = new SineOscillator();\n readonly osc: SquareOscillator = new SquareOscillator();\n readonly env1: Envelope = new Envelope(0.02, 1.5, 0.1, 0.4);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.01, 0.6, 0.02, 0.2);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.01, 0.1, 0.00, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n let freq : f32 = notefreq(note);\n this.osc.frequency = freq;\n this.lfo.frequency = 5.0;\n this.pan = note / 128.0;\n\n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.osc.next();\n \n const lfo: f32 = this.lfo.next();\n const filterlfo = lfo + 1;\n const panlfo = lfo * 0.2 + 1;\n const freq: f32 = this.osc.frequency;\n this.bp1.update_frequencies(freq, freq + filterlfo * 30);\n this.bp2.update_frequencies(freq * 1.5, freq * 1.5 + filterlfo * 300);\n this.bp3.update_frequencies(freq * 2.25, freq * 2.25 + filterlfo * 800);\n \n let sig1 = this.bp1.process(osc) * env1 * 12;\n let sig2 = this.bp2.process(osc) * env2 * 6;\n let sig3 = this.bp3.process(osc) * env3 * 10;\n\n this.signal.left = this.pan * (sig1 * panlfo + sig2 * 0.8 * -panlfo + sig3 * panlfo);\n this.signal.right = 1 - this.pan * (sig1 * 0.8 * -panlfo + sig2 * panlfo + sig3 - panlfo * 0.2);\n } \n}\n ","instruments/sawbass.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { Instrument } from './instrument.class';\n\nexport class SawBass extends Instrument {\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterr: BiQuadFilter = new BiQuadFilter();\n \n constructor() {\n super();\n this.hpfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n this.hpfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1);\n this.sawoscillator2.frequency = notefreq(note - 0.1);\n this.envelope.attack(); \n } else {\n this.envelope.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n this.signal.left /= 1.03; // feedback\n this.signal.right /= 1.03; // feedback\n this.signal.addMonoSignal(\n this.hpfilterl.process(this.sawoscillator.next() * env), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.hpfilterr.process(this.sawoscillator2.next() * env), 0.3, 0.7\n );\n } \n}\n ","instruments/snare.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\nimport { Instrument } from './instrument.class';\n\nexport class Snare extends Instrument {\n private velocity: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0, 0.2);\n readonly hpfilterenvelope: Envelope = new Envelope(0.01, 0.5, 0.5, 0.3);\n \n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly noise: Noise = new Noise();\n \n readonly hpfilter: BiQuadFilter = new BiQuadFilter();\n readonly lpfilter: BiQuadFilter = new BiQuadFilter();\n\n constructor() {\n super();\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 13000 , Q_BUTTERWORTH);\n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 200;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.hpfilterenvelope.attack(); \n } else {\n this.envelope.release();\n this.hpfilterenvelope.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n this.sawoscillator.frequency = 20.0 + (env * 200.0);\n \n \n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n 20000 - (19900 * this.hpfilterenvelope.next()) , Q_BUTTERWORTH);\n\n let osc1: f32 = this.sawoscillator.next() * 0.6 + this.noise.next();\n osc1= this.hpfilter.process(osc1);\n osc1 = this.lpfilter.process(osc1);\n\n this.signal.left = this.velocity * env * osc1;\n this.signal.right = this.velocity * env * osc1;\n \n \n } \n}\n ","instruments/squarelead.class.ts":"\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { WaveShaper } from '../synth/shaper';\nimport { notefreq } from '../synth/note';\nimport { SquareOscillator } from '../synth/squareoscillator.class';\nimport { BiQuadFilter, Q_BUTTERWORTH, FilterType } from '../synth/biquad';\nimport { SAMPLERATE } from '../environment';\n\n\nexport class SquareLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.02, 0.2, 0.2, 0.2);\n readonly filterenvelope: Envelope = new Envelope(0.02, 0.1, 0.4, 0.2);\n readonly squareoscillatorl: SquareOscillator = new SquareOscillator();\n readonly squareoscillatorr: SquareOscillator = new SquareOscillator();\n readonly lpfilterleft: BiQuadFilter = new BiQuadFilter();\n readonly lpfilterright: BiQuadFilter = new BiQuadFilter();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n \n baseFrequency : f32;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note);\n this.envelope.attack(); \n this.filterenvelope.attack();\n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n let filterenv: f32 = this.filterenvelope.next();\n if(env===0 && filterenv===0) {\n this.signal.clear();\n return;\n }\n \n this.squareoscillatorl.frequency = this.baseFrequency + 0.3;\n this.squareoscillatorr.frequency = this.baseFrequency - 0.3;\n \n this.lpfilterleft.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n filterenv * 3000, Q_BUTTERWORTH);\n this.lpfilterright.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n filterenv * 3000, Q_BUTTERWORTH);\n \n let left = env* this.squareoscillatorl.next();\n left = this.shaper.process(left);\n left = this.lpfilterleft.process(left);\n\n let right = env* this.squareoscillatorr.next();\n right = this.shaper.process(right);\n right = this.lpfilterright.process(right);\n\n this.signal.left = left;\n this.signal.right = right; \n } \n}\n ","instruments/string1.class.ts":"\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { notefreq } from '../synth/note';\n\nexport class Test4KlangString {\n private _note: f32;\n readonly env0: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly vco1: SineOscillator = new SineOscillator();\n readonly vco5: SawOscillator = new SawOscillator();\n readonly vco6: SawOscillator = new SawOscillator();\n\n readonly signal: StereoSignal = new StereoSignal();\n\n notefreq: f32;\n\n set note(note: f32) { \n if(note > 1) { \n this.notefreq = notefreq(note);\n this.vco1.frequency = this.notefreq / 1000;\n\n this.env0.attack(); \n } else {\n this.env0.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let f_0:f32 = this.env0.next(); // GO4K_ENV ATTAC(88),DECAY(88),SUSTAIN(88),RELEASE(88),GAIN(88)\n let f_1:f32 = this.vco1.next(); // GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(64),GATES(85),COLOR(64),SHAPE(64),GAIN(64),FLAGS(SINE|LFO)\n this.vco5.frequency = this.notefreq + f_1; // GO4K_FST AMOUNT(70),DEST(5*MAX_UNIT_SLOTS+2+FST_SET)\n this.vco6.frequency = this.notefreq - f_1; // GO4K_FST AMOUNT(70),DEST(6*MAX_UNIT_SLOTS+5+FST_SET)\n\n f_1 = this.vco5.next(); // GO4K_VCO TRANSPOSE(64),DETUNE(65),PHASE(64),GATES(85),COLOR(52),SHAPE(64),GAIN(64),FLAGS(TRISAW)\n let f_2:f32 = this.vco6.next(); // GO4K_VCO TRANSPOSE(64),DETUNE(63),PHASE(64),GATES(85),COLOR(52),SHAPE(64),GAIN(64),FLAGS(TRISAW)\n f_1 += f_2; // GO4K_FOP OP(FOP_ADDP)\n f_0 *= f_1; // GO4K_FOP OP(FOP_MULP)\n f_1 = f_0; // GO4K_PAN PANNING(64)\n this.signal.left = f_1;\n this.signal.right = f_0; // GO4K_OUT GAIN(0), AUXSEND(128)\n } \n}\n ","instruments/testinstrument.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { DelayLine } from '../fx/delayline';\nimport { notefreq } from '../synth/note';\n\nexport class TestInstrument {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.02, 0.2, 0.2, 0.2);\n readonly sineoscillator: SineOscillator = new SineOscillator();\n readonly sineoscillator2: SineOscillator = new SineOscillator();\n readonly delayline: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n readonly delayline2: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note!==this.note && note > 1) { \n this.envelope.attack(); \n this.sineoscillator.frequency = notefreq(note);\n this.sineoscillator2.frequency = notefreq(note + 12);\n } else if(note===0) {\n this.envelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear(); \n } else {\n let osc1 = env * this.sineoscillator.next();\n let osc2 = env * this.sineoscillator2.next();\n this.signal.left = osc1 * 0.8 + osc2 * 0.2;\n this.signal.right = osc1 * 0.2 + osc2 * 0.8;\n }\n } \n}\n ","math/fft.ts":"/**\n * Originally ported from http://rosettacode.org/wiki/Fast_Fourier_transform#C_sharp\n * \n * Optimized by reusing Complex objects instead of creating new, avoiding garbage collection\n * Precalculating of twiddles, making reuse of the FFT instance faster \n */ \n\n\nexport class Complex {\n re: f32 = 0;\n im: f32 = 0;\n \n public clone(b: Complex): void {\n this.re = b.re;\n this.im = b.im;\n }\n\n public add(b: Complex): void {\n this.re += b.re;\n this.im += b.im;\n }\n \n public sub(b: Complex): void {\n this.re -= b.re;\n this.im -= b.im;\n }\n \n public mult(b: Complex): void {\n const re: f32 = this.re;\n\n this.re = re * b.re - this.im * b.im;\n this.im = re * b.im + this.im * b.re;\n }\n\n public scale(n: f32): void {\n this.re *= n;\n this.im *= n;\n }\n\n public conjugate(): void {\n this.im = -this.im;\n }\n}\n\nfunction bitReverse(n: i32, bits: i32): i32 {\n let reversedN: i32 = n;\n let count: i32 = bits - 1;\n\n n >>= 1;\n while (n > 0) {\n reversedN = (reversedN << 1) | (n & 1);\n count--;\n n >>= 1;\n }\n\n return ((reversedN << count) & ((1 << bits) - 1));\n}\n \n/* Uses Cooley-Tukey iterative in-place algorithm with radix-2 DIT case\n * assumes no of points provided are a power of 2 */\nexport class FFT {\n buffer: StaticArray;\n bits: i32;\n exps: StaticArray;\n tmp: Complex = new Complex();\n\n /**\n * \n * @param buffersize_shift buffersize will be 2^buffersize_shift\n */\n constructor(buffersize_shift: i32) {\n const buffersize = 1 << buffersize_shift;\n const buffer = new StaticArray(buffersize);\n for (let n=0;n((\n buffersize as f32 *\n NativeMathf.log2(buffersize as f32)\n ) as i32);\n\n let expsIndex = 0;\n for (let N: i32 = 2; N <= buffer.length; N <<= 1) {\n for (let i: i32 = 0; i < buffer.length; i += N) {\n for (let k: i32 = 0; k < (N >> 1); k++) {\n const term: f32 = -2 * NativeMathf.PI * (k as f32) / (N as f32);\n const exp: Complex = new Complex();\n exp.re = NativeMathf.cos(term);\n exp.im = NativeMathf.sin(term);\n this.exps[expsIndex++] = exp;\n }\n }\n }\n }\n\n calculateInverse(): void {\n const N = this.buffer.length;\n const iN: f32 = 1 / (N as f32);\n\n for (let n=0;n> 1); k++) {\n const evenIndex = i + k;\n const oddIndex = i + k + (N >> 1);\n const even = buffer[evenIndex];\n const odd = buffer[oddIndex];\n const exp = this.tmp;\n exp.clone(this.exps[expsIndex++]);\n\n exp.mult(odd);\n\n odd.clone(even);\n even.add(exp);\n odd.sub(exp);\n }\n }\n }\n }\n}\n\nexport function createFFT(buffersize_shift: i32): usize {\n return changetype(new FFT(buffersize_shift));\n}\n\nexport function setComplex(instance: usize, arrayIndex: i32, re: f32, im: f32): void {\n const buffer = changetype(instance).buffer;\n buffer[arrayIndex].re = re;\n buffer[arrayIndex].im = im;\n}\n\nexport function getComplexRe(instance: usize, arrayIndex: i32): f32 {\n return changetype(instance).buffer[arrayIndex].re;\n}\n\nexport function getComplexIm(instance: usize, arrayIndex: i32): f32 {\n return changetype(instance).buffer[arrayIndex].im;\n}\n\nexport function calculateFFT(instance: usize): void {\n changetype(instance).calculate();\n}\n\nexport function calculateIFFT(instance: usize): void {\n changetype(instance).calculateInverse();\n}","math/sin.ts":"// By Max Graey ( https://github.com/petersalomonsen/javascriptmusic/issues/2#issuecomment-469419609 )\n\nexport const PI: f32 = 3.141592653589793;\nexport function sin(x: f32): f32 {\n var y: f32, z: f32;\n x *= 1 / PI;\n y = floor(x);\n z = x - y;\n z *= 1.0 - z;\n z *= 3.6 * z + 3.1;\n return select(-z, z, y & 1);\n}\n\nexport function cos(x: f32): f32 {\n return sin(x + PI * .5);\n}","midi/instruments/audioplayer.ts":"import { LoPassBiQuadFilter, MidiChannel, Q_BUTTERWORTH } from \"../../mixes/globalimports\";\nimport { Envelope } from \"../../synth/envelope.class\";\nimport { MidiVoice } from \"../midisynth\";\n\nconst CONTROL_FREQUENCY_CUTOFF = 74;\nconst MAX_CUTOFF_FREQUENCY: f32 = 20000;\nconst audioBuffers: Array> = new Array>();\n\nexport class AudioPlayerChannel extends MidiChannel {\n gain: f32 = 1.0;\n cutoff: f32 = MAX_CUTOFF_FREQUENCY;\n lopassleft: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n lopassright: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n\n controlchange(controller: u8, value: u8): void {\n super.controlchange(controller, value);\n switch (controller) {\n case CONTROL_FREQUENCY_CUTOFF:\n this.cutoff = value * MAX_CUTOFF_FREQUENCY / 127 as f32;\n this.lopassleft.update(this.cutoff, Q_BUTTERWORTH);\n this.lopassright.update(this.cutoff, Q_BUTTERWORTH);\n break;\n }\n }\n\n preprocess(): void {\n let left = this.signal.left;\n let right = this.signal.right;\n if (this.cutoff < MAX_CUTOFF_FREQUENCY) {\n left = this.lopassleft.process(left);\n right = this.lopassright.process(right);\n }\n left *= this.gain;\n right *= this.gain;\n\n this.signal.left = left;\n this.signal.right = right;\n }\n}\n\nexport class AudioPlayer extends MidiVoice {\n position: i32 = 0;\n velocityLevel: f32;\n\n constructor(channel: MidiChannel,\n private audioBufferPairNdx: i32,\n private startPosition: i32,\n noteNumber: u8,\n private env: Envelope = new Envelope(0.01, 0.0, 1.0, 0.01)\n ) {\n super(channel);\n this.minnote = noteNumber;\n this.maxnote = noteNumber;\n }\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.velocityLevel = velocity as f32 / 127 as f32;\n this.position = this.startPosition;\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return audioBuffers.length == 0 || this.env.isDone();\n }\n\n nextframe(): void {\n const env = this.env.next();\n const vel = env * this.velocityLevel;\n\n let pos = this.position;\n const audioBufferNdx = this.audioBufferPairNdx << 1;\n const leftarr = audioBuffers[audioBufferNdx];\n const left = vel * leftarr[pos];\n const right = vel * audioBuffers[audioBufferNdx + 1][pos];\n pos++;\n if (pos == leftarr.length) {\n pos = 0;\n }\n this.position = pos;\n\n this.channel.signal.left += left;\n this.channel.signal.right += right;\n }\n}\n\nexport class MonoAudioPlayer {\n position: i32 = 0;\n\n constructor(private audioBufferNdx: i32) {\n\n }\n\n restart(): void {\n this.position = 0;\n }\n\n get audioBuffer(): StaticArray {\n return audioBuffers[this.audioBufferNdx];\n }\n\n nextframe(): f32 {\n return this.audioBuffer[(this.position++) % this.audioBuffer.length];\n }\n}\n\nexport function allocateAudioBuffer(frames: i32): usize {\n const buf = new StaticArray(frames);\n audioBuffers.push(buf);\n return changetype(buf);\n}","midi/instruments/defaultinstrument.ts":"import { Envelope } from \"../../synth/envelope.class\";\nimport { notefreq } from \"../../synth/note\";\nimport { SineOscillator } from \"../../synth/sineoscillator.class\";\nimport { MidiVoice } from \"../midisynth\";\n\nexport class DefaultInstrument extends MidiVoice {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.01, 0.0, 1.0, 0.01);\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.osc.frequency = notefreq(note);\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return this.env.isDone();\n }\n\n nextframe(): void {\n const signal = this.osc.next() * this.env.next() * this.velocity / 256;\n this.channel.signal.addMonoSignal(signal, 0.2, 0.5);\n }\n}","midi/midisynth.ts":"import { initializeMidiSynth, postprocess } from '../mixes/midi.mix';\nimport { StereoSignal, Freeverb } from '../mixes/globalimports';\nimport { midiLevelToGain } from '../synth/decibel';\n\nimport { Pan } from '../synth/pan.class';\nimport { DefaultInstrument } from './instruments/defaultinstrument';\n// export { allocateAudioBuffer } from './instruments/audioplayer';\n\nexport const MAX_ACTIVE_VOICES_SHIFT = 5; // up to 32 voices playing simultaneously\nexport const MAX_ACTIVE_VOICES = 1 << MAX_ACTIVE_VOICES_SHIFT;\n\nexport const midichannels = new StaticArray(16);\nexport const activeVoices = new StaticArray(MAX_ACTIVE_VOICES);\nconst activeVoicesStatusSnapshot = new StaticArray(MAX_ACTIVE_VOICES * 3);\n\nexport let numActiveVoices = 0;\nexport let voiceActivationCount = 0;\n\nexport const sampleBufferFrames = 128;\nexport const sampleBufferBytesPerChannel = sampleBufferFrames * 4;\nexport const sampleBufferChannels = 2;\nexport const samplebuffer = new StaticArray(sampleBufferFrames * sampleBufferChannels);\nconst bufferposstart = changetype(samplebuffer);\nconst bufferposend = changetype(samplebuffer) + sampleBufferBytesPerChannel;\n\nconst CONTROL_SUSTAIN: u8 = 64;\nconst CONTROL_VOLUME: u8 = 7;\nconst CONTROL_PAN: u8 = 10;\nconst CONTROL_REVERB: u8 = 91;\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\nexport const outputline = new StereoSignal();\nexport class MidiChannel {\n controllerValues: StaticArray = new StaticArray(128);\n voices: StaticArray;\n sustainedVoices: StaticArray = new StaticArray(128);\n\n signal: StereoSignal = new StereoSignal();\n volume: f32 = midiLevelToGain(100);\n reverb: f32 = midiLevelToGain(7);\n pan: Pan = new Pan();\n voiceTransitionBuffer: StaticArray = new StaticArray(sampleBufferFrames * 2);\n\n constructor(numvoices: i32, factoryFunc: (channel: MidiChannel, voiceindex: i32) => MidiVoice) {\n this.voices = new StaticArray(numvoices);\n for (let n = 0; n < numvoices; n++) {\n this.voices[n] = factoryFunc(this, n);\n }\n\n }\n\n controlchange(controller: u8, value: u8): void {\n this.controllerValues[controller] = value;\n\n switch (controller) {\n case CONTROL_SUSTAIN:\n // sustain\n if (value < 64) {\n for (let n = 0; n < 128; n++) {\n if (this.sustainedVoices[n] != null) {\n (this.sustainedVoices[n] as MidiVoice).noteoff();\n this.sustainedVoices[n] = null;\n }\n }\n }\n break;\n case CONTROL_VOLUME:\n this.volume = midiLevelToGain(value);\n break;\n case CONTROL_REVERB:\n this.reverb = midiLevelToGain(value);\n break;\n case CONTROL_PAN:\n this.pan.setPan((value as f32) / 127.0);\n break;\n }\n }\n\n noteoff(note: u8): void {\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (voice.note === note) {\n if (this.controllerValues[CONTROL_SUSTAIN] >= 64) {\n this.sustainedVoices[note] = voice;\n } else { \n voice.noteoff();\n }\n break;\n }\n }\n }\n\n removeFromSustainedVoices(voice: MidiVoice): void {\n this.sustainedVoices[voice.note] = null;\n }\n\n activateVoice(note: u8, channelNo: u8): MidiVoice | null {\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n voice.channelNo = channelNo;\n if (voice.activeVoicesIndex > -1 && voice.note === note) {\n // Found already active voice for the given note\n voice.activationCount = voiceActivationCount++;\n // must remove from sustained voices\n this.removeFromSustainedVoices(voice);\n return voice;\n }\n }\n\n if (numActiveVoices === activeVoices.length) {\n return null;\n }\n\n let activeVoiceIndex: i32 = numActiveVoices;\n\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (voice.activeVoicesIndex === -1 &&\n note >= voice.minnote &&\n note <= voice.maxnote) {\n const availableVoice = voice as MidiVoice;\n activeVoices[activeVoiceIndex] = availableVoice;\n availableVoice.activeVoicesIndex = activeVoiceIndex;\n numActiveVoices++;\n availableVoice.activationCount = voiceActivationCount++;\n return availableVoice;\n }\n }\n\n // no available voices for the current channel, we'll pick the oldest\n let oldestVoice: MidiVoice | null = null;\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (\n (oldestVoice === null ||\n voice.activationCount <= (oldestVoice as MidiVoice).activationCount) &&\n note >= voice.minnote &&\n note <= voice.maxnote) {\n oldestVoice = voice;\n }\n }\n if (oldestVoice !== null) {\n const voice = (oldestVoice as MidiVoice);\n for (let n = 0;n 0) {\n const activatedVoice = midichannels[channel].activateVoice(val2, channel);\n if (activatedVoice !== null) {\n const voice = activatedVoice as MidiVoice;\n voice.noteon(val2, val3);\n }\n } else if (\n (command === 0x80 ||\n (command === 0x90 && val3 === 0)) // \n ) {\n // note off\n midichannels[channel].noteoff(val2);\n } else if (command === 0xb0) {\n // control change\n midichannels[channel].controlchange(val2, val3);\n }\n}\n\nexport function getActiveVoicesStatusSnapshot(): usize {\n for (let n=0;n(activeVoicesStatusSnapshot);\n}\n\nexport function allNotesOff(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n const voice = activeVoices[n] as MidiVoice;\n voice.noteoff();\n }\n}\n\nexport function cleanupInactiveVoices(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n const voice = activeVoices[n] as MidiVoice;\n if (voice.isDone()) {\n voice.deactivate();\n for (let r = n + 1; r < numActiveVoices; r++) {\n const nextVoice = activeVoices[r] as MidiVoice;\n nextVoice.activeVoicesIndex--;\n activeVoices[r - 1] = nextVoice;\n activeVoices[r] = null;\n }\n numActiveVoices--;\n n--;\n }\n }\n}\n\nexport function playActiveVoices(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n (activeVoices[n] as MidiVoice).nextframe();\n }\n}\n\nexport function fillSampleBuffer(): void {\n cleanupInactiveVoices();\n\n let voiceTransitionBufferNdx = 0;\n\n for (let bufferpos = bufferposstart; bufferpos < bufferposend; bufferpos += 4) {\n playActiveVoices();\n\n for (let ch = 0; ch < 16; ch++) {\n const midichannel = midichannels[ch];\n const channelsignal = midichannel.signal;\n\n channelsignal.left += midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx];\n midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx] = 0;\n channelsignal.right +=midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx+1];\n midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx+1] = 0;\n \n midichannel.preprocess(); \n \n channelsignal.left *= midichannel.pan.leftLevel * midichannel.volume;\n channelsignal.right *= midichannel.pan.rightLevel * midichannel.volume;\n\n const reverb = midichannel.reverb;\n\n mainline.add(channelsignal.left, channelsignal.right);\n reverbline.add(channelsignal.left * reverb, channelsignal.right * reverb);\n midichannel.signal.clear();\n }\n\n freeverb.tick(reverbline);\n\n outputline.add(\n mainline.left + reverbline.left,\n mainline.right + reverbline.right\n );\n\n postprocess();\n\n store(bufferpos, outputline.left);\n store(bufferpos + sampleBufferBytesPerChannel, outputline.right);\n\n mainline.clear();\n reverbline.clear();\n outputline.clear();\n voiceTransitionBufferNdx += 2;\n }\n}\n\nconst defaultMidiChannel = new MidiChannel(1, (channel: MidiChannel) => new DefaultInstrument(channel));\n\nfor (let ch = 0; ch < 16; ch++) {\n midichannels[ch] = defaultMidiChannel;\n}\n\ninitializeMidiSynth();\n\n","midi/sequencer/midiparts.ts":"import { MidiSequencerPart, MidiSequencerPartSchedule } from \"./midisequencerpart\";\n\nexport const midiparts: MidiSequencerPart[] = new Array();\nexport const midipartschedule: MidiSequencerPartSchedule[] = new Array();\n","midi/sequencer/midisequencer.ts":"import { SAMPLERATE } from \"../../environment\";\nimport { midiparts, midipartschedule } from \"./midiparts\";\nimport { fillSampleBuffer, sampleBufferFrames } from \"../midisynth\";\n\nconst PLAY_EVENT_INTERVAL = ((sampleBufferFrames * 1000) as f64 / SAMPLERATE);\n\nexport let currentTimeMillis: f64 = 0;\n\nexport function seek(time: i32): void {\n currentTimeMillis = time as f64;\n\n for (let ndx = 0;\n ndx < midipartschedule.length;\n ndx++) {\n const scheduleEntry = midipartschedule[ndx];\n const midiSequencerPart = midiparts[scheduleEntry.midipartindex];\n if (scheduleEntry.endTime >= currentTimeMillis && scheduleEntry.startTime <= currentTimeMillis) {\n midiSequencerPart.seek(Math.round(currentTimeMillis) as i32 - scheduleEntry.startTime);\n } else {\n midiSequencerPart.seek(0);\n }\n }\n}\n\nexport function playMidiPartEvents(): void {\n for (let ndx = 0;\n ndx < midipartschedule.length;\n ndx++) {\n const scheduleEntry = midipartschedule[ndx]; \n if (scheduleEntry.startTime > currentTimeMillis) {\n break;\n }\n const midiSequencerPart = midiparts[scheduleEntry.midipartindex];\n if (currentTimeMillis <= (scheduleEntry.endTime + PLAY_EVENT_INTERVAL)) {\n midiSequencerPart.playEvents(Math.round(currentTimeMillis) as i32 - scheduleEntry.startTime);\n }\n }\n}\n\nexport function playEventsAndFillSampleBuffer(): void {\n playMidiPartEvents();\n fillSampleBuffer();\n currentTimeMillis += PLAY_EVENT_INTERVAL;\n}\n\nexport function setMidiPartSchedule(ndx: i32, midipartindex: i32, startTime: i32): void {\n midipartschedule[ndx].updateEndTime(midipartindex, startTime);\n}\n","midi/sequencer/midisequencerpart.ts":"import { midiparts, midipartschedule } from \"./midiparts\";\nimport { shortmessage } from \"../midisynth\";\n\nexport class MidiSequencerPart {\n currentEventTime: i32 = 0;\n currentEventIndex: i32 = 0;\n previousTargetTime: i32 = 0;\n lastEventTime: i32 = 0;\n\n constructor(public eventlist: u8[]) {\n let lastEventTime = 0;\n for (let ndx = 0; ndx < this.eventlist.length;ndx += 3) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += (((deltaTimePart & 0x7f) as i32) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n lastEventTime = lastEventTime + deltaTime;\n }\n this.lastEventTime = lastEventTime;\n }\n\n playEvents(targetTime: i32): void {\n if (targetTime < this.previousTargetTime) {\n this.currentEventTime = 0;\n this.currentEventIndex = 0;\n }\n this.previousTargetTime = targetTime;\n let ndx = this.currentEventIndex;\n\n while (ndx < this.eventlist.length) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += (((deltaTimePart & 0x7f) as i32) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n const newTime = this.currentEventTime + deltaTime;\n\n if (newTime <= targetTime) {\n shortmessage(this.eventlist[ndx++], this.eventlist[ndx++], this.eventlist[ndx++]);\n\n this.currentEventTime = newTime;\n this.currentEventIndex = ndx;\n } else {\n break;\n }\n }\n }\n\n seek(targetTime: i32): void {\n this.currentEventIndex = 0;\n this.currentEventTime = 0;\n let ndx = this.currentEventIndex;\n\n while (ndx < this.eventlist.length) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += ((deltaTimePart & 0x7f) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n const newTime = this.currentEventTime + deltaTime;\n\n if (newTime < targetTime) {\n ndx += 3;\n this.currentEventTime = newTime;\n this.currentEventIndex = ndx;\n } else if (newTime === targetTime) {\n this.currentEventTime = newTime;\n } else {\n break;\n }\n }\n }\n}\n\nexport class MidiSequencerPartSchedule {\n public endTime: i32\n\n constructor(\n public midipartindex: i32,\n public startTime: i32) {\n this.endTime = midiparts[midipartindex].lastEventTime + startTime;\n }\n\n updateEndTime(midipartindex: i32, startTime: i32): void {\n this.startTime = startTime;\n this.midipartindex = midipartindex;\n this.endTime = midiparts[midipartindex].lastEventTime + startTime;\n }\n}\n","mixes/empty.mix.ts":"import { Kick2, SawBass, Instrument,\n StereoSignal,\n Freeverb } from \"./globalimports\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst kick = new Kick2();\nconst sawbass = new SawBass();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n ([kick, sawbass] as Instrument[])[channel].note = value;\n}\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\n@inline\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear();\n reverbline.clear();\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.5, 0.5);\n\n sawbass.next();\n mainline.addStereoSignal(sawbass.signal, 0.5, 0.5);\n reverbline.addStereoSignal(sawbass.signal, 0.1, 0.5);\n\n freeverb.tick(reverbline);\n\n store(leftSampleBufferPtr, mainline.left + reverbline.left);\n store(rightSampleBufferPtr, mainline.right + reverbline.right); \n}","mixes/globalimports.ts":"export { createInstrumentArray } from '../common/mixcommon';\nexport { AllPass } from '../fx/allpass';\nexport { AllPassFloat } from '../fx/allpass';\nexport { BandPass } from '../fx/bandpass';\nexport { Comb } from '../fx/comb';\nexport { DelayLine } from '../fx/delayline';\nexport { DelayLineFloat } from '../fx/delayline';\nexport { EQBand } from '../fx/eqband';\nexport { Freeverb } from '../fx/freeverb';\nexport { Limiter } from '../fx/limiter';\nexport { MidSideProcessor } from '../fx/midsideprocessor';\nexport { MonoCompressor } from '../fx/monocompressor';\nexport { StereoCompressor } from '../fx/monocompressor';\nexport { MultiBandEQ } from '../fx/multibandeq';\nexport { StereoCompressor } from '../fx/stereocompressor';\nexport { TriBandEQ } from '../fx/tribandeq';\nexport { TriBandStereoCompressor } from '../fx/tribandstereocompressor';\nexport { DeepBass } from '../instruments/bass/deepbass';\nexport { SawBass2 } from '../instruments/bass/sawbass2.class';\nexport { SawBass3 } from '../instruments/bass/sawbass3';\nexport { DriveLead } from '../instruments/drivelead.class';\nexport { Kick2 } from '../instruments/drums/kick2.class';\nexport { Rimshot } from '../instruments/drums/rimshot.class';\nexport { Snare2 } from '../instruments/drums/snare2.class';\nexport { Hihat } from '../instruments/hihat.class';\nexport { Instrument } from '../instruments/instrument.class';\nexport { Kick } from '../instruments/kick.class';\nexport { BrassyLead } from '../instruments/lead/brassy';\nexport { Eftang } from '../instruments/lead/eftang';\nexport { SineLead } from '../instruments/lead/sinelead';\nexport { FlatPad } from '../instruments/pad/flatpad.class';\nexport { SoftPad } from '../instruments/pad/softpad.class';\nexport { Pad } from '../instruments/pad.class';\nexport { SubPiano } from '../instruments/piano/subpiano';\nexport { SawBass } from '../instruments/sawbass.class';\nexport { Snare } from '../instruments/snare.class';\nexport { SquareLead } from '../instruments/squarelead.class';\nexport { Test4KlangString } from '../instruments/string1.class';\nexport { TestInstrument } from '../instruments/testinstrument.class';\nexport { Complex } from '../math/fft';\nexport { FFT } from '../math/fft';\nexport { createFFT } from '../math/fft';\nexport { setComplex } from '../math/fft';\nexport { getComplexRe } from '../math/fft';\nexport { getComplexIm } from '../math/fft';\nexport { calculateFFT } from '../math/fft';\nexport { calculateIFFT } from '../math/fft';\nexport { PI } from '../math/sin';\nexport { sin } from '../math/sin';\nexport { cos } from '../math/sin';\nexport { AudioPlayerChannel } from '../midi/instruments/audioplayer';\nexport { AudioPlayer } from '../midi/instruments/audioplayer';\nexport { MonoAudioPlayer } from '../midi/instruments/audioplayer';\nexport { allocateAudioBuffer } from '../midi/instruments/audioplayer';\nexport { DefaultInstrument } from '../midi/instruments/defaultinstrument';\nexport { MAX_ACTIVE_VOICES_SHIFT } from '../midi/midisynth';\nexport { MAX_ACTIVE_VOICES } from '../midi/midisynth';\nexport { midichannels } from '../midi/midisynth';\nexport { activeVoices } from '../midi/midisynth';\nexport { numActiveVoices } from '../midi/midisynth';\nexport { voiceActivationCount } from '../midi/midisynth';\nexport { sampleBufferFrames } from '../midi/midisynth';\nexport { sampleBufferBytesPerChannel } from '../midi/midisynth';\nexport { sampleBufferChannels } from '../midi/midisynth';\nexport { samplebuffer } from '../midi/midisynth';\nexport { outputline } from '../midi/midisynth';\nexport { MidiChannel } from '../midi/midisynth';\nexport { MidiVoice } from '../midi/midisynth';\nexport { shortmessage } from '../midi/midisynth';\nexport { getActiveVoicesStatusSnapshot } from '../midi/midisynth';\nexport { allNotesOff } from '../midi/midisynth';\nexport { cleanupInactiveVoices } from '../midi/midisynth';\nexport { playActiveVoices } from '../midi/midisynth';\nexport { fillSampleBuffer } from '../midi/midisynth';\nexport { Q_BUTTERWORTH } from '../synth/biquad';\nexport { FilterType } from '../synth/biquad';\nexport { Coefficients } from '../synth/biquad';\nexport { BiQuadFilter } from '../synth/biquad';\nexport { LoPassBiQuadFilter } from '../synth/biquad';\nexport { HiPassBiQuadFilter } from '../synth/biquad';\nexport { beatToFrame } from '../synth/bpm';\nexport { softclip } from '../synth/clip';\nexport { hardclip } from '../synth/clip';\nexport { decibelToGain } from '../synth/decibel';\nexport { midiLevelToDecibel } from '../synth/decibel';\nexport { midiLevelToGain } from '../synth/decibel';\nexport { EnvelopeState } from '../synth/envelope.class';\nexport { Envelope } from '../synth/envelope.class';\nexport { IFFTOscillator } from '../synth/ifftoscillator.class';\nexport { Noise } from '../synth/noise.class';\nexport { notefreq } from '../synth/note';\nexport { Pan } from '../synth/pan.class';\nexport { SawOscillator } from '../synth/sawoscillator.class';\nexport { WaveShaper } from '../synth/shaper';\nexport { SineOscillator } from '../synth/sineoscillator.class';\nexport { SquareOscillator } from '../synth/squareoscillator.class';\nexport { StereoSignal } from '../synth/stereosignal.class';\nexport { TriangleOscillator } from '../synth/triangleoscillator.class';\nexport { noise } from '../synth/waveguide';\nexport { WaveGuide } from '../synth/waveguide';\nexport { AuxExciterWaveGuide } from '../synth/waveguide';\nexport { AudioExciterWaveGuide } from '../synth/waveguide';\nexport { CustomExciterWaveGuide } from '../synth/waveguide';","mixes/goodtimes.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { TestInstrument } from \"../instruments/testinstrument.class\";\n\nimport { Pad } from \"../instruments/pad.class\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Rimshot } from \"../instruments/drums/rimshot.class\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { SquareLead } from \"../instruments/squarelead.class\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SawBass2 } from \"../instruments/bass/sawbass2.class\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.2;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet flute = new TestInstrument();\nlet drivelead = new DriveLead();\nlet bass = new SawBass2();\nlet pad1 = new Pad();\nlet pad2 = new Pad();\nlet pad3 = new Pad();\nlet kick = new Kick2();\nlet rimshot = new Rimshot();\nlet hihat = new Hihat();\nlet squarelead = new SquareLead();\n\nlet freeverb = new Freeverb();\n\nlet delayLeft: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\nlet delayRight: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n flute.note = value;\n break;\n case 1:\n bass.note = value;\n break;\n case 2:\n pad1.note = value;\n break;\n case 3:\n pad2.note = value;\n break;\n case 4:\n pad3.note = value;\n break;\n case 5:\n kick.note = value;\n break;\n case 6:\n rimshot.note = value;\n break;\n case 7:\n drivelead.note = value;\n break;\n case 8:\n hihat.note = value;\n break;\n case 9:\n squarelead.note = value;\n break;\n }\n \n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n flute.next();\n pad1.next(); \n pad2.next();\n pad3.next(); \n kick.next();\n rimshot.next();\n hihat.next();\n bass.next(); \n drivelead.next();\n squarelead.next();\n\n mainline.addStereoSignal(flute.signal, 0.6, 0.0);\n echoline.addStereoSignal(flute.signal, 0.5, 1.0);\n \n mainline.addStereoSignal(pad1.signal, 0.5, 0.25);\n echoline.addStereoSignal(pad1.signal, 0.3, 0.25); \n mainline.addStereoSignal(pad2.signal, 0.5, 0.5);\n echoline.addStereoSignal(pad2.signal, 0.25, 0.5);\n mainline.addStereoSignal(pad3.signal, 0.5, 0.75);\n echoline.addStereoSignal(pad3.signal, 0.25, 0.75);\n\n mainline.addStereoSignal(kick.signal, 1.7, 0.5);\n reverbline.addStereoSignal(kick.signal, 0.08, 0.0);\n \n mainline.addStereoSignal(rimshot.signal, 0.75, 0.6);\n reverbline.addStereoSignal(rimshot.signal, 0.20, 0.4);\n \n mainline.addStereoSignal(hihat.signal, 1.0, 0.4);\n reverbline.addStereoSignal(hihat.signal, 0.2, 0.6);\n\n mainline.addStereoSignal(bass.signal, 0.6, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.07, 0.0);\n\n mainline.addStereoSignal(drivelead.signal, 0.17, 0.4);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.6);\n\n mainline.addStereoSignal(squarelead.signal,0.6, 0.6);\n echoline.addStereoSignal(squarelead.signal, 0.6, 0.0);\n\n echoline.left += delayRight.read() * 0.5;\n echoline.right += delayLeft.read() * 0.5;\n \n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n reverbline.addStereoSignal(echoline, 0.5, 0.5);\n \n freeverb.tick(reverbline);\n \n let left = gain * (mainline.left + echoline.left + reverbline.left);\n let right = gain * (mainline.right + echoline.right + reverbline.right);\n\n if (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.45, 1.0, 0.9 , 1.3, 1.05, 1.0);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/midi.mix.ts":"import { midichannels, MidiChannel, MidiVoice, SineOscillator, Envelope, notefreq } from './globalimports';\nimport { outputline } from '../midi/midisynth';\nimport { hardclip } from '../synth/clip';\n\nclass SimpleSine extends MidiVoice {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.1, 0.0, 1.0, 0.1);\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.osc.frequency = notefreq(note);\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return this.env.isDone();\n }\n\n nextframe(): void {\n const signal = this.osc.next() * this.env.next() * this.velocity / 256;\n this.channel.signal.addMonoSignal(signal, 0.2, 0.7);\n }\n}\n\nexport function initializeMidiSynth(): void {\n midichannels[0] = new MidiChannel(6, (channel: MidiChannel) => new SimpleSine(channel));\n}\n\nexport function postprocess(): void {\n outputline.left = hardclip(outputline.left);\n outputline.right = hardclip(outputline.right);\n}","mixes/newyear.mix.ts":"/**\n * Mix for \"WASM song\"\n */\nimport { EQBand } from \"../fx/eqband\";\nimport { Envelope } from '../synth/envelope.class';\nimport { Snare } from \"../instruments/snare.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { BrassyLead } from \"../instruments/lead/brassy\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { WaveShaper } from '../synth/shaper';\nimport { createInstrumentArray } from '../common/mixcommon';\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nconst ENABLE_MULTIBAND_COMPRESSOR = true;\n\nconst gain: f32 = 0.5;\n\nconst bass = new SawBass3();\nconst lead = new Eftang();\nconst kick = new Kick();\nconst snare = new Snare();\nconst hihat = new Hihat();\n\n\nexport class FlatPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.1, 1.0, 0.1);\n readonly filterenvelope: Envelope = new Envelope(0.001, 1.0, 1.0, 0.1);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n \n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo: f32 = (lfo * 0.9) + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n \nconst pads: FlatPad[] = createInstrumentArray(10, () => new FlatPad());\nlet padsVolume: f32 = 1.0;\n\nclass SineLead {\n private _note: f32;\n \n readonly osc: SineOscillator = new SineOscillator();\n readonly env1: Envelope = new Envelope(0.02, 0.15, 0.5, 0.3); \n readonly signal: StereoSignal = new StereoSignal();\n\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this._note = note;\n this.env1.attack(); \n } else {\n this.env1.release(); \n } \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n \n let osc: f32 = this.osc.next(); \n osc *= env1;\n\n const pan = this._note / 127;\n\n this.signal.left = osc * pan;\n this.signal.right = osc * (1 - pan); \n } \n}\n\nexport class DriveLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.03, 1.0, 0.6, 0.2);\n readonly sawoscillatorl: SawOscillator = new SawOscillator();\n readonly sawoscillatorr: SawOscillator = new SawOscillator();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n readonly lfoenvelope: Envelope = new Envelope(1.0, 0, 1.0, 0.1);\n readonly lfo: SineOscillator = new SineOscillator();\n private baseFrequency : f32;\n private pitchbend: f32 = 0;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note + this.pitchbend);\n this.lfo.frequency = 8;\n this.envelope.attack(); \n this.lfoenvelope.attack(); \n this._note = note;\n } else {\n this.envelope.release();\n this.lfoenvelope.release();\n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n setPitchbend(bend: f32): void {\n \tthis.pitchbend = bend;\n \tthis.baseFrequency = notefreq(this._note + bend); \t\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env===0) {\n this.signal.clear();\n return;\n } \n \n let lfo: f32 = this.lfo.next() * 3 * this.lfoenvelope.next();\n this.sawoscillatorl.frequency = this.baseFrequency + lfo + 0.5;\n this.sawoscillatorr.frequency = this.baseFrequency + lfo - 0.5;\n \n let left = env* this.sawoscillatorl.next() + this.signal.right * 0.5;\n left = this.shaper.process(left);\n \n let right = env* this.sawoscillatorr.next() + this.signal.left * 0.5;\n right = this.shaper.process(right);\n \n this.signal.left = left * 0.5 + right;\n this.signal.right = right * 0.5 + left; \n } \n}\n\nconst sinelead = new SineLead();\nconst drivelead = new DriveLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n const setChannelValueFunctions: usize[] = [\n changetype((value:f32): void => {bass.note = value;}),\n changetype((value:f32): void => {lead.note = value;}),\n changetype((value:f32): void => {sinelead.note = value;}),\n changetype((value:f32): void => {kick.note = value;}),\n changetype((value:f32): void => {snare.note = value;}),\n changetype((value:f32): void => {hihat.note = value;}),\n changetype((value:f32): void => {pads[0].note = value;}),\n changetype((value:f32): void => {pads[1].note = value;}),\n changetype((value:f32): void => {pads[2].note = value;}),\n changetype((value:f32): void => {pads[3].note = value;}), \n changetype((value:f32): void => {pads[4].note = value;}), \n changetype((value:f32): void => {pads[5].note = value;}),\n changetype((value:f32): void => {pads[6].note = value;}),\n changetype((value:f32): void => {pads[7].note = value;}),\n changetype((value:f32): void => {pads[8].note = value;}),\n changetype((value:f32): void => {pads[9].note = value;}),\n changetype((value:f32): void => {\n if(value > 0) {\n\t padsVolume = value / 100.0;\n }\n }),\n changetype((value:f32): void => {drivelead.note = value;}),\n changetype((value:f32): void => {\n if(value > 0) {\n\t drivelead.setPitchbend((value - 64) / 32);\n }\n })\n \n ];\n\n changetype<(val: f32) => void>(setChannelValueFunctions[channel])(value);\n}\n\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (6/8) * 60 / 120) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\n\n\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n let left: f32 = 0;\n let right: f32 = 0;\n\n mainline.clear();\n reverbline.clear();\n echoline.clear();\n\n bass.next();\n mainline.addStereoSignal(bass.signal, 1.0, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.0, 0.5);\n\n lead.next();\n mainline.addStereoSignal(lead.signal, 0.8, 0.5);\n echoline.addStereoSignal(lead.signal, 0.8, 0.5);\n\n \tdrivelead.next();\n mainline.addStereoSignal(drivelead.signal, 0.1, 0.5);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.5);\n\n \tsinelead.next();\n mainline.addStereoSignal(sinelead.signal, 1.0, 0.5);\n echoline.addStereoSignal(sinelead.signal, 1.2, 0.5);\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.8, 0.5);\n\n snare.next();\n mainline.addStereoSignal(snare.signal, 0.8, 0.5); \n\n hihat.next();\n mainline.addStereoSignal(hihat.signal, 0.8, 0.5);\n\n pads.forEach(pad => {\n pad.next();\n mainline.addStereoSignal(pad.signal, 0.45 * padsVolume, 0.5);\n });\n \n echoline.left += delayRight.read() * 0.7;\n echoline.right += delayLeft.read() * 0.7;\n\n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n freeverb.tick(reverbline);\n\n left = gain * (mainline.left + reverbline.left + echoline.left);\n right = gain * (mainline.right + reverbline.right + echoline.right);\n\n \tif (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.45, 0.6, 0.9 , 1.20, 1.05, 1.0);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/protracker.mix.ts":"import { EQBand } from \"../fx/eqband\";\n\nimport { Snare } from \"../instruments/snare.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { BrassyLead } from \"../instruments/lead/brassy\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { FlatPad } from \"../instruments/pad/flatpad.class\";\nimport { createInstrumentArray } from '../common/mixcommon';\nimport { Freeverb } from \"../fx/freeverb\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.2;\n\nconst bass = new SawBass3();\nconst lead = new Eftang();\nconst kick = new Kick();\nconst snare = new Snare();\nconst hihat = new Hihat();\nconst brassylead = new BrassyLead();\nconst pads: FlatPad[] = createInstrumentArray(4, () => new FlatPad());\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n bass.note = value;\n break;\n case 1:\n lead.note = value;\n break;\n case 2:\n kick.note = value;\n break;\n case 3:\n snare.note = value;\n break;\n case 4:\n hihat.note = value;\n break;\n case 5:\n brassylead.note = value;\n break;\n case 6:\n case 7:\n case 8:\n case 9:\n pads[channel-6].note = value;\n break; \n \n }\n \n}\n\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n let left: f32 = 0;\n let right: f32 = 0;\n\n mainline.clear();\n reverbline.clear();\n\n bass.next();\n mainline.addStereoSignal(bass.signal, 0.2, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.1, 0.5);\n\n lead.next();\n mainline.addStereoSignal(lead.signal, 0.2, 0.5);\n reverbline.addStereoSignal(lead.signal, 0.02, 0.5);\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.2, 0.5);\n\n snare.next();\n mainline.addStereoSignal(snare.signal, 0.2, 0.5); \n\n hihat.next();\n mainline.addStereoSignal(hihat.signal, 0.2, 0.5);\n\n brassylead.next();\n mainline.addStereoSignal(brassylead.signal, 0.5, 0.5);\n reverbline.addStereoSignal(brassylead.signal, 0.1, 0.5);\n\n pads.forEach(pad => {\n pad.next();\n mainline.addStereoSignal(pad.signal, 0.5, 0.5);\n \n });\n \n freeverb.tick(reverbline);\n\n left = gain * (mainline.left + reverbline.left );\n right = gain * (mainline.right + reverbline.right );\n\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n \n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/shuffle.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SubPiano } from \"../instruments/piano/subpiano\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Snare } from \"../instruments/snare.class\";\nimport { DeepBass } from \"../instruments/bass/deepbass\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { SoftPad } from \"../instruments/pad/softpad.class\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { SineLead } from \"../instruments/lead/sinelead\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 3;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 0;\n\nconst gain: f32 = 0.13;\nconst ENABLE_MULTIBAND_COMPRESSOR = true;\n\nlet freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (3/8) * 60 / 70) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nfunction createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n\nconst pianos: SubPiano[] = createInstrumentArray(8, () => new SubPiano());\nconst pads: SoftPad[] = createInstrumentArray(8, () => new SoftPad());\nconst driveleads: DriveLead[] = createInstrumentArray(3, () => new DriveLead());\n\nconst kick = new Kick2();\nconst bass = new DeepBass();\nconst eftang = new Eftang();\nconst snare = new Snare();\nconst hihat = new Hihat();\nconst sinelead = new SineLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(true) {\n case (channel < 8):\n pianos[channel].note = value;\n break;\n case channel === 8:\n kick.note = value;\n break;\n case channel === 9:\n snare.note = value;\n break;\n case channel === 10:\n hihat.note = value;\n break;\n case channel === 11:\n bass.note = value\n break;\n case channel === 12:\n eftang.note = value;\n break;\n case channel < 21:\n pads[channel - 13].note = value;\n break;\n case channel === 21:\n sinelead.note = value;\n break;\n case channel < 25:\n driveleads[channel - 22].note = value;\n break;\n case channel === 25:\n if(value > 1) {\n for(let n = 0; n 1.0) {\n left = 1.0;\n }\n\n if (Math.abs(right) > 1.0) {\n right = 1.0;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/simple.mix.ts":"import { SawOscillator, Instrument, Noise, BiQuadFilter, FilterType, \n StereoSignal,\n Freeverb, SineOscillator, Envelope, notefreq } from \"./globalimports\";\n import { SAMPLERATE } from '../environment';\n \n export const PATTERN_SIZE_SHIFT: usize = 4;\n export const BEATS_PER_PATTERN_SHIFT: usize = 2;\n \n const mainline = new StereoSignal();\n const reverbline = new StereoSignal();\n const freeverb = new Freeverb();\n \n class Kick extends Instrument {\n private velocity: f32;\n envelope: Envelope = new Envelope(0.0, 0.2, 0, 0.2);\n filterenvelope: Envelope = new Envelope(0.0, 0.05, 0.05, 0.1);\n sawoscillator: SawOscillator = new SawOscillator();\n noise: Noise = new Noise();\n \n filter: BiQuadFilter = new BiQuadFilter();\n \n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 150;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.filterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n }\n \n next(): void { \n let env: f32 = this.envelope.next();\n this.sawoscillator.frequency = 20.0 + (env * 150.0);\n \n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 40 + (this.filterenvelope.next() * 2000), 0.2);\n \n let osc1: f32 = this.envelope.next() * this.velocity * this.sawoscillator.next() * 0.8 + this.noise.next();\n \n osc1 = this.filter.process(osc1);\n \n const val = env * osc1;\n \n mainline.left+=val;\n mainline.right+=val;\n } \n }\n \n class Lead extends Instrument {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.1,0.1,1.0,0.1);\n \n set note(note: f32) {\n if(note > 1) {\n this.osc.frequency = notefreq(note);\n this.env.attack();\n } else if (note === 0) {\n this.env.release();\n }\n }\n @inline\n next(): void {\n const val = this.osc.next() * this.env.next() * 0.3;\n mainline.left += val;\n mainline.right += val;\n }\n }\n \n \n const voices: Instrument[] = [\n new Kick(),\n new Lead(),\n new Lead(),\n new Lead(),\n new Lead()\n ];\n \n export function setChannelValue(channel: usize, value: f32): void {\n voices[channel].note = value;\n }\n \n \n @inline\n export function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear();\n reverbline.clear();\n \n for(var n=0;n(leftSampleBufferPtr, mainline.left + reverbline.left);\n store(rightSampleBufferPtr, mainline.right + reverbline.right); \n }","mixes/test.mix.ts":"// This mix was used in the song \"Groove is in the code\"\n\nimport { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { TestInstrument } from \"../instruments/testinstrument.class\";\nimport { SawBass } from \"../instruments/sawbass.class\";\nimport { Pad } from \"../instruments/pad.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { Snare } from \"../instruments/snare.class\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { SquareLead } from \"../instruments/squarelead.class\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.15;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet flute = new TestInstrument();\nlet drivelead = new DriveLead();\nlet bass = new SawBass();\nlet pad1 = new Pad();\nlet pad2 = new Pad();\nlet pad3 = new Pad();\nlet kick = new Kick();\nlet snare = new Snare();\nlet hihat = new Hihat();\nlet squarelead = new SquareLead();\n\nlet freeverb = new Freeverb();\n\nlet delayLeft: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\nlet delayRight: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(15,500,8000,19000);\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n flute.note = value;\n break;\n case 1:\n bass.note = value;\n break;\n case 2:\n pad1.note = value;\n break;\n case 3:\n pad2.note = value;\n break;\n case 4:\n pad3.note = value;\n break;\n case 5:\n kick.note = value;\n break;\n case 6:\n snare.note = value;\n break;\n case 7:\n drivelead.note = value;\n break;\n case 8:\n hihat.note = value;\n break;\n case 9:\n squarelead.note = value;\n break;\n }\n \n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n flute.next();\n pad1.next(); \n pad2.next();\n pad3.next(); \n kick.next();\n snare.next();\n hihat.next();\n bass.next(); \n drivelead.next();\n squarelead.next();\n\n mainline.addStereoSignal(flute.signal, 0.7, 0.0);\n echoline.addStereoSignal(flute.signal, 0.6, 1.0);\n \n mainline.addStereoSignal(pad1.signal, 0.58, 0.25);\n echoline.addStereoSignal(pad1.signal, 0.35, 0.25); \n mainline.addStereoSignal(pad2.signal, 0.58, 0.5);\n echoline.addStereoSignal(pad2.signal, 0.30, 0.5);\n mainline.addStereoSignal(pad3.signal, 0.58, 0.75);\n echoline.addStereoSignal(pad3.signal, 0.30, 0.75);\n\n mainline.addStereoSignal(kick.signal, 1.6, 0.5);\n reverbline.addStereoSignal(kick.signal, 0.05, 0.0);\n \n mainline.addStereoSignal(snare.signal, 0.38, 0.6);\n echoline.addStereoSignal(snare.signal, 0.1, 0.4);\n \n mainline.addStereoSignal(hihat.signal, 0.7, 0.4);\n reverbline.addStereoSignal(hihat.signal, 0.05, 0.6);\n\n mainline.addStereoSignal(bass.signal, 1.2, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.1, 0.0);\n\n mainline.addStereoSignal(drivelead.signal, 0.17, 0.4);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.6);\n\n mainline.addStereoSignal(squarelead.signal,0.6, 0.6);\n echoline.addStereoSignal(squarelead.signal, 0.6, 0.0);\n\n echoline.left += delayRight.read() * 0.5;\n echoline.right += delayLeft.read() * 0.5;\n \n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n reverbline.addStereoSignal(echoline, 0.5, 0.5);\n \n freeverb.tick(reverbline);\n \n let left = gain * (mainline.left + echoline.left + reverbline.left);\n let right = gain * (mainline.right + echoline.right + reverbline.right);\n\n if (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.3, 0.3, 0.5 , 2.0, 0.80, 0.9);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = left;\n right = right;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/webchip.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SubPiano } from \"../instruments/piano/subpiano\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Snare2 } from \"../instruments/drums/snare2.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { SoftPad } from \"../instruments/pad/softpad.class\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { SineLead } from \"../instruments/lead/sinelead\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.13;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (2/3) * 60 / 110) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nfunction createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n\nconst pianos: SubPiano[] = createInstrumentArray(8, () => new SubPiano());\nconst pads: SoftPad[] = createInstrumentArray(8, () => new SoftPad());\n\nconst kick = new Kick2();\nconst bass = new SawBass3();\nconst eftang = new Eftang();\nconst snare = new Snare2();\nconst hihat = new Hihat();\nconst sinelead = new SineLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(true) {\n case (channel < 8):\n pianos[channel].note = value;\n break;\n case channel === 8:\n kick.note = value;\n break;\n case channel === 9:\n snare.note = value;\n break;\n case channel === 10:\n hihat.note = value;\n break;\n case channel === 11:\n bass.note = value\n break;\n case channel === 12:\n eftang.note = value;\n break;\n case channel < 21:\n pads[channel - 13].note = value;\n break;\n case channel === 21:\n sinelead.note = value;\n break;\n }\n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n for(let n = 0;n 1.0) {\n left = 1.0;\n }\n\n if (Math.abs(right) > 1.0) {\n right = 1.0;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","synth/biquad.ts":"import { SAMPLERATE } from \"../environment\";\nimport { cos, PI, sin } from \"../math/sin\";\n\n// Taken from https://docs.rs/crate/biquad/0.2.0/source/src/\n\nexport const Q_BUTTERWORTH = 0.7071067811865475 as f32; // 1/Math.sqrt(2)\n\nexport enum FilterType {\n SinglePoleLowPass = 1 as i8,\n LowPass = 2 as i8,\n HighPass = 3 as i8,\n Notch = 4 as i8\n}\n\nexport class Coefficients {\n // Denominator coefficients\n a1: f32;\n a2: f32;\n\n // Nominator coefficients\n b0: f32;\n b1: f32;\n b2: f32;\n\n phaseSamples: f32;\n magnitude: f32;\n\n calculatePhaseAndMagnitudeForFreq(freq: f32): void {\n const w: f32 = 2 * Mathf.PI * freq / SAMPLERATE;\n \n const cos1: f32 = Mathf.cos(-1 * w);\n const cos2: f32 = Mathf.cos(-2 * w);\n \n const sin1: f32 = Mathf.sin(-1 * w);\n const sin2: f32 = Mathf.sin(-2 * w);\n \n const realZeros: f32 = this.b0 + this.b1 * cos1 + this.b2 * cos2;\n const imagZeros: f32 = this.b1 * sin1 + this.b2 * sin2;\n \n const realPoles: f32 = 1 + this.a1 * cos1 + this.a2 * cos2;\n const imagPoles: f32 = this.a1 * sin1 + this.a2 * sin2;\n \n const divider: f32 = realPoles * realPoles + imagPoles * imagPoles;\n \n const realHw: f32 = (realZeros * realPoles + imagZeros * imagPoles) / divider;\n const imagHw: f32 = (imagZeros * realPoles - realZeros * imagPoles) / divider;\n \n this.magnitude = Mathf.sqrt(realHw * realHw + imagHw * imagHw);\n\n const phase: f32 = Mathf.atan2(imagHw, realHw);\n \n this.phaseSamples = -(phase / (2*Mathf.PI)) * (SAMPLERATE / freq);\n }\n}\n\nexport class BiQuadFilter {\n y1: f32 = 0;\n y2: f32 = 0;\n x1: f32 = 0;\n x2: f32 = 0;\n s1: f32 = 0;\n s2: f32 = 0;\n readonly coeffs: Coefficients = new Coefficients();\n\n processForm2(input: f32): f32 {\n let out = this.s1 + this.coeffs.b0 * input;\n this.s1 = this.s2 + this.coeffs.b1 * input - this.coeffs.a1 * out;\n this.s2 = this.coeffs.b2 * input - this.coeffs.a2 * out;\n\n return out;\n }\n\n process(input: f32): f32 {\n let out = this.coeffs.b0 * input + this.coeffs.b1 * this.x1 + this.coeffs.b2 * this.x2\n - this.coeffs.a1 * this.y1\n - this.coeffs.a2 * this.y2;\n\n this.x2 = this.x1;\n this.x1 = input;\n this.y2 = this.y1;\n this.y1 = out;\n\n return out;\n }\n\n clearBuffers(): void {\n this.y1 = 0;\n this.y2 = 0;\n this.x1 = 0;\n this.x2 = 0;\n this.s1 = 0;\n this.s2 = 0; \n }\n\n /// Creates coefficients based on the biquad filter type, sampling and cutoff frequency, and Q\n /// value. Note that the cutoff frequency must be smaller than half the sampling frequency and\n /// that Q may not be negative, this will result in an `Err()`.\n update_coeffecients(\n filtertype: FilterType,\n fsHertz: f32,\n f0Hertz: f32,\n q_value: f32\n ): void {\n const fLimit = (fsHertz / 2.0) - 1000;\n if (f0Hertz > fLimit) {\n f0Hertz = fLimit;\n }\n\n if (q_value < 0.0) {\n q_value = 0;\n }\n\n let omega: f32 = 2.0 * PI * f0Hertz / fsHertz;\n let alpha: f32;\n let omega_s: f32;\n let omega_c: f32;\n let b0: f32;\n let b1: f32;\n let b2: f32;\n let a0: f32;\n let a1: f32;\n let a2: f32;\n\n\n switch (filtertype) {\n case FilterType.SinglePoleLowPass:\n alpha = omega / (omega + 1.0);\n\n this.coeffs.a1 = alpha - 1.0;\n this.coeffs.a2 = 0.0;\n this.coeffs.b0 = alpha;\n this.coeffs.b1 = 0.0;\n this.coeffs.b2 = 0.0;\n\n break;\n case FilterType.LowPass:\n // The code for omega_s/c and alpha is currently duplicated due to the single pole\n // low pass filter not needing it and when creating coefficients are commonly\n // assumed to be of low computational complexity.\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = (1.0 - omega_c) * 0.5;\n b1 = 1.0 - omega_c;\n b2 = (1.0 - omega_c) * 0.5;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n case FilterType.HighPass:\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = (1.0 + omega_c) * 0.5;\n b1 = -(1.0 + omega_c);\n b2 = (1.0 + omega_c) * 0.5;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n case FilterType.Notch:\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = 1.0;\n b1 = -2.0 * omega_c;\n b2 = 1.0;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n }\n }\n}\n\nexport class LoPassBiQuadFilter extends BiQuadFilter {\n update(frequency: f32, Q: f32): void {\n this.update_coeffecients(FilterType.LowPass, SAMPLERATE, frequency , Q);\n }\n}\n\nexport class HiPassBiQuadFilter extends BiQuadFilter {\n update(frequency: f32, Q: f32): void {\n this.update_coeffecients(FilterType.HighPass, SAMPLERATE, frequency , Q);\n }\n}\n","synth/bpm.ts":"import { SAMPLERATE } from \"../environment\";\n\nexport function beatToFrame(beat: f64, bpm: f32): usize {\n return (SAMPLERATE * beat * 60 / bpm) as usize;\n}\n","synth/clip.ts":"// From https://ccrma.stanford.edu/~jos/pasp/Soft_Clipping.html#29695\n\n/**\n * soft clip signal with 1/3 headroom as result\n * @param signal signal to be clipped\n */\nexport function softclip(signal: f32): f32 {\n if(signal > 1.0) {\n return 2.0/3.0;\n } else if(signal < -1.0) {\n return -2.0/3.0;\n } else {\n return (signal - ((signal * signal * signal) / 3.0));\n }\n}\n\nexport function hardclip(signal: f32): f32 {\n if(signal > 1.0) {\n return 1.0;\n } else if(signal < -1.0) {\n return -1.0;\n } else {\n return signal;\n }\n}","synth/decibel.ts":"export function decibelToGain(dB: f32): f32 {\n return NativeMathf.pow(10, dB/20.0);\n}\n\nexport function midiLevelToDecibel(midiLevel: u8): f32 {\n return 40 * NativeMathf.log10(midiLevel as f32/127);\n}\n\nexport function midiLevelToGain(midiLevel: u8): f32 {\n return decibelToGain(midiLevelToDecibel(midiLevel));\n}","synth/envelope.class.ts":"import { SAMPLERATE } from \"../environment\";\n\nexport enum EnvelopeState {\n ATTACK = 0,\n DECAY = 1,\n SUSTAIN = 2,\n RELEASE = 3,\n DONE = 4\n}\n\nexport class Envelope {\n attackStep: f32;\n decayStep: f32;\n sustainLevel: f32;\n releaseStep: f32;\n \n val: f32 = 0;\n state: EnvelopeState = EnvelopeState.DONE;\n\n constructor(attackTime: f32, decayTime: f32, sustainLevel: f32, releaseTime: f32) {\n this.attackStep = 1.0 / (attackTime * SAMPLERATE);\n this.decayStep = 1.0 / (decayTime * SAMPLERATE);\n this.releaseStep = 1.0 / (releaseTime * SAMPLERATE);\n this.sustainLevel = sustainLevel;\n }\n\n next(): f32 {\n switch(this.state) {\n case EnvelopeState.ATTACK:\n this.val += this.attackStep;\n if(this.val >= 1.0) {\n this.val = 1.0;\n this.state = EnvelopeState.DECAY;\n }\n break;\n case EnvelopeState.DECAY:\n this.val -= this.decayStep;\n if(this.val <= this.sustainLevel) {\n this.val = this.sustainLevel;\n this.state = EnvelopeState.SUSTAIN;\n }\n break;\n case EnvelopeState.SUSTAIN:\n break;\n case EnvelopeState.RELEASE:\n this.val -= this.releaseStep;\n if(this.val <= 0) {\n this.val = 0;\n this.state = EnvelopeState.DONE;\n }\n break;\n case EnvelopeState.DONE:\n break;\n }\n return this.val;\n }\n\n attack(): void {\n this.state = EnvelopeState.ATTACK;\n }\n \n release(): void {\n this.state = EnvelopeState.RELEASE;\n }\n\n isDone(): boolean {\n return this.state === EnvelopeState.DONE;\n }\n}","synth/ifftoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { FFT } from '../math/fft';\n\nexport class IFFTOscillator {\n position: f32 = 0;\n positionincrement: f32 = 0;\n buffersize: f32;\n buffermask: u32;\n fft: FFT;\n scalefactor: f32;\n\n constructor(buffersize_shift: i32) {\n this.fft = new FFT(buffersize_shift);\n this.buffersize = (1 << buffersize_shift) as f32;\n this.buffermask = ~(0xffffffff << buffersize_shift);\n this.scalefactor = (this.buffersize / 2) - 1;\n }\n\n set frequency(frequency: f32) {\n this.positionincrement = (frequency * this.buffersize) / SAMPLERATE;\n }\n\n createWave(real: f32[], imaginary: f32[]): void { \n for (let n = 1; n <= real.length &&\n n <= imaginary.length &&\n n < (this.fft.buffer.length / 2) - 1; n++) {\n this.fft.buffer[n].re = -real[n - 1] * this.scalefactor;\n this.fft.buffer[this.fft.buffer.length - n].re = real[n -1] * this.scalefactor;\n\n this.fft.buffer[n].im = -imaginary[n -1] * this.scalefactor;\n this.fft.buffer[this.fft.buffer.length - n].im = imaginary[n -1] * this.scalefactor;\n }\n }\n\n next(): f32 {\n const bufferposfloor = NativeMathf.floor(this.position);\n const bufferpos = bufferposfloor as i32;\n const t = this.position - bufferposfloor;\n\n const x0 = this.fft.buffer[(bufferpos - 1) & this.buffermask].re;\n const x1 = this.fft.buffer[bufferpos].re;\n const x2 = this.fft.buffer[(bufferpos + 1) & this.buffermask].re;\n const x3 = this.fft.buffer[(bufferpos + 2) & this.buffermask].re;\n \n // cubic interpolation\n \n const a0 = x3 - x2 - x0 + x1;\n const a1 = x0 - x1 - a0;\n const a2 = x2 - x0;\n const a3 = x1;\n const ret = (a0 * (t * t * t)) + (a1 * (t * t)) + (a2 * t) + (a3);\n\n // increment position\n this.position += this.positionincrement;\n this.position %= this.buffersize;\n \n return ret; \n }\n}\n","synth/noise.class.ts":"let x: i32 = 123456789;\nlet y: i32=234567891;\nlet z: i32=345678912;\nlet w: i32=456789123;\nlet c: i32=0; \n\nexport class Noise {\n \n next(): f32 { \n y ^= (y<<5); y ^= (y>>7); y ^= (y<<22); \n\n let t = z+w+c; z = w;\n c = t < 0 ? 1 : 0;\n w = t & 2147483647; \n \n x += 1411392427; \n \n let rnd: f32 = ((x + y + w) & 0xffff) as f32;\n return ((rnd / (1 << 16 as f32))) - 0.5;\n }\n }\n ","synth/note.ts":"const pitchstep: f64 = 1.0004513695322617; // Math.pow(2, (1/128) / 12);\nconst c0: f64 = 8.175798915643707; // 440 * Math.pow(2, -69 / 12);\nlet pitchtable = __new(128 * 128 * 4, idof>());\nlet pitch: f64 = c0;\n\nfor (let n: usize = 0; n < (128 * 128); n++) {\n store(pitchtable + (n << 2), pitch as f32);\n pitch *= pitchstep;\n}\n\nexport function notefreq(note: f32): f32 {\n let pitchtableIndex: usize = (note * 128.0) as usize;\n return load(pitchtable + (pitchtableIndex << 2));\n}","synth/pan.class.ts":"import { StereoSignal } from \"./stereosignal.class\";\n\nconst HALF_OF_SQRT_2 = NativeMathf.sqrt(2) / 2;\n\nexport class Pan {\n leftLevel: f32;\n rightLevel: f32;\n \n constructor() {\n this.setPan(0.5); \n }\n\n /**\n * Don't use as part of the rendering process. Use to calculate pan levels on controller changes\n * @param pan from 0.0 (left) to 1.0 (right). 0.5 is center\n */\n setPan(pan: f32): void {\n const angle = (pan - 0.5) * NativeMathf.PI / 2;\n // left channel\n this.leftLevel = HALF_OF_SQRT_2 * (NativeMathf.cos(angle) - NativeMathf.sin(angle));\n // right channel\n this.rightLevel = HALF_OF_SQRT_2 * (NativeMathf.cos(angle) + NativeMathf.sin(angle));\n }\n}\n","synth/sawoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\n\nexport class SawOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if(this.frequency > 0) {\n let ret = (this.position as f32 / 0x10000 as f32) - 0.5;\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n \n return ret as f32;\n } else {\n return 0;\n }\n }\n }\n ","synth/shaper.ts":"/**\n * Taken from https://github.com/hzdgopher/64klang/blob/master/Player/Player/SynthNode.cpp#L2050\n */\n\nconst NOISEGEN_B0: f32 = 0.99765014648437500;\n\nexport class WaveShaper {\n drive: f32 = 0.5;\n \n process(input: f32): f32 { \n // clamp to -1..1 (a little less)\n let f: f32 = this.drive < NOISEGEN_B0 ? this.drive > -NOISEGEN_B0 ?\n this.drive : -NOISEGEN_B0 : \n NOISEGEN_B0;\n\n // k = 2*amount/(1-amount);\n let v = (f+f)/(1.0-f);\n\n // process f(x) = (1+k)*x/(1+k*abs(x))\n return (1.0 + v) *\n input/\n (1.0 + v * min(abs(input), 1.0)); \n }\n}","synth/sineoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { sin, PI } from '../math/sin';\n\nexport class SineOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n let ret = sin(PI * 2 * (this.position as f32) / (1 << 16 as f32));\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n return ret as f32;\n }\n }\n ","synth/squareoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\n\nexport class SquareOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if(this.frequency > 0) {\n let ret: f32 = this.position as f32 > 0x8000 ? 0.5 : -0.5;\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n \n return ret;\n } else {\n return 0;\n }\n }\n}\n ","synth/stereosignal.class.ts":"import { Pan } from './pan.class';\n\nexport class StereoSignal {\n left: f32 = 0;\n right: f32 = 0;\n\n clear(): void {\n this.left = 0;\n this.right = 0;\n }\n\n /**\n * Add left and right values directly to the signal\n * @param left\n * @param right \n */\n @inline\n add(left: f32, right:f32): void {\n this.left += left;\n this.right += right;\n }\n\n /**\n * Add stereo signal with simple (not proper) panning\n * @param signal \n * @param level \n * @param pan 0.0 - 1.0\n */\n addStereoSignal(signal: StereoSignal, level: f32, pan: f32): void {\n this.left += signal.left * pan * level;\n this.right += signal.right * (1 - pan) * level;\n }\n\n addMonoSignal(signal: f32, level: f32, pan: f32): void {\n this.left += signal * pan * level;\n this.right += signal * (1 - pan) * level;\n }\n}","synth/triangleoscillator.class.ts":"import { SAMPLERATE } from '../environment';\n\nexport class TriangleOscillator {\n position: i32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if (this.frequency > 0) {\n const pos: i32 = this.position;\n let ret: f32;\n if (pos < 0x8000) {\n ret = (pos as f32 / 0x8000 as f32);\n } else {\n ret = (- (pos - 0x8000) as f32 / 0x8000 as f32) + 1.0;\n }\n\n this.position = (((this.position as f32) + (this.frequency / SAMPLERATE)\n * 0x10000 as f32) as i32) & 0xffff;\n\n return ret * 2 - 1 as f32;\n } else {\n return 0;\n }\n }\n}\n","synth/waveguide.ts":"import { SAMPLERATE } from \"../environment\";\nimport { DelayLineFloat } from \"../fx/delayline\";\nimport { MonoAudioPlayer } from \"../midi/instruments/audioplayer\";\nimport { BiQuadFilter, FilterType, LoPassBiQuadFilter, Q_BUTTERWORTH } from \"./biquad\";\nimport { Envelope } from \"./envelope.class\";\nimport { notefreq } from \"./note\";\n\nlet seed: i32 = 1;\n\nexport function noise(): f32 {\n seed = (seed * 1103515245 + 12345) & 0x7fffffff;\n return ((seed as f32 % 1000000 / 1000000) - 0.5) as f32;\n}\n\nexport class WaveGuide {\n envExciter: Envelope;\n filterExciter: BiQuadFilter = new BiQuadFilter();\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackLevel: f32;\n feedbackFilterFreq: f32;\n freq: f32;\n exciterenvlevel: f32;\n\n constructor(exciterAttack: f32, exciterRelease: f32, exciterFilterFreq: f32, feedbackLevel: f32) {\n this.envExciter = new Envelope(exciterAttack,\n exciterRelease, 0,\n exciterRelease);\n this.filterExciter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n exciterFilterFreq, Q_BUTTERWORTH);\n\n this.feedbackLevel = feedbackLevel;\n }\n\n setFilterExciterFreq(freq: f32): void {\n this.filterExciter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n freq, Q_BUTTERWORTH);\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers(); \n this.filterExciter.clearBuffers();\n\n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n this.envExciter.val = 0;\n\n }\n this.exciterenvlevel = 1;\n this.envExciter.attack();\n\n }\n\n process(): f32 {\n const envexciter = this.envExciter.next() * this.exciterenvlevel;\n let exciterSignal: f32 = noise() * envexciter;\n exciterSignal = this.filterExciter.process(exciterSignal);\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n\n }\n}\n\nexport class AuxExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n\n constructor(public exciter: WaveGuide) {\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n\n }\n }\n\n process(): f32 {\n let exciterSignal: f32 = this.exciter.process();\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}\n\nexport class AudioExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n exciterFilter: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n\n constructor(public exciter: MonoAudioPlayer) {\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n this.exciter.restart();\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n this.exciterFilter.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n }\n }\n\n reset(): void {\n this.delay.reset();;\n this.filterFeedback.clearBuffers();\n this.exciterFilter.clearBuffers();\n }\n\n process(): f32 {\n let exciterSignal: f32 = this.exciter.nextframe();\n exciterSignal = this.exciterFilter.process(exciterSignal);\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}\n\nexport class CustomExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n exciterSignal: f32;\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n }\n }\n\n process(): f32 {\n const feedback = this.delay.read();\n let signal = this.exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}","wasi_main.ts":"import { fd_write, iovec} from 'bindings/wasi';\nimport { allocateSampleBuffer, getTick, setBPM, setPatternsPtr, setInstrumentPatternListPtr, fillSampleBufferInterleaved } from './index';\n\nconst patterns: i8[] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,1,1,33,1,36,38,0,36,1,33,36,0,38,1,33,1,45,1,0,0,33,1,36,1,48,1,36,48,0,50,100,0,0,0,100,0,0,10,100,0,0,0,100,0,0,0,90,20,90,20,90,20,90,20,90,20,90,20,90,20,90,20,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,1,1,1,0,0,0,0,0,0,0,0,62,1,1,1,64,1,1,1,0,0,0,0,0,0,0,0,64,1,1,1,62,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,64,1,1,64,0,0,0,0,62,1,1,62,0,0,0,0,66,1,1,1,0,0,0,0,0,0,0,0,66,1,1,1,67,1,1,1,0,0,0,0,0,0,0,0,67,1,1,1,66,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,67,0,0,0,0,67,1,1,67,0,0,0,0,57,1,1,1,0,0,0,0,0,0,0,0,57,1,1,1,60,1,1,1,0,0,0,0,0,0,0,0,71,1,1,1,69,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,72,1,1,72,0,0,0,0,71,1,1,71,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,30,60,0,0,40,0,0,57,1,62,1,57,1,62,1,1,64,1,1,60,1,1,1,59,1,60,1,59,1,60,1,1,59,1,1,57,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,67,1,67,1,67,1,1,69,1,1,66,0,62,64,67,0,71,0,0,74,0,67,0,0,0,0,0,0,31,1,43,1,0,0,0,0,26,38,0,41,0,41,43,0,26,1,38,1,0,0,0,0,21,33,0,36,0,36,38,0,29,1,41,1,0,0,0,0,24,36,0,39,0,39,41,0,24,1,36,1,0,0,0,0,19,31,0,34,0,34,36,0,0,0,67,0,67,0,67,71,0,72,0,71,0,67,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,65,62,0,65,0,67,0,69,0,0,67,0,0,64,0,62,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,65,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,67,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,69,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,71,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,72,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,62,0,65,0,67,0,69,0,0,67,0,0,0,72,0,72,71,0,72,0,74,0,71,0,0,67,0,0,0,0,62,74,0,62,74,0,62,0,69,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,67,0,74,72,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,71,1,1,1,67,1,1,1,0,0,0,0,1,1,1,1,71,1,1,1,67,1,1,1,69,1,1,1,72,1,1,1,1,1,1,1,1,1,1,1,71,1,69,1,67,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,16,32,48,64,0,0,0,0,0,0,0,0,0,0,0,32,40,48,64,0,0,0,0,0,0,0,0,0,0,0,0,74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,77,1,1,1,1,1,1,1,1,1,1,1,1,76,1,74,1,72,1,1,1,1,1,1,1,1,1,1,1,1,1,79,1,2,16,32,48,64,0,0,0,0,0,0,0,0,80,96,32,36,40,48,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,96,112,127,0,0,0,0,0,20,0,30,60,0,0,20,0,20,0,30,60,20,60,40,81,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,64,0,48,32,16,0,0,0,0,64,0,0,0,0,0,0,57,0,57,0,62,0,62,0,69,0,69,0,72,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,78,74,69,0,0,0,0,62,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,10,0,10,0,0,60,0,0,25,0,20,0,0,60,10,0,10,0,10,35,0,60,10,0,35,0,0,69,0,69,0,74,0,74,0,81,0,81,0,83,0,83,0,81,0,81,0,74,0,76,0,74,0,74,0,0,0,0,0,62,1,1,1,69,1,71,1,1,1,69,1,1,1,64,1,1,69,1,1,62,1,1,1,1,1,1,1,0,0,64,0,0,0,0,0,0,0,2,32,64,0,0,0,0,0,64,1,1,69,1,1,62,1,1,1,64,1,66,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,67,1,1,1,66,1,1,1,64,1,62,1,1,1,59,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,48,64,0,0,69,0,69,0,74,86,74,0,81,0,81,0,83,91,83,0,81,0,81,0,74,86,76,0,74,86,91,90,86,81,83,0,81,0,81,0,74,0,76,0,74,0,74,0,86,0,69,1,1,1,0,0,0,0,0,0,0,0,69,1,1,1,67,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,69,1,1,69,0,0,0,0,67,1,1,67,0,0,0,0,71,1,1,1,0,0,0,0,0,0,0,0,71,1,1,1,72,1,1,1,0,0,0,0,0,0,0,0,72,1,1,1,71,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,72,1,1,67,0,0,0,0,72,1,1,67,0,0,0,0,65,1,1,1,0,0,0,0,0,0,0,0,76,1,1,1,74,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,77,1,1,72,0,0,0,0,76,1,1,71,0,0,0,0,31,1,1,1,38,1,41,43,0,41,1,38,41,0,43,1,38,1,50,1,0,0,38,1,41,1,53,1,41,53,0,55,0,0,74,0,74,0,79,0,79,0,86,0,86,0,88,0,88,0,86,0,86,0,79,0,81,0,79,0,79,0,0,0,0,0,74,0,74,0,79,91,79,0,86,0,86,0,88,96,88,0,86,0,86,0,79,91,81,0,79,91,96,95,91,86,0,0,67,1,1,1,74,1,76,1,1,1,74,1,1,1,69,1,1,74,1,1,67,1,1,1,1,1,1,1,0,0,88,0,86,0,86,0,79,0,81,0,79,0,79,0,91,0,69,1,1,74,1,1,67,1,1,1,69,1,71,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,72,1,1,1,71,1,1,1,69,1,67,1,1,1,64,1,1,1,26,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,100,0,0,0,100,0,0,30,100,0,0,0,100,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,1,1,1,0,0,0,0,0,0,0,0,60,1,1,1,57,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,66,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,69,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,69,74,81,0,74,81,86,0,0,0,0,0,0,0,0,91,90,86,81,0,0,0,0,0,0,0,0,0,0,0,0,93,86,81,78,74,69,74,78,0,0,0,0,0,74,81,74,81,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\nconst instrumentspatternlists: i8[] = [1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,88,88,88,89,88,88,88,89,1,1,1,100,0,0,0,0,0,0,0,0,20,21,22,23,20,21,22,24,0,0,0,0,0,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,63,0,20,21,22,23,20,21,22,24,0,0,0,0,0,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,35,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,31,0,29,30,40,41,29,30,31,0,29,30,31,0,29,30,31,0,29,30,31,0,0,0,0,0,61,62,0,0,0,0,0,0,0,0,0,0,29,30,31,0,29,30,40,41,29,30,31,0,29,30,31,0,29,30,31,0,29,30,31,0,0,0,0,0,0,0,0,0,66,67,0,0,66,67,0,0,66,67,75,76,66,77,75,76,90,91,92,93,90,96,92,93,107,108,109,110,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,101,101,101,6,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,58,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,58,5,5,5,5,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,102,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,12,78,79,80,12,78,79,80,7,8,9,0,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,81,82,83,84,81,82,83,84,11,12,13,0,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,7,85,86,87,7,85,86,87,15,103,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,43,45,43,44,43,46,37,47,48,49,52,53,54,49,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,43,45,43,44,43,46,37,47,48,49,52,53,54,49,22,0,0,0,0,0,0,0,68,69,0,0,68,71,72,73,68,69,0,0,68,71,72,73,94,95,0,0,94,97,98,99,105,35,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,51,51,0,55,56,51,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,51,51,0,55,56,51,57,0,0,0,0,0,0,0,0,70,0,0,0,70,0,74,0,70,0,0,0,70,0,74,0,70,0,0,0,70,0,74,0,0,0,50,0];\n\n\n// ./node_modules/.bin/asc --runtime none assembly/wasi_main.ts --noAssert --use abort= -O3 -o build/index.wasm\n// wasmer build/index.wasm | sox -S -t raw -b 32 -e float -r 44100 -c 2 - -d\nexport function _start(): void {\n const samplebuf = allocateSampleBuffer(128);\n setPatternsPtr(load(changetype(patterns)));\n setInstrumentPatternListPtr(load(changetype(instrumentspatternlists)), 116, 19);\n setBPM(123);\n \n const iov = new iovec();\n iov.buf = samplebuf;\n iov.buf_len = 128 * 8;\n \n const written_ptr = changetype(new ArrayBuffer(sizeof()));\n \n let previousTick: f64;\n do {\n previousTick = getTick();\n fillSampleBufferInterleaved();\n fd_write(1, changetype(iov), 1, written_ptr);\n } while(previousTick < getTick())\n}"} \ No newline at end of file +{"common/mixcommon.ts":"export function createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n","environment.ts":"// earlier this used to externally declared\nexport const SAMPLERATE: f32 = 44100;","fx/allpass.ts":"import { DelayLine } from \"./delayline\";\n\nexport class AllPass {\n readonly delay_line: DelayLine;\n\n constructor(delay_length: usize) {\n this.delay_line = new DelayLine(delay_length);\n }\n\n tick(input: f32): f32 {\n let delayed: f32 = this.delay_line.read();\n let output: f32 = -input + delayed;\n\n // in the original version of freeverb this is a member which is never modified\n const feedback: f32 = 0.5;\n\n this.delay_line\n .write_and_advance(input + delayed * feedback);\n\n return output;\n }\n}\n\nexport class AllPassFloat {\n coeff: f32;\n previousinput: f32;\n previousoutput: f32;\n\n setDelta(delta: f32): void {\n this.coeff = (1 - delta) / (1 + delta);\n }\n\n clearBuffers(): void {\n this.previousinput = 0;\n this.previousoutput = 0;\n }\n\n process(input: f32): f32 {\n const output = this.coeff * (input\n - this.previousoutput)\n + this.previousinput;\n this.previousoutput = output;\n this.previousinput = input;\n return output;\n }\n}\n","fx/bandpass.ts":"import { BiQuadFilter, FilterType, Q_BUTTERWORTH } from \"../synth/biquad\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class BandPass {\n lpfilter: BiQuadFilter = new BiQuadFilter();\n hpfilter: BiQuadFilter = new BiQuadFilter();\n \n constructor(lowfreq: f32, hifreq: f32) {\n this.update_frequencies(lowfreq, hifreq);\n }\n\n clearBuffers(): void {\n this.hpfilter.clearBuffers();\n this.lpfilter.clearBuffers();\n }\n\n update_frequencies(lowfreq: f32, hifreq: f32): void {\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH);\n }\n\n process(sample: f32): f32 {\n return this.lpfilter.process(this.hpfilter.process(sample)); \n }\n}","fx/comb.ts":"import { DelayLine } from \"./delayline\";\n\nexport class Comb {\n readonly delay_line: DelayLine;\n feedback: f32;\n filter_state: f32;\n dampening: f32;\n dampening_inverse: f32;\n\n constructor(delay_length: usize) { \n this.delay_line = new DelayLine(delay_length);\n this.feedback= 0.5;\n this.filter_state = 0.0;\n this.dampening = 0.5;\n this.dampening_inverse = 0.5;\n \n }\n\n set_dampening(value: f32): void{\n this.dampening = value;\n this.dampening_inverse = 1.0 - value;\n }\n\n set_feedback(value: f32): void {\n this.feedback = value;\n }\n\n tick(input: f32): f32 {\n let output = this.delay_line.read();\n\n this.filter_state =\n output * this.dampening_inverse + this.filter_state * this.dampening;\n\n this.delay_line\n .write_and_advance(input + this.filter_state * this.feedback);\n\n return output;\n }\n}\n","fx/delayline.ts":"import { AllPassFloat } from \"./allpass\";\n\nexport class DelayLine {\n readonly bufferPointer: usize;\n index: usize = 0;\n length: usize = 0;\n currentPeak: f32 = 0;\n currentPeakSamplesToLive: usize = 0;\n\n private numsamplesf64: f64 = 0\n private meanSquared: f64 = 0;\n\n constructor(private numsamples: usize) {\n this.numsamplesf64 = numsamples as f64;\n this.length = numsamples * 4 as usize;\n this.bufferPointer = __new(this.length, 0);\n }\n\n read(): f32 {\n return load(this.bufferPointer + this.index);\n }\n\n calculateRMS(): f32 {\n let ndx = this.index;\n let bufferPointer = this.bufferPointer;\n\n let leastrecentsample: f64 = load(bufferPointer + ndx) as f64;\n if (ndx === 0) {\n ndx = this.length;\n }\n ndx -= 4;\n let mostrecentsample: f64 = load(bufferPointer + ndx) as f64;\n\n let meanSquared: f64 = this.meanSquared;\n let numSamples: f64 = this.numsamplesf64;\n meanSquared += ((mostrecentsample * mostrecentsample) / numSamples);\n meanSquared -= ((leastrecentsample * leastrecentsample) / numSamples);\n this.meanSquared = meanSquared;\n\n return Math.sqrt(meanSquared) as f32;\n }\n\n getPeakValue(): f32 {\n let ndx = this.index;\n if (ndx === 0) {\n ndx = this.length;\n }\n ndx -= 4;\n let mostrecentsample: f32 = load(this.bufferPointer + ndx) as f32;\n if (mostrecentsample < 0) {\n mostrecentsample = -mostrecentsample;\n }\n if (mostrecentsample > this.currentPeak) {\n this.currentPeak = mostrecentsample;\n this.currentPeakSamplesToLive = this.numsamples;\n } else if (this.currentPeakSamplesToLive > 0) {\n this.currentPeakSamplesToLive--;\n }\n if (this.currentPeakSamplesToLive == 0) {\n this.currentPeak = this.calculatePeakValue();\n }\n return this.currentPeak;\n }\n\n private calculatePeakValue(): f32 {\n let peak: f32 = 0.0;\n for (let i: usize = 0; i < this.length; i += 4) {\n let value = load(this.bufferPointer + i);\n if (value < 0) {\n value = -value;\n }\n if (value > peak) {\n peak = value;\n this.currentPeakSamplesToLive = ((i >= this.index) ? (i - this.index) : ((this.length) - this.index) + i) >> 2;\n }\n }\n return peak;\n }\n\n write_and_advance(value: f32): void {\n store(this.bufferPointer + this.index, value);\n\n if (this.index === this.length - 4) {\n this.index = 0;\n } else {\n this.index += 4;\n }\n }\n}\n\nexport class DelayLineFloat {\n buffer: StaticArray;\n frame: f64 = 0;\n numframes: f64 = 1;\n previous: f32;\n allpass: AllPassFloat = new AllPassFloat();\n\n constructor(private buffersizeframes: i32) {\n this.buffer = new StaticArray(buffersizeframes);\n }\n\n read(): f32 {\n const index = this.frame as i32 % this.buffer.length;\n return this.allpass.process(this.buffer[index]);\n }\n\n reset(): void {\n this.allpass.previousoutput = 0;\n this.allpass.previousinput = 0;\n for (let n = 0; n < this.numframes; n++) {\n this.buffer[n] = 0;\n }\n this.frame = 0;\n }\n\n setNumFramesAndClear(numframes: f64): void {\n this.numframes = Math.floor(numframes);\n this.allpass.setDelta((numframes - this.numframes) as f32);\n this.reset();\n }\n\n write_and_advance(value: f32): void {\n const index = ((this.frame++) + this.numframes) as i32 % this.buffer.length;\n this.buffer[index] = value;\n }\n}\n","fx/eqband.ts":"import { BiQuadFilter, FilterType, Q_BUTTERWORTH } from \"../synth/biquad\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class EQBand {\n lpfilter: BiQuadFilter = new BiQuadFilter();\n hpfilter: BiQuadFilter = new BiQuadFilter();\n lpfilter2: BiQuadFilter = new BiQuadFilter();\n hpfilter2: BiQuadFilter = new BiQuadFilter();\n \n \n constructor(lowfreq: f32, hifreq: f32) {\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.lpfilter2.update_coeffecients(FilterType.LowPass, SAMPLERATE, hifreq, Q_BUTTERWORTH);\n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH);\n this.hpfilter2.update_coeffecients(FilterType.HighPass, SAMPLERATE, lowfreq, Q_BUTTERWORTH); \n }\n\n process(left: f32): f32 {\n return this.lpfilter2.process(this.lpfilter.process(this.hpfilter2.process(this.hpfilter.process(left)))); \n }\n}","fx/freeverb.ts":"\n/**\n * Freeverb implementation taken from Rust implementation here:\n * https://github.com/irh/freeverb-rs/blob/master/freeverb/src/freeverb.rs\n */\nimport { Comb } from './comb';\nimport { AllPass } from './allpass';\nimport { SAMPLERATE as SAMPLERATE_f32 } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\n\nlet SAMPLERATE = SAMPLERATE_f32 as usize;\nconst FIXED_GAIN: f32 = 0.015;\n\nconst SCALE_WET: f32 = 3.0;\nconst SCALE_DAMPENING: f32 = 0.4;\n\nconst SCALE_ROOM: f32 = 0.28;\nconst OFFSET_ROOM: f32 = 0.7;\n\nconst STEREO_SPREAD: usize = 23;\n\nconst COMB_TUNING_L1: usize = 1116;\nconst COMB_TUNING_R1: usize = 1116 + STEREO_SPREAD;\nconst COMB_TUNING_L2: usize = 1188;\nconst COMB_TUNING_R2: usize = 1188 + STEREO_SPREAD;\nconst COMB_TUNING_L3: usize = 1277;\nconst COMB_TUNING_R3: usize = 1277 + STEREO_SPREAD;\nconst COMB_TUNING_L4: usize = 1356;\nconst COMB_TUNING_R4: usize = 1356 + STEREO_SPREAD;\nconst COMB_TUNING_L5: usize = 1422;\nconst COMB_TUNING_R5: usize = 1422 + STEREO_SPREAD;\nconst COMB_TUNING_L6: usize = 1491;\nconst COMB_TUNING_R6: usize = 1491 + STEREO_SPREAD;\nconst COMB_TUNING_L7: usize = 1557;\nconst COMB_TUNING_R7: usize = 1557 + STEREO_SPREAD;\nconst COMB_TUNING_L8: usize = 1617;\nconst COMB_TUNING_R8: usize = 1617 + STEREO_SPREAD;\n\nconst ALLPASS_TUNING_L1: usize = 556;\nconst ALLPASS_TUNING_R1: usize = 556 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L2: usize = 441;\nconst ALLPASS_TUNING_R2: usize = 441 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L3: usize = 341;\nconst ALLPASS_TUNING_R3: usize = 341 + STEREO_SPREAD;\nconst ALLPASS_TUNING_L4: usize = 225;\nconst ALLPASS_TUNING_R4: usize = 225 + STEREO_SPREAD;\n\nfunction adjust_length(length: usize, sr: usize): usize {\n return ((length as f32) * (sr as f32) / SAMPLERATE_f32) as usize;\n}\n\nexport class Freeverb { \n readonly COMB1_L: Comb = new Comb(adjust_length(COMB_TUNING_L1, SAMPLERATE));\n readonly COMB1_R: Comb = new Comb(adjust_length(COMB_TUNING_L1, SAMPLERATE));\n readonly COMB2_L: Comb = new Comb(adjust_length(COMB_TUNING_R2, SAMPLERATE));\n readonly COMB2_R: Comb = new Comb(adjust_length(COMB_TUNING_L2, SAMPLERATE));\n readonly COMB3_L: Comb = new Comb(adjust_length(COMB_TUNING_R3, SAMPLERATE));\n readonly COMB3_R: Comb = new Comb(adjust_length(COMB_TUNING_L3, SAMPLERATE));\n readonly COMB4_L: Comb = new Comb(adjust_length(COMB_TUNING_R4, SAMPLERATE));\n readonly COMB4_R: Comb = new Comb(adjust_length(COMB_TUNING_L4, SAMPLERATE));\n readonly COMB5_L: Comb = new Comb(adjust_length(COMB_TUNING_R5, SAMPLERATE));\n readonly COMB5_R: Comb = new Comb(adjust_length(COMB_TUNING_L5, SAMPLERATE));\n readonly COMB6_L: Comb = new Comb(adjust_length(COMB_TUNING_R6, SAMPLERATE));\n readonly COMB6_R: Comb = new Comb(adjust_length(COMB_TUNING_L6, SAMPLERATE));\n readonly COMB7_L: Comb = new Comb(adjust_length(COMB_TUNING_R7, SAMPLERATE));\n readonly COMB7_R: Comb = new Comb(adjust_length(COMB_TUNING_L7, SAMPLERATE));\n readonly COMB8_L: Comb = new Comb(adjust_length(COMB_TUNING_R8, SAMPLERATE));\n readonly COMB8_R: Comb = new Comb(adjust_length(COMB_TUNING_L8, SAMPLERATE));\n\n readonly ALL1_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L1, SAMPLERATE));\n readonly ALL1_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R1, SAMPLERATE));\n readonly ALL2_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L2, SAMPLERATE));\n readonly ALL2_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R2, SAMPLERATE));\n readonly ALL3_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L3, SAMPLERATE));\n readonly ALL3_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R3, SAMPLERATE));\n readonly ALL4_L: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_L4, SAMPLERATE));\n readonly ALL4_R: AllPass = new AllPass(adjust_length(ALLPASS_TUNING_R4, SAMPLERATE));\n\n wet_gain_left: f32 = 0;\n wet_gain_right: f32 = 0;\n \n wet: f32 = 0;\n width: f32 = 0;\n dry: f32 = 0;\n input_gain: f32 = 0;\n dampening: f32 = 0;\n room_size: f32 = 0;\n frozen: bool = 0;\n\n constructor() {\n this.set_wet(1.0);\n this.set_width(0.5);\n this.set_dampening(0.5);\n this.set_room_size(0.7);\n this.set_frozen(false); \n }\n\n tick(signal: StereoSignal): void {\n let input_mixed = (signal.left + signal.right) * FIXED_GAIN * this.input_gain;\n\n let leftoutput:f32 = 0;\n let rightoutput:f32 = 0;\n\n leftoutput += this.COMB1_L.tick(input_mixed);\n rightoutput+= this.COMB1_R.tick(input_mixed);\n leftoutput += this.COMB2_L.tick(input_mixed);\n rightoutput+= this.COMB2_R.tick(input_mixed);\n leftoutput += this.COMB3_L.tick(input_mixed);\n rightoutput+= this.COMB3_R.tick(input_mixed);\n leftoutput += this.COMB4_L.tick(input_mixed);\n rightoutput+= this.COMB4_R.tick(input_mixed);\n leftoutput += this.COMB5_L.tick(input_mixed);\n rightoutput+= this.COMB5_R.tick(input_mixed);\n leftoutput += this.COMB6_L.tick(input_mixed);\n rightoutput+= this.COMB6_R.tick(input_mixed);\n leftoutput += this.COMB7_L.tick(input_mixed);\n rightoutput+= this.COMB7_R.tick(input_mixed);\n leftoutput += this.COMB8_L.tick(input_mixed);\n rightoutput+= this.COMB8_R.tick(input_mixed);\n \n leftoutput= this.ALL1_L.tick(leftoutput);\n rightoutput = this.ALL1_R.tick(rightoutput);\n leftoutput= this.ALL2_L.tick(leftoutput);\n rightoutput = this.ALL2_R.tick(rightoutput);\n leftoutput= this.ALL3_L.tick(leftoutput);\n rightoutput = this.ALL3_R.tick(rightoutput);\n leftoutput= this.ALL4_L.tick(leftoutput);\n rightoutput = this.ALL4_R.tick(rightoutput);\n\n signal.left = leftoutput * this.wet_gain_left +\n rightoutput * this.wet_gain_right +\n signal.left * this.dry;\n signal.right = rightoutput * this.wet_gain_left +\n leftoutput * this.wet_gain_right +\n signal.right * this.dry; \n }\n\n update_combs(): void {\n let feedback: f32;\n let dampening: f32;\n\n if(this.frozen) {\n feedback =1.0;\n dampening = 0.0;\n } else {\n feedback = this.room_size;\n dampening = this.dampening;\n }\n \n this.COMB1_L.set_feedback(feedback);\n this.COMB1_R.set_feedback(feedback);\n this.COMB1_L.set_dampening(dampening);\n this.COMB1_R.set_dampening(dampening);\n this.COMB2_L.set_feedback(feedback);\n this.COMB2_R.set_feedback(feedback);\n this.COMB2_L.set_dampening(dampening);\n this.COMB2_R.set_dampening(dampening);\n this.COMB3_L.set_feedback(feedback);\n this.COMB3_R.set_feedback(feedback);\n this.COMB3_L.set_dampening(dampening);\n this.COMB3_R.set_dampening(dampening);\n this.COMB4_L.set_feedback(feedback);\n this.COMB4_R.set_feedback(feedback);\n this.COMB4_L.set_dampening(dampening);\n this.COMB4_R.set_dampening(dampening);\n this.COMB5_L.set_feedback(feedback);\n this.COMB5_R.set_feedback(feedback);\n this.COMB5_L.set_dampening(dampening);\n this.COMB5_R.set_dampening(dampening);\n this.COMB6_L.set_feedback(feedback);\n this.COMB6_R.set_feedback(feedback);\n this.COMB6_L.set_dampening(dampening);\n this.COMB6_R.set_dampening(dampening);\n this.COMB7_L.set_feedback(feedback);\n this.COMB7_R.set_feedback(feedback);\n this.COMB7_L.set_dampening(dampening);\n this.COMB7_R.set_dampening(dampening);\n this.COMB8_L.set_feedback(feedback);\n this.COMB8_R.set_feedback(feedback);\n this.COMB8_L.set_dampening(dampening);\n this.COMB8_R.set_dampening(dampening);\n }\n\n set_dampening(value: f32): void {\n this.dampening = value * SCALE_DAMPENING;\n this.update_combs();\n }\n\n set_freeze(frozen: bool): void {\n this.frozen = frozen;\n this.update_combs();\n }\n\n set_wet(value: f32): void {\n this.wet = value * SCALE_WET;\n this.update_wet_gains();\n }\n\n set_width(value: f32): void {\n this.width = value;\n this.update_wet_gains();\n }\n\n update_wet_gains(): void {\n this.wet_gain_left = this.wet * (this.width / 2.0 + 0.5);\n this.wet_gain_right = this.wet * ((1.0 - this.width) / 2.0); \n }\n\n set_frozen(frozen: bool): void {\n this.frozen = frozen;\n this.input_gain = frozen ? 0.0 : 1.0;\n this.update_combs();\n }\n\n set_room_size(value: f32): void {\n this.room_size = value * SCALE_ROOM + OFFSET_ROOM;\n this.update_combs();\n }\n\n set_dry(value: f32): void {\n this.dry = value;\n }\n}\n","fx/limiter.ts":"import { SAMPLERATE } from '../environment';\n\nexport class Limiter {\n attack: f32 = 0;\n release: f32 = 0;\n envelope: f32 = 0;\n\n constructor(attackMs: f32, releaseMs: f32) {\n this.attack = Mathf.pow(0.01, 1.0 / (attackMs * SAMPLERATE * 0.001));\n this.release = Mathf.pow(0.01, 1.0 / (releaseMs * SAMPLERATE * 0.001));\n }\n\n process(signal: f32): f32 {\n const v = Mathf.abs(signal);\n if (v > this.envelope) {\n this.envelope = this.attack * (this.envelope - v) + v;\n } else {\n this.envelope = this.release * (this.envelope - v) + v;\n }\n\n if (this.envelope > 1) {\n signal /= this.envelope;\n }\n return signal;\n }\n}\n","fx/midsideprocessor.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nexport class MidSideProcessor {\n signal: StereoSignal = new StereoSignal();\n\n constructor(private side_level: f32) {\n\n }\n\n process(left: f32, right: f32): void {\n // Mid-side processing\n let mid: f32 = (left + right) / 2.0;\n let side: f32 = (left - right) / 2.0;\n\n side *= this.side_level;\n this.signal.left = mid + side;\n this.signal.right = mid - side;\n }\n}","fx/monocompressor.ts":"import { DelayLine } from \"./delayline\";\nexport class MonoCompressor {\n delay: DelayLine;\n\n gain: f64 = 1.0;\n targetgain: f64 = 1.0;\n gainChangePerSample: f64 = 0;\n delaybuffersamplecount: f64;\n releasesamplecount: f64;\n\n constructor(numsamples: usize) {\n this.delay = new DelayLine(numsamples);\n this.delaybuffersamplecount = numsamples as f64;\n this.releasesamplecount = this.delaybuffersamplecount;\n }\n\n setRelaseSampleCount(releasesamplecount: f64): void {\n this.releasesamplecount = releasesamplecount;\n }\n\n process(signal: f32, threshold: f32, makeupgain: f32): f32 {\n this.delay.write_and_advance(signal);\n\n let currentTargetGain: f64 = this.targetgain;\n let currentGain: f64 = this.gain;\n\n let peak: f64 = this.delay.getPeakValue();\n\n if(peak > threshold) {\n let targetGain = threshold / peak;\n\n if(targetGain < currentTargetGain) {\n currentTargetGain = targetGain;\n this.targetgain = targetGain;\n\n let newGainChangePerSample = (currentTargetGain - currentGain) / this.delaybuffersamplecount;\n \n if(newGainChangePerSample < this.gainChangePerSample) {\n this.gainChangePerSample = newGainChangePerSample;\n }\n } \n } else if(currentTargetGain < 1.0) {\n currentTargetGain = 1.0;\n this.targetgain = currentTargetGain; \n this.gainChangePerSample = (currentTargetGain - currentGain) / this.releasesamplecount;\n }\n\n let gainChangePerSample: f64 = this.gainChangePerSample;\n if((gainChangePerSample < 0 && currentTargetGain < currentGain) ||\n (gainChangePerSample > 0 && currentTargetGain > currentGain)) {\n currentGain += gainChangePerSample;\n this.gain = currentGain;\n }\n\n return this.delay.read() * currentGain as f32 * makeupgain;\n }\n}\n\nexport class StereoCompressor {\n leftCompressor: MonoCompressor;\n rightCompressor: MonoCompressor;\n\n resultSignal: StereoSignal = new StereoSignal();\n \n constructor(numsamples: usize) {\n this.leftCompressor = new MonoCompressor(numsamples);\n this.rightCompressor = new MonoCompressor(numsamples);\n }\n\n process(left: f32, right: f32, threshold: f32, makeupgain: f32): void {\n this.resultSignal.left = this.leftCompressor.process(left, threshold, makeupgain);\n \tthis.resultSignal.right = this.rightCompressor.process(right, threshold, makeupgain); \n }\n}\n","fx/multibandeq.ts":"import { EQBand } from './eqband';\nexport class MultiBandEQ {\n bands: StaticArray;\n\n constructor(freqs: f32[]) {\n this.bands = new StaticArray(freqs.length - 1);\n for (let n = 1; n < freqs.length; n++) {\n this.bands[n - 1] = new EQBand(freqs[n - 1], freqs[n]);\n }\n }\n\n\n process(signal: f32, levels: f32[]): f32 {\n let ret: f32 = 0;\n const numbands = this.bands.length;\n for (let n = 0; n < numbands; n++) {\n ret += this.bands[n].process(signal) * levels[n];\n }\n return ret;\n }\n}\n","fx/stereocompressor.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\nimport { MonoCompressor } from \"./monocompressor\";\n\nexport class StereoCompressor {\n leftCompressor: MonoCompressor;\n rightCompressor: MonoCompressor;\n\n resultSignal: StereoSignal = new StereoSignal();\n \n constructor(numsamples: usize) {\n this.leftCompressor = new MonoCompressor(numsamples);\n this.rightCompressor = new MonoCompressor(numsamples);\n }\n\n process(left: f32, right: f32, threshold: f32, makeupgain: f32): void {\n this.resultSignal.left = this.leftCompressor.process(left, threshold, makeupgain);\n \tthis.resultSignal.right = this.rightCompressor.process(right, threshold, makeupgain); \n }\n}\n","fx/tribandeq.ts":"import { EQBand } from \"./eqband\";\n\nexport class TriBandEQ {\n \n lowerband: EQBand;\n midband: EQBand;\n hiband: EQBand;\n\n constructor(low: f32, midlo: f32, midhi: f32, high: f32) {\n this.lowerband = new EQBand(low, midlo);\n this.midband = new EQBand(midlo, midhi);\n this.hiband = new EQBand(midhi, high);\n }\n\n process(signal: f32, lolevel: f32, midlevel: f32, hilevel: f32): f32 {\n return this.lowerband.process(signal) * lolevel +\n this.midband.process(signal) * midlevel +\n this.hiband.process(signal) * hilevel;\n }\n}","fx/tribandstereocompressor.ts":"import { EQBand } from \"./eqband\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { StereoCompressor } from \"./stereocompressor\";\nimport { SAMPLERATE } from \"../environment\";\n\nexport class TriBandStereoCompressor {\n lowerbandl: EQBand; \n midbandl: EQBand; \n hibandl: EQBand;\n \n lowerbandr: EQBand; \n midbandr: EQBand; \n hibandr: EQBand;\n \n compressorLow: StereoCompressor;\n compressorMid: StereoCompressor;\n compressorHigh: StereoCompressor;\n\n stereosignal: StereoSignal = new StereoSignal();\n\n constructor(low: f32, midlo: f32, midhi: f32, high: f32, compressor_delay: f32 = 0.2) {\n this.compressorLow = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n this.compressorMid = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n this.compressorHigh = new StereoCompressor((SAMPLERATE * compressor_delay) as usize);\n\n this.lowerbandl = new EQBand(low, midlo);\n this.lowerbandr = new EQBand(low, midlo);\n \n this.midbandl = new EQBand(midlo, midhi);\n this.midbandr = new EQBand(midlo, midhi);\n \n this.hibandl = new EQBand(midhi, high);\n this.hibandr = new EQBand(midhi, high);\n }\n\n process(left: f32, right: f32, \n lolevel: f32, \n midlevel: f32, \n hilevel: f32,\n lomakeupgain: f32,\n midmakeupgain: f32,\n himakeupgain: f32): void {\n let lowleft = this.lowerbandl.process(left);\n let midleft = this.midbandl.process(left);\n let hileft = this.hibandl.process(left);\n\n let lowright = this.lowerbandr.process(right);\n let midright = this.midbandr.process(right);\n let hiright = this.hibandr.process(right);\n\n this.compressorLow.process(lowleft,lowright,lolevel,lomakeupgain);\n this.compressorMid.process(midleft,midright,midlevel,midmakeupgain);\n this.compressorHigh.process(hileft,hiright,hilevel,himakeupgain);\n \n this.stereosignal.left = this.compressorLow.resultSignal.left + this.compressorMid.resultSignal.left + this.compressorHigh.resultSignal.left;\n this.stereosignal.right = this.compressorLow.resultSignal.right + this.compressorMid.resultSignal.right + this.compressorHigh.resultSignal.right;\n }\n}","index.ts":"// The entry file of the synth WebAssembly module.\n\n// --- Replace with your own mix implementation here\nimport { mixernext, setChannelValue, PATTERN_SIZE_SHIFT, BEATS_PER_PATTERN_SHIFT } from './mixes/newyear.mix';\nexport { setChannelValue } from './mixes/newyear.mix';\n// -------------------------------------------------\n\nimport { SAMPLERATE } from './environment';\n\nconst PATTERN_LENGTH: f32 = (1 << PATTERN_SIZE_SHIFT) as f32;\n\nlet NUM_INSTRUMENTS: i32;\n\nlet holdChannelValuesBufferPtr: usize;\nlet currentChannelValuesBufferPtr: usize;\nlet patternsPtr: usize;\nlet instrumentPatternListsPtr: usize;\nlet sampleBufferPtr: usize;\nlet sampleBufferFrames: usize;\nlet songlength: usize = 0;\n\nlet patternIndexf64: f64 = 0;\nlet patternIndex: usize = 0; \nlet patternNoteIndex: usize = -1;\n\nlet tick: f64 = 0;\nlet ticksPerBeat: f32 = (1 << PATTERN_SIZE_SHIFT >> BEATS_PER_PATTERN_SHIFT) as f32;\nlet bpm: f32 = 120;\n\nlet ticksPerSec = ticksPerBeat * bpm / 60;\nlet ticksPerSample = ticksPerSec / SAMPLERATE;\n\nlet playOrPause: boolean = true;\n\nexport function setBPM(BPM: f32): void {\n bpm = BPM;\n ticksPerSec = ticksPerBeat * BPM / 60;\n ticksPerSample = ticksPerSec / SAMPLERATE;\n}\n\nexport function setTick(newtick: f64): void {\n tick = newtick;\n}\n\nexport function getTick(): f64 {\n return tick;\n}\n\nexport function setMilliSecondPosition(millis: f64): void {\n let newtick: f64 = millis * ticksPerSec / 1000;\n let ticklength = songlength as f64 * PATTERN_LENGTH;\n\n newtick -= (floor(newtick / ticklength) * ticklength);\n if(abs(newtick - tick) > 1) {\n tick = newtick;\n }\n}\n\nexport function getPatternIndex(): usize {\n return patternIndex;\n}\n\nexport function getPatternNoteIndex(): usize {\n return patternNoteIndex;\n}\n\nexport function toggleSongPlay(status: boolean): void {\n if(!status && playOrPause) {\n for(let n=0;n songlengthf64) {\n tick -= (songlengthf64 * PATTERN_LENGTH); \n }\n\n patternIndexf64 = (tick / PATTERN_LENGTH) as f64;\n patternIndex = patternIndexf64 as usize; \n let newPatternNoteIndex: usize = ((patternIndexf64 - (patternIndex as f64)) * PATTERN_LENGTH) as usize;\n\n if(newPatternNoteIndex===patternNoteIndex) {\n return;\n }\n\n patternNoteIndex = newPatternNoteIndex;\n \n for(let n=0;n(instrumentPatternListsPtr +\n n * songlength +\n patternIndex) as usize;\n \n let channelValue: f32 = load(patternsPtr + (instrumentPatternIndex << PATTERN_SIZE_SHIFT)\n + patternNoteIndex) as f32;\n \n let holdChannelValue: f32 = load(holdChannelValuesBufferPtr + n * 4);\n if(holdChannelValue > 0 && channelValue !== 1 && channelValue !== holdChannelValue) {\n // Hold value\n channelValue = 1;\n store(patternsPtr + (instrumentPatternIndex << PATTERN_SIZE_SHIFT)\n + patternNoteIndex, 1 as u8);\n }\n\n // 1 means HOLD value - no change to the visualizer \n if(channelValue !== 1) { \n // For external visualizer to monitor channel values currently been played by the sequencer \n store(currentChannelValuesBufferPtr + n*4, channelValue);\n setChannelValue(n, channelValue);\n } \n }\n}\n\nexport function getHoldChannelValuesBufferPtr(): usize {\n return holdChannelValuesBufferPtr;\n}\n\nexport function recordChannelValue(channel: usize, value: f32): void {\n store(holdChannelValuesBufferPtr + channel * 4, value);\n setChannelValue(channel, value);\n}\n\nexport function setPatternsPtr(ptr: usize): void {\n patternsPtr = ptr;\n}\n\nexport function allocatePatterns(numpatterns: i32): usize {\n patternsPtr = __new(numpatterns << PATTERN_SIZE_SHIFT, idof>());\n return patternsPtr;\n}\n\nexport function setInstrumentPatternListPtr(ptr: usize, songpatternslength: i32, numinstruments: i32): void {\n instrumentPatternListsPtr = ptr;\n NUM_INSTRUMENTS = numinstruments;\n songlength = songpatternslength;\n \n currentChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n holdChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n}\n\nexport function allocateInstrumentPatternList(songpatternslength: i32, numinstruments: i32): usize {\n NUM_INSTRUMENTS = numinstruments;\n songlength = songpatternslength;\n \n currentChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n holdChannelValuesBufferPtr = __new(NUM_INSTRUMENTS * 4, idof>());\n instrumentPatternListsPtr = __new(songpatternslength * NUM_INSTRUMENTS, idof>());\n\n return instrumentPatternListsPtr;\n}\n\nexport function allocateSampleBuffer(frames: usize): usize {\n sampleBufferFrames = frames;\n sampleBufferPtr = __new(frames * 2 * 4, idof>());\n return sampleBufferPtr;\n}\n\nexport function getCurrentChannelValuesBufferPtr(): usize {\n return currentChannelValuesBufferPtr;\n}\n\nexport function fillSampleBuffer(): void { \n updateInstrumentNotes();\n for(let n: usize = 0;n 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1) / 2;\n this.sawoscillator2.frequency = notefreq(note - 0.1) / 2;\n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n let filterenv = this.filterenv.next();\n this.signal.left *= 0.9 * env; // feedback\n this.signal.right *= 0.9 * env; // feedback\n this.lpfilterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (100 * filterenv), Q_BUTTERWORTH);\n this.lpfilterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (100 * filterenv), Q_BUTTERWORTH);\n \n this.signal.addMonoSignal(\n this.lpfilterl.process(this.hpfilterl.process(this.sawoscillator.next() * env)), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.lpfilterr.process(this.hpfilterr.process(this.sawoscillator2.next() * env)), 0.3, 0.7\n );\n } \n}\n ","instruments/bass/sawbass2.class.ts":"\nimport { SAMPLERATE } from '../../environment';\n\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\n\n\nexport class SawBass2 {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly filterenv: Envelope = new Envelope(0.01, 0.4, 0.0, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterr: BiQuadFilter = new BiQuadFilter();\n \n readonly lpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly lpfilterr: BiQuadFilter = new BiQuadFilter();\n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n this.hpfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n this.hpfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1);\n this.sawoscillator2.frequency = notefreq(note - 0.1);\n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n let filterenv = this.filterenv.next();\n this.signal.left /= 1.03; // feedback\n this.signal.right /= 1.03; // feedback\n this.lpfilterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (8000 * filterenv), Q_BUTTERWORTH);\n this.lpfilterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, 300 + (8000 * filterenv), Q_BUTTERWORTH);\n \n this.signal.addMonoSignal(\n this.lpfilterl.process(this.hpfilterl.process(this.sawoscillator.next() * env)), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.lpfilterr.process(this.hpfilterr.process(this.sawoscillator2.next() * env)), 0.3, 0.7\n );\n } \n}\n ","instruments/bass/sawbass3.ts":"\nimport { SAMPLERATE } from '../../environment';\n\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { BandPass } from '../../fx/bandpass';\n\n\nexport class SawBass3 {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.3, 0.8, 0.2);\n readonly filterenv: Envelope = new Envelope(0.01, 0.2, 0.1, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n \n readonly lpfilter: BiQuadFilter = new BiQuadFilter();\n readonly band1: BandPass = new BandPass(1000, 2000);\n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note);\n \n this.envelope.attack(); \n this.filterenv.attack(); \n } else {\n this.envelope.release();\n this.filterenv.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n \n let filterenv = this.filterenv.next();\n \n let signal = this.sawoscillator.next();\n signal *= env;\n \n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n this.sawoscillator.frequency + (16 * this.sawoscillator.frequency * filterenv), Q_BUTTERWORTH);\n \n const band1freq = this.sawoscillator.frequency * 4;\n this.band1.update_frequencies(band1freq, band1freq + env * this.sawoscillator.frequency);\n\n let band1 = this.band1.process(signal);\n signal = this.lpfilter.process(signal);\n \n this.signal.left = signal * 2 + band1; \n this.signal.right = signal * 2 - band1;\n \n } \n}\n ","instruments/drivelead.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { Noise } from '../synth/noise.class';\nimport { WaveShaper } from '../synth/shaper';\nimport { notefreq } from '../synth/note';\n\n\nexport class DriveLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.1, 1.0, 0.6, 0.2);\n readonly sawoscillatorl: SawOscillator = new SawOscillator();\n readonly sawoscillatorr: SawOscillator = new SawOscillator();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n readonly lfoenvelope: Envelope = new Envelope(1.0, 0, 1.0, 0.1);\n readonly lfo: SineOscillator = new SineOscillator();\n baseFrequency : f32;\n pitchbend: f32 = 0;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note);\n this.lfo.frequency = 8;\n this.envelope.attack(); \n this.lfoenvelope.attack(); \n this._note = note;\n } else {\n this.envelope.release();\n this.lfoenvelope.release();\n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n setPitchbend(bend: f32): void {\n this.pitchbend = bend; \n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env===0) {\n this.signal.clear();\n return;\n }\n \n const pitchbend: f32 = this.pitchbend;\n if (Math.abs(pitchbend) > 0.01) {\n // Simple pitchbend that always will return to base note\n this.baseFrequency = notefreq(this._note + pitchbend);\n this.pitchbend = pitchbend * 0.9999;\n } else if(pitchbend !==0 ) {\n this.pitchbend = 0;\n this.baseFrequency = notefreq(this._note);\n }\n \n let lfo: f32 = this.lfo.next() * 3 * this.lfoenvelope.next();\n this.sawoscillatorl.frequency = this.baseFrequency + lfo + 0.5;\n this.sawoscillatorr.frequency = this.baseFrequency + lfo - 0.5;\n \n let left = env* this.sawoscillatorl.next() + this.signal.right * 0.5;\n left = this.shaper.process(left);\n \n let right = env* this.sawoscillatorr.next() + this.signal.left * 0.5;\n right = this.shaper.process(right);\n \n this.signal.left = left * 0.5 + right;\n this.signal.right = right * 0.5 + left; \n } \n}\n ","instruments/drums/kick2.class.ts":"\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { Instrument } from '../instrument.class';\n\nexport class Kick2 extends Instrument {\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n \n readonly env2: Envelope = new Envelope(0.001, 0.01, 0.0, 1);\n readonly bp2: BandPass = new BandPass(4000, 5000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.1, 0.05, 0.1);\n readonly bp3: BandPass = new BandPass(10, 100);\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env2.attack(); \n this.env3.attack(); \n } else {\n \n this.env2.release(); \n this.env3.release(); \n }\n }\n\n next(): void {\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n \n let sig2 = this.bp2.process(osc) * env2 ;\n let sig3 = this.bp3.process(osc) * env3 * 8;\n\n this.signal.left = this.velocity * (-sig2 + sig3);\n this.signal.right = this.velocity * ( + sig2 - sig3); \n } \n}\n ","instruments/drums/rimshot.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\n\nexport class Rimshot {\n private _note: f32;\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.001, 0.08, 0.06, 1);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.05, 0.01, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n let sig1 = this.bp1.process(osc) * env1;\n let sig2 = this.bp2.process(osc) * env2 * 2;\n let sig3 = this.bp3.process(osc) * env3 * 16;\n\n this.signal.left = this.velocity * (sig1 + sig2 * 0.8 + sig3);\n this.signal.right = this.velocity * (sig1 * 0.8 + sig2 + sig3);\n \n \n } \n}\n ","instruments/drums/snare2.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\n\nexport class Snare2 {\n private _note: f32;\n private velocity: f32;\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.001, 0.08, 0.06, 0.5);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.05, 0.01, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 16; \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.noise.next();\n \n let sig1 = this.bp1.process(osc) * env1 * 6;\n let sig2 = this.bp2.process(osc) * env2 * 2;\n let sig3 = this.bp3.process(osc) * env3 * 4;\n\n this.signal.left = this.velocity * (sig1 + sig2 * 0.8 + sig3);\n this.signal.right = this.velocity * (sig1 * 0.8 + sig2 + sig3);\n \n \n } \n}\n ","instruments/hihat.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\n\nexport class Hihat {\n private _note: f32;\n private velocity: f32;\n\n readonly envelope: Envelope = new Envelope(0.0, 0.08, 0, 0.1); \n readonly noise: Noise = new Noise();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.velocity = note / 32; \n this.envelope.attack(); \n } else {\n this.envelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next(); \n if(env === 0) {\n this.signal.clear();\n return;\n } \n let osc: f32 = this.noise.next(); \n let signal = this.velocity * 2 * env * osc;\n \n this.filter.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n 10000 + 2000 * env, Q_BUTTERWORTH);\n\n signal = this.filter.process(signal);\n\n this.signal.left = signal;\n this.signal.right = signal;\n } \n}\n ","instruments/instrument.class.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nexport abstract class Instrument {\n abstract set note(note: f32);\n readonly signal: StereoSignal = new StereoSignal();\n abstract next(): void;\n}","instruments/kick.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\n\n\n\nexport class Kick {\n private _note: f32;\n private velocity: f32;\n readonly envelope: Envelope = new Envelope(0.0, 0.2, 0, 0.2);\n readonly filterenvelope: Envelope = new Envelope(0.0, 0.05, 0.05, 0.1);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly noise: Noise = new Noise();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 150;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.filterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n this.sawoscillator.frequency = 20.0 + (env * 150.0);\n \n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 40 + (this.filterenvelope.next() * 2000), 0.2);\n\n let osc1: f32 = this.envelope.next() * this.velocity * this.sawoscillator.next() * 0.8 + this.noise.next();\n\n osc1 = this.filter.process(osc1);\n \n this.signal.left = env * osc1;\n this.signal.right = env * osc1;\n } \n}\n ","instruments/lead/brassy.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\n\nimport { SineOscillator } from '../../synth/sineoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\n\nexport class BrassyLead {\n private _note: f32;\n \n readonly osc: SineOscillator = new SineOscillator();\n readonly osc2: SawOscillator = new SawOscillator();\n \n readonly env1: Envelope = new Envelope(0.01, 0.1, 0.4, 0.3);\n \n readonly filterenv: Envelope = new Envelope(0.01, 0.1, 0.1, 0.3);\n \n readonly lopass: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this.osc2.frequency = notefreq(note);\n this._note = note;\n this.env1.attack();\n \n this.filterenv.attack(); \n } else {\n this.env1.release(); \n \n this.filterenv.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n if(env1 === 0) {\n this.signal.clear();\n return;\n }\n \n let osc: f32 = this.osc.next() * 0.05;\n let osc2: f32 = this.osc2.next() * env1 * 0.2;\n\n const pan = this._note / 127;\n\n let sig = osc + osc2;\n\n const filterenv = this.filterenv.next();\n this.lopass.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n (14000 * filterenv) , Q_BUTTERWORTH);\n sig = this.lopass.process(sig);\n \n this.signal.left = sig;\n this.signal.right = sig;\n \n \n } \n}\n ","instruments/lead/eftang.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class Eftang {\n private _note: f32;\n \n\n readonly lfo: SineOscillator = new SineOscillator();\n readonly osc: SawOscillator = new SawOscillator();\n readonly osc2: SawOscillator = new SawOscillator();\n readonly osc3: SawOscillator = new SawOscillator();\n \n readonly noise: Noise = new Noise();\n readonly env1: Envelope = new Envelope(0.001, 1.0, 0.8, 0.3);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.1, 0.2, 0.5, 1);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.001, 0.3, 0.1, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this.osc2.frequency = notefreq(note - 0.1);\n this.osc3.frequency = notefreq(note + 0.1);\n this.lfo.position = 0;\n this.lfo.frequency = 4;\n \n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n if(env1 === 0) {\n this.signal.clear();\n return;\n }\n \n const env2: f32 = this.env2.next();\n const env3: f32 = this.env3.next();\n \n const osc: f32 = this.osc.next() + this.osc2.next() + this.osc3.next();\n \n const lfo = this.lfo.next() + 1;\n const basefreq = this.osc.frequency;\n this.bp1.update_frequencies(20, basefreq + 1);\n this.bp2.update_frequencies(basefreq * 1.5,basefreq * 1.6);\n this.bp3.update_frequencies(basefreq * 12, 8000 + (lfo * 5000));\n const noise = this.noise.next();\n\n const sig1 = this.bp1.process(osc) * env1;\n const sig2 = this.bp2.process(osc) * env2;\n const sig3 = this.bp3.process(osc + noise * 0.2) * env3;\n\n this.signal.left = (sig1 + sig3);\n this.signal.right = ( sig1 + sig2 );\n \n \n } \n}\n ","instruments/lead/sinelead.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\n\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SineLead {\n private _note: f32;\n \n\n readonly osc: SineOscillator = new SineOscillator();\n readonly osc2: SineOscillator = new SineOscillator();\n \n readonly env1: Envelope = new Envelope(0.02, 0.15, 0.05, 0.3);\n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note) * 2;\n this.osc2.frequency = notefreq(note);\n this._note = note;\n this.env1.attack(); \n } else {\n this.env1.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n \n let osc: f32 = this.osc.next();\n let osc2: f32 = this.osc2.next() * 0.2 * env1;\n osc *= env1;\n\n const pan = this._note / 127;\n\n this.signal.left = osc * pan + osc2 * (1-pan);\n this.signal.right = osc * (1 - pan) + osc2 * pan;\n \n \n } \n}\n ","instruments/pad/flatpad.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class FlatPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.1, 1.0, 0.1);\n readonly filterenvelope: Envelope = new Envelope(0.001, 1.0, 1.0, 0.1);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo: f32 = (lfo * 0.9) + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n ","instruments/pad/softpad.class.ts":"\nimport { SAMPLERATE } from '../../environment';\nimport { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { SawOscillator } from '../../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../../synth/biquad';\nimport { notefreq } from '../../synth/note';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SoftPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.2, 0.6, 0.75, 0.5);\n readonly filterenvelope: Envelope = new Envelope(0.8, 1.0, 0.6, 0.5);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo = lfo + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 2000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 2000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n ","instruments/pad.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { WaveShaper } from '../synth/shaper';\n\n\n\nexport class Pad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.05, 0.6, 0.75, 0.3);\n readonly filterenvelope: Envelope = new Envelope(0.06, 0.6, 0.3, 0.3);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n \n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hipassfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hipassfilterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.05);\n this.sawoscillator3.frequency = notefreq(note - 0.05);\n this.sawoscillator4.frequency = notefreq(note + 0.1);\n this.sawoscillator5.frequency = notefreq(note - 0.1);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * 18000, 0.2);\n let hpfilterfreq: f32 = 0 + (1-this.hipassfilterenvelope.next()) * 500;\n this.hipassfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n hpfilterfreq, 0.3);\n this.hipassfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n hpfilterfreq, 0.3);\n \n this.signal.left = this.hipassfilterl.process(this.filter.process(left ));\n this.signal.right = this.hipassfilterr.process(this.filter.process(right ));\n } \n}\n ","instruments/piano/subpiano.ts":"import { StereoSignal } from '../../synth/stereosignal.class';\nimport { Envelope } from '../../synth/envelope.class';\nimport { Noise } from '../../synth/noise.class';\nimport { BandPass } from '../../fx/bandpass';\nimport { notefreq } from '../../synth/note';\nimport { SquareOscillator } from '../../synth/squareoscillator.class';\nimport { SineOscillator } from '../../synth/sineoscillator.class';\n\nexport class SubPiano {\n private _note: f32;\n private pan: f32;\n\n readonly lfo: SineOscillator = new SineOscillator();\n readonly osc: SquareOscillator = new SquareOscillator();\n readonly env1: Envelope = new Envelope(0.02, 1.5, 0.1, 0.4);\n readonly bp1: BandPass = new BandPass(200, 350);\n readonly env2: Envelope = new Envelope(0.01, 0.6, 0.02, 0.2);\n readonly bp2: BandPass = new BandPass(3000, 7000); \n \n readonly env3: Envelope = new Envelope(0.01, 0.1, 0.00, 0.1);\n readonly bp3: BandPass = new BandPass(10, 150); \n \n readonly signal: StereoSignal = new StereoSignal();\n\n constructor() {\n \n }\n\n set note(note: f32) { \n if(note > 1) { \n let freq : f32 = notefreq(note);\n this.osc.frequency = freq;\n this.lfo.frequency = 5.0;\n this.pan = note / 128.0;\n\n this.env1.attack(); \n this.env2.attack(); \n this.env3.attack(); \n } else {\n this.env1.release();\n this.env2.release(); \n this.env3.release(); \n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env1: f32 = this.env1.next();\n let env2: f32 = this.env2.next();\n let env3: f32 = this.env3.next();\n \n let osc: f32 = this.osc.next();\n \n const lfo: f32 = this.lfo.next();\n const filterlfo = lfo + 1;\n const panlfo = lfo * 0.2 + 1;\n const freq: f32 = this.osc.frequency;\n this.bp1.update_frequencies(freq, freq + filterlfo * 30);\n this.bp2.update_frequencies(freq * 1.5, freq * 1.5 + filterlfo * 300);\n this.bp3.update_frequencies(freq * 2.25, freq * 2.25 + filterlfo * 800);\n \n let sig1 = this.bp1.process(osc) * env1 * 12;\n let sig2 = this.bp2.process(osc) * env2 * 6;\n let sig3 = this.bp3.process(osc) * env3 * 10;\n\n this.signal.left = this.pan * (sig1 * panlfo + sig2 * 0.8 * -panlfo + sig3 * panlfo);\n this.signal.right = 1 - this.pan * (sig1 * 0.8 * -panlfo + sig2 * panlfo + sig3 - panlfo * 0.2);\n } \n}\n ","instruments/sawbass.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { Instrument } from './instrument.class';\n\nexport class SawBass extends Instrument {\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly filter: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterl: BiQuadFilter = new BiQuadFilter();\n readonly hpfilterr: BiQuadFilter = new BiQuadFilter();\n \n constructor() {\n super();\n this.hpfilterl.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n this.hpfilterr.update_coeffecients(FilterType.HighPass, SAMPLERATE, 35, Q_BUTTERWORTH);\n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = notefreq(note + 0.1);\n this.sawoscillator2.frequency = notefreq(note - 0.1);\n this.envelope.attack(); \n } else {\n this.envelope.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n // this.signal.clear();\n this.signal.left /= 1.03; // feedback\n this.signal.right /= 1.03; // feedback\n this.signal.addMonoSignal(\n this.hpfilterl.process(this.sawoscillator.next() * env), 0.3, 0.3\n );\n this.signal.addMonoSignal(\n this.hpfilterr.process(this.sawoscillator2.next() * env), 0.3, 0.7\n );\n } \n}\n ","instruments/snare.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { Noise } from '../synth/noise.class';\nimport { Instrument } from './instrument.class';\n\nexport class Snare extends Instrument {\n private velocity: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.2, 0, 0.2);\n readonly hpfilterenvelope: Envelope = new Envelope(0.01, 0.5, 0.5, 0.3);\n \n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly noise: Noise = new Noise();\n \n readonly hpfilter: BiQuadFilter = new BiQuadFilter();\n readonly lpfilter: BiQuadFilter = new BiQuadFilter();\n\n constructor() {\n super();\n this.lpfilter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 13000 , Q_BUTTERWORTH);\n }\n\n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 200;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.hpfilterenvelope.attack(); \n } else {\n this.envelope.release();\n this.hpfilterenvelope.release();\n }\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n }\n this.sawoscillator.frequency = 20.0 + (env * 200.0);\n \n \n this.hpfilter.update_coeffecients(FilterType.HighPass, SAMPLERATE, \n 20000 - (19900 * this.hpfilterenvelope.next()) , Q_BUTTERWORTH);\n\n let osc1: f32 = this.sawoscillator.next() * 0.6 + this.noise.next();\n osc1= this.hpfilter.process(osc1);\n osc1 = this.lpfilter.process(osc1);\n\n this.signal.left = this.velocity * env * osc1;\n this.signal.right = this.velocity * env * osc1;\n \n \n } \n}\n ","instruments/squarelead.class.ts":"\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { WaveShaper } from '../synth/shaper';\nimport { notefreq } from '../synth/note';\nimport { SquareOscillator } from '../synth/squareoscillator.class';\nimport { BiQuadFilter, Q_BUTTERWORTH, FilterType } from '../synth/biquad';\nimport { SAMPLERATE } from '../environment';\n\n\nexport class SquareLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.02, 0.2, 0.2, 0.2);\n readonly filterenvelope: Envelope = new Envelope(0.02, 0.1, 0.4, 0.2);\n readonly squareoscillatorl: SquareOscillator = new SquareOscillator();\n readonly squareoscillatorr: SquareOscillator = new SquareOscillator();\n readonly lpfilterleft: BiQuadFilter = new BiQuadFilter();\n readonly lpfilterright: BiQuadFilter = new BiQuadFilter();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n \n baseFrequency : f32;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note);\n this.envelope.attack(); \n this.filterenvelope.attack();\n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n let filterenv: f32 = this.filterenvelope.next();\n if(env===0 && filterenv===0) {\n this.signal.clear();\n return;\n }\n \n this.squareoscillatorl.frequency = this.baseFrequency + 0.3;\n this.squareoscillatorr.frequency = this.baseFrequency - 0.3;\n \n this.lpfilterleft.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n filterenv * 3000, Q_BUTTERWORTH);\n this.lpfilterright.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n filterenv * 3000, Q_BUTTERWORTH);\n \n let left = env* this.squareoscillatorl.next();\n left = this.shaper.process(left);\n left = this.lpfilterleft.process(left);\n\n let right = env* this.squareoscillatorr.next();\n right = this.shaper.process(right);\n right = this.lpfilterright.process(right);\n\n this.signal.left = left;\n this.signal.right = right; \n } \n}\n ","instruments/string1.class.ts":"\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { notefreq } from '../synth/note';\n\nexport class Test4KlangString {\n private _note: f32;\n readonly env0: Envelope = new Envelope(0.01, 0.2, 0.8, 0.2);\n readonly vco1: SineOscillator = new SineOscillator();\n readonly vco5: SawOscillator = new SawOscillator();\n readonly vco6: SawOscillator = new SawOscillator();\n\n readonly signal: StereoSignal = new StereoSignal();\n\n notefreq: f32;\n\n set note(note: f32) { \n if(note > 1) { \n this.notefreq = notefreq(note);\n this.vco1.frequency = this.notefreq / 1000;\n\n this.env0.attack(); \n } else {\n this.env0.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let f_0:f32 = this.env0.next(); // GO4K_ENV ATTAC(88),DECAY(88),SUSTAIN(88),RELEASE(88),GAIN(88)\n let f_1:f32 = this.vco1.next(); // GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(64),GATES(85),COLOR(64),SHAPE(64),GAIN(64),FLAGS(SINE|LFO)\n this.vco5.frequency = this.notefreq + f_1; // GO4K_FST AMOUNT(70),DEST(5*MAX_UNIT_SLOTS+2+FST_SET)\n this.vco6.frequency = this.notefreq - f_1; // GO4K_FST AMOUNT(70),DEST(6*MAX_UNIT_SLOTS+5+FST_SET)\n\n f_1 = this.vco5.next(); // GO4K_VCO TRANSPOSE(64),DETUNE(65),PHASE(64),GATES(85),COLOR(52),SHAPE(64),GAIN(64),FLAGS(TRISAW)\n let f_2:f32 = this.vco6.next(); // GO4K_VCO TRANSPOSE(64),DETUNE(63),PHASE(64),GATES(85),COLOR(52),SHAPE(64),GAIN(64),FLAGS(TRISAW)\n f_1 += f_2; // GO4K_FOP OP(FOP_ADDP)\n f_0 *= f_1; // GO4K_FOP OP(FOP_MULP)\n f_1 = f_0; // GO4K_PAN PANNING(64)\n this.signal.left = f_1;\n this.signal.right = f_0; // GO4K_OUT GAIN(0), AUXSEND(128)\n } \n}\n ","instruments/testinstrument.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { StereoSignal } from '../synth/stereosignal.class';\nimport { Envelope } from '../synth/envelope.class';\nimport { DelayLine } from '../fx/delayline';\nimport { notefreq } from '../synth/note';\n\nexport class TestInstrument {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.02, 0.2, 0.2, 0.2);\n readonly sineoscillator: SineOscillator = new SineOscillator();\n readonly sineoscillator2: SineOscillator = new SineOscillator();\n readonly delayline: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n readonly delayline2: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n readonly signal: StereoSignal = new StereoSignal();\n\n set note(note: f32) { \n if(note!==this.note && note > 1) { \n this.envelope.attack(); \n this.sineoscillator.frequency = notefreq(note);\n this.sineoscillator2.frequency = notefreq(note + 12);\n } else if(note===0) {\n this.envelope.release();\n }\n this._note = note;\n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear(); \n } else {\n let osc1 = env * this.sineoscillator.next();\n let osc2 = env * this.sineoscillator2.next();\n this.signal.left = osc1 * 0.8 + osc2 * 0.2;\n this.signal.right = osc1 * 0.2 + osc2 * 0.8;\n }\n } \n}\n ","math/fft.ts":"/**\n * Originally ported from http://rosettacode.org/wiki/Fast_Fourier_transform#C_sharp\n * \n * Optimized by reusing Complex objects instead of creating new, avoiding garbage collection\n * Precalculating of twiddles, making reuse of the FFT instance faster \n */ \n\n\nexport class Complex {\n re: f32 = 0;\n im: f32 = 0;\n \n public clone(b: Complex): void {\n this.re = b.re;\n this.im = b.im;\n }\n\n public add(b: Complex): void {\n this.re += b.re;\n this.im += b.im;\n }\n \n public sub(b: Complex): void {\n this.re -= b.re;\n this.im -= b.im;\n }\n \n public mult(b: Complex): void {\n const re: f32 = this.re;\n\n this.re = re * b.re - this.im * b.im;\n this.im = re * b.im + this.im * b.re;\n }\n\n public scale(n: f32): void {\n this.re *= n;\n this.im *= n;\n }\n\n public conjugate(): void {\n this.im = -this.im;\n }\n}\n\nfunction bitReverse(n: i32, bits: i32): i32 {\n let reversedN: i32 = n;\n let count: i32 = bits - 1;\n\n n >>= 1;\n while (n > 0) {\n reversedN = (reversedN << 1) | (n & 1);\n count--;\n n >>= 1;\n }\n\n return ((reversedN << count) & ((1 << bits) - 1));\n}\n \n/* Uses Cooley-Tukey iterative in-place algorithm with radix-2 DIT case\n * assumes no of points provided are a power of 2 */\nexport class FFT {\n buffer: StaticArray;\n bits: i32;\n exps: StaticArray;\n tmp: Complex = new Complex();\n\n /**\n * \n * @param buffersize_shift buffersize will be 2^buffersize_shift\n */\n constructor(buffersize_shift: i32) {\n const buffersize = 1 << buffersize_shift;\n const buffer = new StaticArray(buffersize);\n for (let n=0;n((\n buffersize as f32 *\n NativeMathf.log2(buffersize as f32)\n ) as i32);\n\n let expsIndex = 0;\n for (let N: i32 = 2; N <= buffer.length; N <<= 1) {\n for (let i: i32 = 0; i < buffer.length; i += N) {\n for (let k: i32 = 0; k < (N >> 1); k++) {\n const term: f32 = -2 * NativeMathf.PI * (k as f32) / (N as f32);\n const exp: Complex = new Complex();\n exp.re = NativeMathf.cos(term);\n exp.im = NativeMathf.sin(term);\n this.exps[expsIndex++] = exp;\n }\n }\n }\n }\n\n calculateInverse(): void {\n const N = this.buffer.length;\n const iN: f32 = 1 / (N as f32);\n\n for (let n=0;n> 1); k++) {\n const evenIndex = i + k;\n const oddIndex = i + k + (N >> 1);\n const even = buffer[evenIndex];\n const odd = buffer[oddIndex];\n const exp = this.tmp;\n exp.clone(this.exps[expsIndex++]);\n\n exp.mult(odd);\n\n odd.clone(even);\n even.add(exp);\n odd.sub(exp);\n }\n }\n }\n }\n}\n\nexport function createFFT(buffersize_shift: i32): usize {\n return changetype(new FFT(buffersize_shift));\n}\n\nexport function setComplex(instance: usize, arrayIndex: i32, re: f32, im: f32): void {\n const buffer = changetype(instance).buffer;\n buffer[arrayIndex].re = re;\n buffer[arrayIndex].im = im;\n}\n\nexport function getComplexRe(instance: usize, arrayIndex: i32): f32 {\n return changetype(instance).buffer[arrayIndex].re;\n}\n\nexport function getComplexIm(instance: usize, arrayIndex: i32): f32 {\n return changetype(instance).buffer[arrayIndex].im;\n}\n\nexport function calculateFFT(instance: usize): void {\n changetype(instance).calculate();\n}\n\nexport function calculateIFFT(instance: usize): void {\n changetype(instance).calculateInverse();\n}","math/sin.ts":"// By Max Graey ( https://github.com/petersalomonsen/javascriptmusic/issues/2#issuecomment-469419609 )\n\nexport const PI: f32 = 3.141592653589793;\nexport function sin(x: f32): f32 {\n var y: f32, z: f32;\n x *= 1 / PI;\n y = floor(x);\n z = x - y;\n z *= 1.0 - z;\n z *= 3.6 * z + 3.1;\n return select(-z, z, y & 1);\n}\n\nexport function cos(x: f32): f32 {\n return sin(x + PI * .5);\n}","midi/instruments/audioplayer.ts":"import { LoPassBiQuadFilter, MidiChannel, Q_BUTTERWORTH } from \"../../mixes/globalimports\";\nimport { Envelope } from \"../../synth/envelope.class\";\nimport { MidiVoice } from \"../midisynth\";\n\nconst CONTROL_FREQUENCY_CUTOFF = 74;\nconst MAX_CUTOFF_FREQUENCY: f32 = 20000;\nconst audioBuffers: Array> = new Array>();\n\nexport class AudioPlayerChannel extends MidiChannel {\n gain: f32 = 1.0;\n cutoff: f32 = MAX_CUTOFF_FREQUENCY;\n lopassleft: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n lopassright: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n\n controlchange(controller: u8, value: u8): void {\n super.controlchange(controller, value);\n switch (controller) {\n case CONTROL_FREQUENCY_CUTOFF:\n this.cutoff = value * MAX_CUTOFF_FREQUENCY / 127 as f32;\n this.lopassleft.update(this.cutoff, Q_BUTTERWORTH);\n this.lopassright.update(this.cutoff, Q_BUTTERWORTH);\n break;\n }\n }\n\n preprocess(): void {\n let left = this.signal.left;\n let right = this.signal.right;\n if (this.cutoff < MAX_CUTOFF_FREQUENCY) {\n left = this.lopassleft.process(left);\n right = this.lopassright.process(right);\n }\n left *= this.gain;\n right *= this.gain;\n\n this.signal.left = left;\n this.signal.right = right;\n }\n}\n\nexport class AudioPlayer extends MidiVoice {\n position: i32 = 0;\n velocityLevel: f32;\n\n constructor(channel: MidiChannel,\n private audioBufferPairNdx: i32,\n private startPosition: i32,\n noteNumber: u8,\n private env: Envelope = new Envelope(0.01, 0.0, 1.0, 0.01)\n ) {\n super(channel);\n this.minnote = noteNumber;\n this.maxnote = noteNumber;\n }\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.velocityLevel = velocity as f32 / 127 as f32;\n this.position = this.startPosition;\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return audioBuffers.length == 0 || this.env.isDone();\n }\n\n nextframe(): void {\n const env = this.env.next();\n const vel = env * this.velocityLevel;\n\n let pos = this.position;\n const audioBufferNdx = this.audioBufferPairNdx << 1;\n const leftarr = audioBuffers[audioBufferNdx];\n const left = vel * leftarr[pos];\n const right = vel * audioBuffers[audioBufferNdx + 1][pos];\n pos++;\n if (pos == leftarr.length) {\n pos = 0;\n }\n this.position = pos;\n\n this.channel.signal.left += left;\n this.channel.signal.right += right;\n }\n}\n\nexport class MonoAudioPlayer {\n position: i32 = 0;\n\n constructor(private audioBufferNdx: i32) {\n\n }\n\n restart(): void {\n this.position = 0;\n }\n\n get audioBuffer(): StaticArray {\n return audioBuffers[this.audioBufferNdx];\n }\n\n nextframe(): f32 {\n return this.audioBuffer[(this.position++) % this.audioBuffer.length];\n }\n}\n\nexport function allocateAudioBuffer(frames: i32): usize {\n const buf = new StaticArray(frames);\n audioBuffers.push(buf);\n return changetype(buf);\n}","midi/instruments/defaultinstrument.ts":"import { Envelope } from \"../../synth/envelope.class\";\nimport { notefreq } from \"../../synth/note\";\nimport { SineOscillator } from \"../../synth/sineoscillator.class\";\nimport { MidiVoice } from \"../midisynth\";\n\nexport class DefaultInstrument extends MidiVoice {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.01, 0.0, 1.0, 0.01);\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.osc.frequency = notefreq(note);\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return this.env.isDone();\n }\n\n nextframe(): void {\n const signal = this.osc.next() * this.env.next() * this.velocity / 256;\n this.channel.signal.addMonoSignal(signal, 0.2, 0.5);\n }\n}","midi/midisynth.ts":"import { initializeMidiSynth, postprocess } from '../mixes/midi.mix';\nimport { StereoSignal, Freeverb } from '../mixes/globalimports';\nimport { midiLevelToGain } from '../synth/decibel';\n\nimport { Pan } from '../synth/pan.class';\nimport { DefaultInstrument } from './instruments/defaultinstrument';\n// export { allocateAudioBuffer } from './instruments/audioplayer';\n\nexport const MAX_ACTIVE_VOICES_SHIFT = 5; // up to 32 voices playing simultaneously\nexport const MAX_ACTIVE_VOICES = 1 << MAX_ACTIVE_VOICES_SHIFT;\n\nexport const midichannels = new StaticArray(16);\nexport const activeVoices = new StaticArray(MAX_ACTIVE_VOICES);\nconst activeVoicesStatusSnapshot = new StaticArray(MAX_ACTIVE_VOICES * 3);\n\nexport let numActiveVoices = 0;\nexport let voiceActivationCount = 0;\n\nexport const sampleBufferFrames = 128;\nexport const sampleBufferBytesPerChannel = sampleBufferFrames * 4;\nexport const sampleBufferChannels = 2;\nexport const samplebuffer = new StaticArray(sampleBufferFrames * sampleBufferChannels);\nconst bufferposstart = changetype(samplebuffer);\nconst bufferposend = changetype(samplebuffer) + sampleBufferBytesPerChannel;\n\nconst CONTROL_SUSTAIN: u8 = 64;\nconst CONTROL_VOLUME: u8 = 7;\nconst CONTROL_PAN: u8 = 10;\nconst CONTROL_REVERB: u8 = 91;\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\nexport const outputline = new StereoSignal();\nexport class MidiChannel {\n controllerValues: StaticArray = new StaticArray(128);\n voices: StaticArray;\n sustainedVoices: StaticArray = new StaticArray(128);\n\n signal: StereoSignal = new StereoSignal();\n volume: f32 = midiLevelToGain(100);\n reverb: f32 = midiLevelToGain(7);\n pan: Pan = new Pan();\n voiceTransitionBuffer: StaticArray = new StaticArray(sampleBufferFrames * 2);\n\n constructor(numvoices: i32, factoryFunc: (channel: MidiChannel, voiceindex: i32) => MidiVoice) {\n this.voices = new StaticArray(numvoices);\n for (let n = 0; n < numvoices; n++) {\n this.voices[n] = factoryFunc(this, n);\n }\n\n }\n\n controlchange(controller: u8, value: u8): void {\n this.controllerValues[controller] = value;\n\n switch (controller) {\n case CONTROL_SUSTAIN:\n // sustain\n if (value < 64) {\n for (let n = 0; n < 128; n++) {\n if (this.sustainedVoices[n] != null) {\n (this.sustainedVoices[n] as MidiVoice).noteoff();\n this.sustainedVoices[n] = null;\n }\n }\n }\n break;\n case CONTROL_VOLUME:\n this.volume = midiLevelToGain(value);\n break;\n case CONTROL_REVERB:\n this.reverb = midiLevelToGain(value);\n break;\n case CONTROL_PAN:\n this.pan.setPan((value as f32) / 127.0);\n break;\n }\n }\n\n noteoff(note: u8): void {\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (voice.note === note) {\n if (this.controllerValues[CONTROL_SUSTAIN] >= 64) {\n this.sustainedVoices[note] = voice;\n } else { \n voice.noteoff();\n }\n break;\n }\n }\n }\n\n removeFromSustainedVoices(voice: MidiVoice): void {\n this.sustainedVoices[voice.note] = null;\n }\n\n activateVoice(note: u8, channelNo: u8): MidiVoice | null {\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n voice.channelNo = channelNo;\n if (voice.activeVoicesIndex > -1 && voice.note === note) {\n // Found already active voice for the given note\n voice.activationCount = voiceActivationCount++;\n // must remove from sustained voices\n this.removeFromSustainedVoices(voice);\n return voice;\n }\n }\n\n if (numActiveVoices === activeVoices.length) {\n return null;\n }\n\n let activeVoiceIndex: i32 = numActiveVoices;\n\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (voice.activeVoicesIndex === -1 &&\n note >= voice.minnote &&\n note <= voice.maxnote) {\n const availableVoice = voice as MidiVoice;\n activeVoices[activeVoiceIndex] = availableVoice;\n availableVoice.activeVoicesIndex = activeVoiceIndex;\n numActiveVoices++;\n availableVoice.activationCount = voiceActivationCount++;\n return availableVoice;\n }\n }\n\n // no available voices for the current channel, we'll pick the oldest\n let oldestVoice: MidiVoice | null = null;\n for (let n = 0; n < this.voices.length; n++) {\n const voice = this.voices[n];\n if (\n (oldestVoice === null ||\n voice.activationCount <= (oldestVoice as MidiVoice).activationCount) &&\n note >= voice.minnote &&\n note <= voice.maxnote) {\n oldestVoice = voice;\n }\n }\n if (oldestVoice !== null) {\n const voice = (oldestVoice as MidiVoice);\n for (let n = 0;n 0) {\n const activatedVoice = midichannels[channel].activateVoice(val2, channel);\n if (activatedVoice !== null) {\n const voice = activatedVoice as MidiVoice;\n voice.noteon(val2, val3);\n }\n } else if (\n (command === 0x80 ||\n (command === 0x90 && val3 === 0)) // \n ) {\n // note off\n midichannels[channel].noteoff(val2);\n } else if (command === 0xb0) {\n // control change\n midichannels[channel].controlchange(val2, val3);\n }\n}\n\nexport function getActiveVoicesStatusSnapshot(): usize {\n for (let n=0;n(activeVoicesStatusSnapshot);\n}\n\nexport function allNotesOff(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n const voice = activeVoices[n] as MidiVoice;\n voice.noteoff();\n }\n}\n\nexport function cleanupInactiveVoices(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n const voice = activeVoices[n] as MidiVoice;\n if (voice.isDone()) {\n voice.deactivate();\n for (let r = n + 1; r < numActiveVoices; r++) {\n const nextVoice = activeVoices[r] as MidiVoice;\n nextVoice.activeVoicesIndex--;\n activeVoices[r - 1] = nextVoice;\n activeVoices[r] = null;\n }\n numActiveVoices--;\n n--;\n }\n }\n}\n\nexport function playActiveVoices(): void {\n for (let n = 0; n < numActiveVoices; n++) {\n (activeVoices[n] as MidiVoice).nextframe();\n }\n}\n\nexport function fillSampleBuffer(): void {\n cleanupInactiveVoices();\n\n let voiceTransitionBufferNdx = 0;\n\n for (let bufferpos = bufferposstart; bufferpos < bufferposend; bufferpos += 4) {\n playActiveVoices();\n\n for (let ch = 0; ch < 16; ch++) {\n const midichannel = midichannels[ch];\n const channelsignal = midichannel.signal;\n\n channelsignal.left += midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx];\n midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx] = 0;\n channelsignal.right +=midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx+1];\n midichannel.voiceTransitionBuffer[voiceTransitionBufferNdx+1] = 0;\n \n midichannel.preprocess(); \n \n channelsignal.left *= midichannel.pan.leftLevel * midichannel.volume;\n channelsignal.right *= midichannel.pan.rightLevel * midichannel.volume;\n\n const reverb = midichannel.reverb;\n\n mainline.add(channelsignal.left, channelsignal.right);\n reverbline.add(channelsignal.left * reverb, channelsignal.right * reverb);\n midichannel.signal.clear();\n }\n\n freeverb.tick(reverbline);\n\n outputline.add(\n mainline.left + reverbline.left,\n mainline.right + reverbline.right\n );\n\n postprocess();\n\n store(bufferpos, outputline.left);\n store(bufferpos + sampleBufferBytesPerChannel, outputline.right);\n\n mainline.clear();\n reverbline.clear();\n outputline.clear();\n voiceTransitionBufferNdx += 2;\n }\n}\n\nconst defaultMidiChannel = new MidiChannel(1, (channel: MidiChannel) => new DefaultInstrument(channel));\n\nfor (let ch = 0; ch < 16; ch++) {\n midichannels[ch] = defaultMidiChannel;\n}\n\ninitializeMidiSynth();\n\n","midi/sequencer/midiparts.ts":"import { MidiSequencerPart, MidiSequencerPartSchedule } from \"./midisequencerpart\";\n\nexport const midiparts: MidiSequencerPart[] = new Array();\nexport const midipartschedule: MidiSequencerPartSchedule[] = new Array();\n","midi/sequencer/midisequencer.ts":"import { SAMPLERATE } from \"../../environment\";\nimport { midiparts, midipartschedule } from \"./midiparts\";\nimport { fillSampleBuffer, sampleBufferFrames } from \"../midisynth\";\n\nconst PLAY_EVENT_INTERVAL = ((sampleBufferFrames * 1000) as f64 / SAMPLERATE);\n\nexport let currentTimeMillis: f64 = 0;\n\nexport function seek(time: i32): void {\n currentTimeMillis = time as f64;\n\n for (let ndx = 0;\n ndx < midipartschedule.length;\n ndx++) {\n const scheduleEntry = midipartschedule[ndx];\n const midiSequencerPart = midiparts[scheduleEntry.midipartindex];\n if (scheduleEntry.endTime >= currentTimeMillis && scheduleEntry.startTime <= currentTimeMillis) {\n midiSequencerPart.seek(Math.round(currentTimeMillis) as i32 - scheduleEntry.startTime);\n } else {\n midiSequencerPart.seek(0);\n }\n }\n}\n\nexport function playMidiPartEvents(): void {\n for (let ndx = 0;\n ndx < midipartschedule.length;\n ndx++) {\n const scheduleEntry = midipartschedule[ndx]; \n if (scheduleEntry.startTime > currentTimeMillis) {\n break;\n }\n const midiSequencerPart = midiparts[scheduleEntry.midipartindex];\n if (currentTimeMillis <= (scheduleEntry.endTime + PLAY_EVENT_INTERVAL)) {\n midiSequencerPart.playEvents(Math.round(currentTimeMillis) as i32 - scheduleEntry.startTime);\n }\n }\n}\n\nexport function playEventsAndFillSampleBuffer(): void {\n playMidiPartEvents();\n fillSampleBuffer();\n currentTimeMillis += PLAY_EVENT_INTERVAL;\n}\n\nexport function setMidiPartSchedule(ndx: i32, midipartindex: i32, startTime: i32): void {\n midipartschedule[ndx].updateEndTime(midipartindex, startTime);\n}\n","midi/sequencer/midisequencerpart.ts":"import { midiparts, midipartschedule } from \"./midiparts\";\nimport { shortmessage } from \"../midisynth\";\n\nexport class MidiSequencerPart {\n currentEventTime: i32 = 0;\n currentEventIndex: i32 = 0;\n previousTargetTime: i32 = 0;\n lastEventTime: i32 = 0;\n\n constructor(public eventlist: u8[]) {\n let lastEventTime = 0;\n for (let ndx = 0; ndx < this.eventlist.length;ndx += 3) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += (((deltaTimePart & 0x7f) as i32) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n lastEventTime = lastEventTime + deltaTime;\n }\n this.lastEventTime = lastEventTime;\n }\n\n playEvents(targetTime: i32): void {\n if (targetTime < this.previousTargetTime) {\n this.currentEventTime = 0;\n this.currentEventIndex = 0;\n }\n this.previousTargetTime = targetTime;\n let ndx = this.currentEventIndex;\n\n while (ndx < this.eventlist.length) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += (((deltaTimePart & 0x7f) as i32) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n const newTime = this.currentEventTime + deltaTime;\n\n if (newTime <= targetTime) {\n shortmessage(this.eventlist[ndx++], this.eventlist[ndx++], this.eventlist[ndx++]);\n\n this.currentEventTime = newTime;\n this.currentEventIndex = ndx;\n } else {\n break;\n }\n }\n }\n\n seek(targetTime: i32): void {\n this.currentEventIndex = 0;\n this.currentEventTime = 0;\n let ndx = this.currentEventIndex;\n\n while (ndx < this.eventlist.length) {\n let deltaTime: i32 = 0;\n let deltaTimePart: u8;\n\n let shiftamount: u8 = 0;\n do {\n deltaTimePart = this.eventlist[ndx++];\n deltaTime += ((deltaTimePart & 0x7f) << shiftamount);\n shiftamount += 7;\n } while (deltaTimePart & 0x80);\n\n const newTime = this.currentEventTime + deltaTime;\n\n if (newTime < targetTime) {\n ndx += 3;\n this.currentEventTime = newTime;\n this.currentEventIndex = ndx;\n } else if (newTime === targetTime) {\n this.currentEventTime = newTime;\n } else {\n break;\n }\n }\n }\n}\n\nexport class MidiSequencerPartSchedule {\n public endTime: i32\n\n constructor(\n public midipartindex: i32,\n public startTime: i32) {\n this.endTime = midiparts[midipartindex].lastEventTime + startTime;\n }\n\n updateEndTime(midipartindex: i32, startTime: i32): void {\n this.startTime = startTime;\n this.midipartindex = midipartindex;\n this.endTime = midiparts[midipartindex].lastEventTime + startTime;\n }\n}\n","mixes/empty.mix.ts":"import { Kick2, SawBass, Instrument,\n StereoSignal,\n Freeverb } from \"./globalimports\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst kick = new Kick2();\nconst sawbass = new SawBass();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n ([kick, sawbass] as Instrument[])[channel].note = value;\n}\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\n@inline\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear();\n reverbline.clear();\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.5, 0.5);\n\n sawbass.next();\n mainline.addStereoSignal(sawbass.signal, 0.5, 0.5);\n reverbline.addStereoSignal(sawbass.signal, 0.1, 0.5);\n\n freeverb.tick(reverbline);\n\n store(leftSampleBufferPtr, mainline.left + reverbline.left);\n store(rightSampleBufferPtr, mainline.right + reverbline.right); \n}","mixes/globalimports.ts":"export { createInstrumentArray } from '../common/mixcommon';\nexport { AllPass } from '../fx/allpass';\nexport { AllPassFloat } from '../fx/allpass';\nexport { BandPass } from '../fx/bandpass';\nexport { Comb } from '../fx/comb';\nexport { DelayLine } from '../fx/delayline';\nexport { DelayLineFloat } from '../fx/delayline';\nexport { EQBand } from '../fx/eqband';\nexport { Freeverb } from '../fx/freeverb';\nexport { Limiter } from '../fx/limiter';\nexport { MidSideProcessor } from '../fx/midsideprocessor';\nexport { MonoCompressor } from '../fx/monocompressor';\nexport { StereoCompressor } from '../fx/monocompressor';\nexport { MultiBandEQ } from '../fx/multibandeq';\nexport { StereoCompressor } from '../fx/stereocompressor';\nexport { TriBandEQ } from '../fx/tribandeq';\nexport { TriBandStereoCompressor } from '../fx/tribandstereocompressor';\nexport { DeepBass } from '../instruments/bass/deepbass';\nexport { SawBass2 } from '../instruments/bass/sawbass2.class';\nexport { SawBass3 } from '../instruments/bass/sawbass3';\nexport { DriveLead } from '../instruments/drivelead.class';\nexport { Kick2 } from '../instruments/drums/kick2.class';\nexport { Rimshot } from '../instruments/drums/rimshot.class';\nexport { Snare2 } from '../instruments/drums/snare2.class';\nexport { Hihat } from '../instruments/hihat.class';\nexport { Instrument } from '../instruments/instrument.class';\nexport { Kick } from '../instruments/kick.class';\nexport { BrassyLead } from '../instruments/lead/brassy';\nexport { Eftang } from '../instruments/lead/eftang';\nexport { SineLead } from '../instruments/lead/sinelead';\nexport { FlatPad } from '../instruments/pad/flatpad.class';\nexport { SoftPad } from '../instruments/pad/softpad.class';\nexport { Pad } from '../instruments/pad.class';\nexport { SubPiano } from '../instruments/piano/subpiano';\nexport { SawBass } from '../instruments/sawbass.class';\nexport { Snare } from '../instruments/snare.class';\nexport { SquareLead } from '../instruments/squarelead.class';\nexport { Test4KlangString } from '../instruments/string1.class';\nexport { TestInstrument } from '../instruments/testinstrument.class';\nexport { Complex } from '../math/fft';\nexport { FFT } from '../math/fft';\nexport { createFFT } from '../math/fft';\nexport { setComplex } from '../math/fft';\nexport { getComplexRe } from '../math/fft';\nexport { getComplexIm } from '../math/fft';\nexport { calculateFFT } from '../math/fft';\nexport { calculateIFFT } from '../math/fft';\nexport { PI } from '../math/sin';\nexport { sin } from '../math/sin';\nexport { cos } from '../math/sin';\nexport { AudioPlayerChannel } from '../midi/instruments/audioplayer';\nexport { AudioPlayer } from '../midi/instruments/audioplayer';\nexport { MonoAudioPlayer } from '../midi/instruments/audioplayer';\nexport { allocateAudioBuffer } from '../midi/instruments/audioplayer';\nexport { DefaultInstrument } from '../midi/instruments/defaultinstrument';\nexport { MAX_ACTIVE_VOICES_SHIFT } from '../midi/midisynth';\nexport { MAX_ACTIVE_VOICES } from '../midi/midisynth';\nexport { midichannels } from '../midi/midisynth';\nexport { activeVoices } from '../midi/midisynth';\nexport { numActiveVoices } from '../midi/midisynth';\nexport { voiceActivationCount } from '../midi/midisynth';\nexport { sampleBufferFrames } from '../midi/midisynth';\nexport { sampleBufferBytesPerChannel } from '../midi/midisynth';\nexport { sampleBufferChannels } from '../midi/midisynth';\nexport { samplebuffer } from '../midi/midisynth';\nexport { outputline } from '../midi/midisynth';\nexport { MidiChannel } from '../midi/midisynth';\nexport { MidiVoice } from '../midi/midisynth';\nexport { shortmessage } from '../midi/midisynth';\nexport { getActiveVoicesStatusSnapshot } from '../midi/midisynth';\nexport { allNotesOff } from '../midi/midisynth';\nexport { cleanupInactiveVoices } from '../midi/midisynth';\nexport { playActiveVoices } from '../midi/midisynth';\nexport { fillSampleBuffer } from '../midi/midisynth';\nexport { Q_BUTTERWORTH } from '../synth/biquad';\nexport { FilterType } from '../synth/biquad';\nexport { Coefficients } from '../synth/biquad';\nexport { BiQuadFilter } from '../synth/biquad';\nexport { LoPassBiQuadFilter } from '../synth/biquad';\nexport { HiPassBiQuadFilter } from '../synth/biquad';\nexport { beatToFrame } from '../synth/bpm';\nexport { softclip } from '../synth/clip';\nexport { hardclip } from '../synth/clip';\nexport { decibelToGain } from '../synth/decibel';\nexport { midiLevelToDecibel } from '../synth/decibel';\nexport { midiLevelToGain } from '../synth/decibel';\nexport { EnvelopeState } from '../synth/envelope.class';\nexport { Envelope } from '../synth/envelope.class';\nexport { IFFTOscillator } from '../synth/ifftoscillator.class';\nexport { Noise } from '../synth/noise.class';\nexport { notefreq } from '../synth/note';\nexport { Pan } from '../synth/pan.class';\nexport { SawOscillator } from '../synth/sawoscillator.class';\nexport { WaveShaper } from '../synth/shaper';\nexport { SineOscillator } from '../synth/sineoscillator.class';\nexport { SquareOscillator } from '../synth/squareoscillator.class';\nexport { StereoSignal } from '../synth/stereosignal.class';\nexport { TriangleOscillator } from '../synth/triangleoscillator.class';\nexport { noise } from '../synth/waveguide';\nexport { WaveGuide } from '../synth/waveguide';\nexport { AuxExciterWaveGuide } from '../synth/waveguide';\nexport { AudioExciterWaveGuide } from '../synth/waveguide';\nexport { CustomExciterWaveGuide } from '../synth/waveguide';","mixes/goodtimes.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { TestInstrument } from \"../instruments/testinstrument.class\";\n\nimport { Pad } from \"../instruments/pad.class\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Rimshot } from \"../instruments/drums/rimshot.class\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { SquareLead } from \"../instruments/squarelead.class\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SawBass2 } from \"../instruments/bass/sawbass2.class\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.2;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet flute = new TestInstrument();\nlet drivelead = new DriveLead();\nlet bass = new SawBass2();\nlet pad1 = new Pad();\nlet pad2 = new Pad();\nlet pad3 = new Pad();\nlet kick = new Kick2();\nlet rimshot = new Rimshot();\nlet hihat = new Hihat();\nlet squarelead = new SquareLead();\n\nlet freeverb = new Freeverb();\n\nlet delayLeft: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\nlet delayRight: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n flute.note = value;\n break;\n case 1:\n bass.note = value;\n break;\n case 2:\n pad1.note = value;\n break;\n case 3:\n pad2.note = value;\n break;\n case 4:\n pad3.note = value;\n break;\n case 5:\n kick.note = value;\n break;\n case 6:\n rimshot.note = value;\n break;\n case 7:\n drivelead.note = value;\n break;\n case 8:\n hihat.note = value;\n break;\n case 9:\n squarelead.note = value;\n break;\n }\n \n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n flute.next();\n pad1.next(); \n pad2.next();\n pad3.next(); \n kick.next();\n rimshot.next();\n hihat.next();\n bass.next(); \n drivelead.next();\n squarelead.next();\n\n mainline.addStereoSignal(flute.signal, 0.6, 0.0);\n echoline.addStereoSignal(flute.signal, 0.5, 1.0);\n \n mainline.addStereoSignal(pad1.signal, 0.5, 0.25);\n echoline.addStereoSignal(pad1.signal, 0.3, 0.25); \n mainline.addStereoSignal(pad2.signal, 0.5, 0.5);\n echoline.addStereoSignal(pad2.signal, 0.25, 0.5);\n mainline.addStereoSignal(pad3.signal, 0.5, 0.75);\n echoline.addStereoSignal(pad3.signal, 0.25, 0.75);\n\n mainline.addStereoSignal(kick.signal, 1.7, 0.5);\n reverbline.addStereoSignal(kick.signal, 0.08, 0.0);\n \n mainline.addStereoSignal(rimshot.signal, 0.75, 0.6);\n reverbline.addStereoSignal(rimshot.signal, 0.20, 0.4);\n \n mainline.addStereoSignal(hihat.signal, 1.0, 0.4);\n reverbline.addStereoSignal(hihat.signal, 0.2, 0.6);\n\n mainline.addStereoSignal(bass.signal, 0.6, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.07, 0.0);\n\n mainline.addStereoSignal(drivelead.signal, 0.17, 0.4);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.6);\n\n mainline.addStereoSignal(squarelead.signal,0.6, 0.6);\n echoline.addStereoSignal(squarelead.signal, 0.6, 0.0);\n\n echoline.left += delayRight.read() * 0.5;\n echoline.right += delayLeft.read() * 0.5;\n \n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n reverbline.addStereoSignal(echoline, 0.5, 0.5);\n \n freeverb.tick(reverbline);\n \n let left = gain * (mainline.left + echoline.left + reverbline.left);\n let right = gain * (mainline.right + echoline.right + reverbline.right);\n\n if (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.45, 1.0, 0.9 , 1.3, 1.05, 1.0);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/midi.mix.ts":"import { midichannels, MidiChannel, MidiVoice, SineOscillator, Envelope, notefreq } from './globalimports';\nimport { outputline } from '../midi/midisynth';\nimport { hardclip } from '../synth/clip';\n\nclass SimpleSine extends MidiVoice {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.1, 0.0, 1.0, 0.1);\n\n noteon(note: u8, velocity: u8): void {\n super.noteon(note, velocity);\n this.osc.frequency = notefreq(note);\n this.env.attack();\n }\n\n noteoff(): void {\n this.env.release();\n }\n\n isDone(): boolean {\n return this.env.isDone();\n }\n\n nextframe(): void {\n const signal = this.osc.next() * this.env.next() * this.velocity / 256;\n this.channel.signal.addMonoSignal(signal, 0.2, 0.7);\n }\n}\n\nexport function initializeMidiSynth(): void {\n midichannels[0] = new MidiChannel(6, (channel: MidiChannel) => new SimpleSine(channel));\n}\n\nexport function postprocess(): void {\n outputline.left = hardclip(outputline.left);\n outputline.right = hardclip(outputline.right);\n}","mixes/newyear.mix.ts":"/**\n * Mix for \"WASM song\"\n */\nimport { EQBand } from \"../fx/eqband\";\nimport { Envelope } from '../synth/envelope.class';\nimport { Snare } from \"../instruments/snare.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { BrassyLead } from \"../instruments/lead/brassy\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { WaveShaper } from '../synth/shaper';\nimport { createInstrumentArray } from '../common/mixcommon';\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { BiQuadFilter, FilterType, Q_BUTTERWORTH } from '../synth/biquad';\nimport { notefreq } from '../synth/note';\nimport { SineOscillator } from '../synth/sineoscillator.class';\nimport { SawOscillator } from '../synth/sawoscillator.class';\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst tribandstereocompressor = new TriBandStereoCompressor(0.05, 25,150,1500,20000);\nconst ENABLE_MULTIBAND_COMPRESSOR = true;\n\nconst gain: f32 = 0.5;\n\nconst bass = new SawBass3();\nconst lead = new Eftang();\nconst kick = new Kick();\nconst snare = new Snare();\nconst hihat = new Hihat();\n\n\nexport class FlatPad {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.01, 0.1, 1.0, 0.1);\n readonly filterenvelope: Envelope = new Envelope(0.001, 1.0, 1.0, 0.1);\n readonly hipassfilterenvelope: Envelope = new Envelope(0.02, 3, 0.2, 2.0);\n readonly sawoscillator: SawOscillator = new SawOscillator();\n readonly sawoscillator2: SawOscillator = new SawOscillator();\n readonly sawoscillator3: SawOscillator = new SawOscillator();\n readonly sawoscillator4: SawOscillator = new SawOscillator();\n readonly sawoscillator5: SawOscillator = new SawOscillator();\n readonly lfo: SineOscillator = new SineOscillator();\n \n readonly filterl: BiQuadFilter = new BiQuadFilter();\n readonly filterr: BiQuadFilter = new BiQuadFilter();\n readonly signal: StereoSignal = new StereoSignal();\n \n set note(note: f32) { \n if(note > 1) { \n this.lfo.frequency = 1;\n this.lfo.position = 0;\n this.sawoscillator.frequency = notefreq(note);\n this.sawoscillator2.frequency = notefreq(note + 0.03);\n this.sawoscillator3.frequency = notefreq(note - 0.03);\n this.sawoscillator4.frequency = notefreq(note + 0.06);\n this.sawoscillator5.frequency = notefreq(note - 0.06);\n \n this.envelope.attack(); \n this.filterenvelope.attack(); \n this.hipassfilterenvelope.attack(); \n this._note = note; \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n this.hipassfilterenvelope.release(); \n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env === 0) {\n this.signal.clear();\n return;\n \n }\n\n const lfo: f32 = this.lfo.next();\n\n const note = this.note;\n if(note<2) {\n return;\n }\n this.sawoscillator2.frequency = notefreq(note + 0.05 + (0.02 * lfo));\n this.sawoscillator3.frequency = notefreq(note - 0.05 - (0.02 * lfo));\n this.sawoscillator4.frequency = notefreq(note + 0.1 + (0.03 * lfo));\n this.sawoscillator5.frequency = notefreq(note - 0.1 - (0.03 * lfo));\n \n \n let osc: f32 = this.sawoscillator.next();\n let osc2: f32 = this.sawoscillator2.next();\n let osc3: f32 = this.sawoscillator3.next();\n let osc4: f32 = this.sawoscillator4.next();\n let osc5: f32 = this.sawoscillator5.next();\n \n let left = env * (osc + osc2 + osc5);\n let right = env * (osc + osc3 + osc4 );\n\n const filterlfo: f32 = (lfo * 0.9) + 1;\n this.filterl.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (127 - this.note), Q_BUTTERWORTH);\n \n this.filterr.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 200 + this.filterenvelope.next() * filterlfo * 10000 + 20 * (this.note), Q_BUTTERWORTH);\n \n this.signal.left = this.filterl.process(left );\n this.signal.right = this.filterr.process(right );\n } \n}\n \nconst pads: FlatPad[] = createInstrumentArray(10, () => new FlatPad());\nlet padsVolume: f32 = 1.0;\n\nclass SineLead {\n private _note: f32;\n \n readonly osc: SineOscillator = new SineOscillator();\n readonly env1: Envelope = new Envelope(0.02, 0.15, 0.5, 0.3); \n readonly signal: StereoSignal = new StereoSignal();\n\n\n set note(note: f32) { \n if(note > 1) { \n this.osc.frequency = notefreq(note);\n this._note = note;\n this.env1.attack(); \n } else {\n this.env1.release(); \n } \n }\n\n get note(): f32 {\n return this._note;\n }\n\n next(): void { \n const env1: f32 = this.env1.next();\n \n let osc: f32 = this.osc.next(); \n osc *= env1;\n\n const pan = this._note / 127;\n\n this.signal.left = osc * pan;\n this.signal.right = osc * (1 - pan); \n } \n}\n\nexport class DriveLead {\n private _note: f32;\n readonly envelope: Envelope = new Envelope(0.03, 1.0, 0.6, 0.2);\n readonly sawoscillatorl: SawOscillator = new SawOscillator();\n readonly sawoscillatorr: SawOscillator = new SawOscillator();\n readonly shaper: WaveShaper = new WaveShaper();\n readonly signal: StereoSignal = new StereoSignal();\n readonly lfoenvelope: Envelope = new Envelope(1.0, 0, 1.0, 0.1);\n readonly lfo: SineOscillator = new SineOscillator();\n private baseFrequency : f32;\n private pitchbend: f32 = 0;\n\n set note(note: f32) { \n if(note > 1) { \n this.shaper.drive = 0.5; \n this.baseFrequency = notefreq(note + this.pitchbend);\n this.lfo.frequency = 8;\n this.envelope.attack(); \n this.lfoenvelope.attack(); \n this._note = note;\n } else {\n this.envelope.release();\n this.lfoenvelope.release();\n }\n \n }\n\n get note(): f32 {\n return this._note;\n }\n\n setPitchbend(bend: f32): void {\n \tthis.pitchbend = bend;\n \tthis.baseFrequency = notefreq(this._note + bend); \t\n }\n\n next(): void { \n let env: f32 = this.envelope.next();\n if(env===0) {\n this.signal.clear();\n return;\n } \n \n let lfo: f32 = this.lfo.next() * 3 * this.lfoenvelope.next();\n this.sawoscillatorl.frequency = this.baseFrequency + lfo + 0.5;\n this.sawoscillatorr.frequency = this.baseFrequency + lfo - 0.5;\n \n let left = env* this.sawoscillatorl.next() + this.signal.right * 0.5;\n left = this.shaper.process(left);\n \n let right = env* this.sawoscillatorr.next() + this.signal.left * 0.5;\n right = this.shaper.process(right);\n \n this.signal.left = left * 0.5 + right;\n this.signal.right = right * 0.5 + left; \n } \n}\n\nconst sinelead = new SineLead();\nconst drivelead = new DriveLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n const setChannelValueFunctions: usize[] = [\n changetype((value:f32): void => {bass.note = value;}),\n changetype((value:f32): void => {lead.note = value;}),\n changetype((value:f32): void => {sinelead.note = value;}),\n changetype((value:f32): void => {kick.note = value;}),\n changetype((value:f32): void => {snare.note = value;}),\n changetype((value:f32): void => {hihat.note = value;}),\n changetype((value:f32): void => {pads[0].note = value;}),\n changetype((value:f32): void => {pads[1].note = value;}),\n changetype((value:f32): void => {pads[2].note = value;}),\n changetype((value:f32): void => {pads[3].note = value;}), \n changetype((value:f32): void => {pads[4].note = value;}), \n changetype((value:f32): void => {pads[5].note = value;}),\n changetype((value:f32): void => {pads[6].note = value;}),\n changetype((value:f32): void => {pads[7].note = value;}),\n changetype((value:f32): void => {pads[8].note = value;}),\n changetype((value:f32): void => {pads[9].note = value;}),\n changetype((value:f32): void => {\n if(value > 0) {\n\t padsVolume = value / 100.0;\n }\n }),\n changetype((value:f32): void => {drivelead.note = value;}),\n changetype((value:f32): void => {\n if(value > 0) {\n\t drivelead.setPitchbend((value - 64) / 32);\n }\n })\n \n ];\n\n changetype<(val: f32) => void>(setChannelValueFunctions[channel])(value);\n}\n\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (6/8) * 60 / 120) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\n\n\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n let left: f32 = 0;\n let right: f32 = 0;\n\n mainline.clear();\n reverbline.clear();\n echoline.clear();\n\n bass.next();\n mainline.addStereoSignal(bass.signal, 1.0, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.0, 0.5);\n\n lead.next();\n mainline.addStereoSignal(lead.signal, 0.8, 0.5);\n echoline.addStereoSignal(lead.signal, 0.8, 0.5);\n\n \tdrivelead.next();\n mainline.addStereoSignal(drivelead.signal, 0.1, 0.5);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.5);\n\n \tsinelead.next();\n mainline.addStereoSignal(sinelead.signal, 1.0, 0.5);\n echoline.addStereoSignal(sinelead.signal, 1.2, 0.5);\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.8, 0.5);\n\n snare.next();\n mainline.addStereoSignal(snare.signal, 0.8, 0.5); \n\n hihat.next();\n mainline.addStereoSignal(hihat.signal, 0.8, 0.5);\n\n pads.forEach(pad => {\n pad.next();\n mainline.addStereoSignal(pad.signal, 0.45 * padsVolume, 0.5);\n });\n \n echoline.left += delayRight.read() * 0.7;\n echoline.right += delayLeft.read() * 0.7;\n\n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n freeverb.tick(reverbline);\n\n left = gain * (mainline.left + reverbline.left + echoline.left);\n right = gain * (mainline.right + reverbline.right + echoline.right);\n\n \tif (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.45, 0.6, 0.9 , 1.20, 1.05, 1.0);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/protracker.mix.ts":"import { EQBand } from \"../fx/eqband\";\n\nimport { Snare } from \"../instruments/snare.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { StereoSignal } from \"../synth/stereosignal.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { BrassyLead } from \"../instruments/lead/brassy\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { FlatPad } from \"../instruments/pad/flatpad.class\";\nimport { createInstrumentArray } from '../common/mixcommon';\nimport { Freeverb } from \"../fx/freeverb\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.2;\n\nconst bass = new SawBass3();\nconst lead = new Eftang();\nconst kick = new Kick();\nconst snare = new Snare();\nconst hihat = new Hihat();\nconst brassylead = new BrassyLead();\nconst pads: FlatPad[] = createInstrumentArray(4, () => new FlatPad());\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n bass.note = value;\n break;\n case 1:\n lead.note = value;\n break;\n case 2:\n kick.note = value;\n break;\n case 3:\n snare.note = value;\n break;\n case 4:\n hihat.note = value;\n break;\n case 5:\n brassylead.note = value;\n break;\n case 6:\n case 7:\n case 8:\n case 9:\n pads[channel-6].note = value;\n break; \n \n }\n \n}\n\n\nconst mainline = new StereoSignal();\nconst reverbline = new StereoSignal();\nconst freeverb = new Freeverb();\n\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n let left: f32 = 0;\n let right: f32 = 0;\n\n mainline.clear();\n reverbline.clear();\n\n bass.next();\n mainline.addStereoSignal(bass.signal, 0.2, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.1, 0.5);\n\n lead.next();\n mainline.addStereoSignal(lead.signal, 0.2, 0.5);\n reverbline.addStereoSignal(lead.signal, 0.02, 0.5);\n\n kick.next();\n mainline.addStereoSignal(kick.signal, 0.2, 0.5);\n\n snare.next();\n mainline.addStereoSignal(snare.signal, 0.2, 0.5); \n\n hihat.next();\n mainline.addStereoSignal(hihat.signal, 0.2, 0.5);\n\n brassylead.next();\n mainline.addStereoSignal(brassylead.signal, 0.5, 0.5);\n reverbline.addStereoSignal(brassylead.signal, 0.1, 0.5);\n\n pads.forEach(pad => {\n pad.next();\n mainline.addStereoSignal(pad.signal, 0.5, 0.5);\n \n });\n \n freeverb.tick(reverbline);\n\n left = gain * (mainline.left + reverbline.left );\n right = gain * (mainline.right + reverbline.right );\n\n left = eqbandl.process(left);\n right = eqbandr.process(right);\n \n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/shuffle.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SubPiano } from \"../instruments/piano/subpiano\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Snare } from \"../instruments/snare.class\";\nimport { DeepBass } from \"../instruments/bass/deepbass\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { SoftPad } from \"../instruments/pad/softpad.class\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { SineLead } from \"../instruments/lead/sinelead\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 3;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 0;\n\nconst gain: f32 = 0.13;\nconst ENABLE_MULTIBAND_COMPRESSOR = true;\n\nlet freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (3/8) * 60 / 70) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nfunction createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n\nconst pianos: SubPiano[] = createInstrumentArray(8, () => new SubPiano());\nconst pads: SoftPad[] = createInstrumentArray(8, () => new SoftPad());\nconst driveleads: DriveLead[] = createInstrumentArray(3, () => new DriveLead());\n\nconst kick = new Kick2();\nconst bass = new DeepBass();\nconst eftang = new Eftang();\nconst snare = new Snare();\nconst hihat = new Hihat();\nconst sinelead = new SineLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(true) {\n case (channel < 8):\n pianos[channel].note = value;\n break;\n case channel === 8:\n kick.note = value;\n break;\n case channel === 9:\n snare.note = value;\n break;\n case channel === 10:\n hihat.note = value;\n break;\n case channel === 11:\n bass.note = value\n break;\n case channel === 12:\n eftang.note = value;\n break;\n case channel < 21:\n pads[channel - 13].note = value;\n break;\n case channel === 21:\n sinelead.note = value;\n break;\n case channel < 25:\n driveleads[channel - 22].note = value;\n break;\n case channel === 25:\n if(value > 1) {\n for(let n = 0; n 1.0) {\n left = 1.0;\n }\n\n if (Math.abs(right) > 1.0) {\n right = 1.0;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/simple.mix.ts":"import { SawOscillator, Instrument, Noise, BiQuadFilter, FilterType, \n StereoSignal,\n Freeverb, SineOscillator, Envelope, notefreq } from \"./globalimports\";\n import { SAMPLERATE } from '../environment';\n \n export const PATTERN_SIZE_SHIFT: usize = 4;\n export const BEATS_PER_PATTERN_SHIFT: usize = 2;\n \n const mainline = new StereoSignal();\n const reverbline = new StereoSignal();\n const freeverb = new Freeverb();\n \n class Kick extends Instrument {\n private velocity: f32;\n envelope: Envelope = new Envelope(0.0, 0.2, 0, 0.2);\n filterenvelope: Envelope = new Envelope(0.0, 0.05, 0.05, 0.1);\n sawoscillator: SawOscillator = new SawOscillator();\n noise: Noise = new Noise();\n \n filter: BiQuadFilter = new BiQuadFilter();\n \n set note(note: f32) { \n if(note > 1) { \n this.sawoscillator.frequency = 150;\n this.velocity = note / 16; \n this.envelope.attack(); \n this.filterenvelope.attack(); \n } else {\n this.envelope.release();\n this.filterenvelope.release();\n }\n }\n \n next(): void { \n let env: f32 = this.envelope.next();\n this.sawoscillator.frequency = 20.0 + (env * 150.0);\n \n this.filter.update_coeffecients(FilterType.LowPass, SAMPLERATE, \n 40 + (this.filterenvelope.next() * 2000), 0.2);\n \n let osc1: f32 = this.envelope.next() * this.velocity * this.sawoscillator.next() * 0.8 + this.noise.next();\n \n osc1 = this.filter.process(osc1);\n \n const val = env * osc1;\n \n mainline.left+=val;\n mainline.right+=val;\n } \n }\n \n class Lead extends Instrument {\n osc: SineOscillator = new SineOscillator();\n env: Envelope = new Envelope(0.1,0.1,1.0,0.1);\n \n set note(note: f32) {\n if(note > 1) {\n this.osc.frequency = notefreq(note);\n this.env.attack();\n } else if (note === 0) {\n this.env.release();\n }\n }\n @inline\n next(): void {\n const val = this.osc.next() * this.env.next() * 0.3;\n mainline.left += val;\n mainline.right += val;\n }\n }\n \n \n const voices: Instrument[] = [\n new Kick(),\n new Lead(),\n new Lead(),\n new Lead(),\n new Lead()\n ];\n \n export function setChannelValue(channel: usize, value: f32): void {\n voices[channel].note = value;\n }\n \n \n @inline\n export function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear();\n reverbline.clear();\n \n for(var n=0;n(leftSampleBufferPtr, mainline.left + reverbline.left);\n store(rightSampleBufferPtr, mainline.right + reverbline.right); \n }","mixes/test.mix.ts":"// This mix was used in the song \"Groove is in the code\"\n\nimport { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { TestInstrument } from \"../instruments/testinstrument.class\";\nimport { SawBass } from \"../instruments/sawbass.class\";\nimport { Pad } from \"../instruments/pad.class\";\nimport { Kick } from \"../instruments/kick.class\";\nimport { Snare } from \"../instruments/snare.class\";\nimport { DriveLead } from \"../instruments/drivelead.class\";\n\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\nimport { SquareLead } from \"../instruments/squarelead.class\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.15;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet flute = new TestInstrument();\nlet drivelead = new DriveLead();\nlet bass = new SawBass();\nlet pad1 = new Pad();\nlet pad2 = new Pad();\nlet pad3 = new Pad();\nlet kick = new Kick();\nlet snare = new Snare();\nlet hihat = new Hihat();\nlet squarelead = new SquareLead();\n\nlet freeverb = new Freeverb();\n\nlet delayLeft: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\nlet delayRight: DelayLine = new DelayLine(SAMPLERATE * 0.5 as usize);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(15,500,8000,19000);\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(channel) {\n case 0:\n flute.note = value;\n break;\n case 1:\n bass.note = value;\n break;\n case 2:\n pad1.note = value;\n break;\n case 3:\n pad2.note = value;\n break;\n case 4:\n pad3.note = value;\n break;\n case 5:\n kick.note = value;\n break;\n case 6:\n snare.note = value;\n break;\n case 7:\n drivelead.note = value;\n break;\n case 8:\n hihat.note = value;\n break;\n case 9:\n squarelead.note = value;\n break;\n }\n \n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n flute.next();\n pad1.next(); \n pad2.next();\n pad3.next(); \n kick.next();\n snare.next();\n hihat.next();\n bass.next(); \n drivelead.next();\n squarelead.next();\n\n mainline.addStereoSignal(flute.signal, 0.7, 0.0);\n echoline.addStereoSignal(flute.signal, 0.6, 1.0);\n \n mainline.addStereoSignal(pad1.signal, 0.58, 0.25);\n echoline.addStereoSignal(pad1.signal, 0.35, 0.25); \n mainline.addStereoSignal(pad2.signal, 0.58, 0.5);\n echoline.addStereoSignal(pad2.signal, 0.30, 0.5);\n mainline.addStereoSignal(pad3.signal, 0.58, 0.75);\n echoline.addStereoSignal(pad3.signal, 0.30, 0.75);\n\n mainline.addStereoSignal(kick.signal, 1.6, 0.5);\n reverbline.addStereoSignal(kick.signal, 0.05, 0.0);\n \n mainline.addStereoSignal(snare.signal, 0.38, 0.6);\n echoline.addStereoSignal(snare.signal, 0.1, 0.4);\n \n mainline.addStereoSignal(hihat.signal, 0.7, 0.4);\n reverbline.addStereoSignal(hihat.signal, 0.05, 0.6);\n\n mainline.addStereoSignal(bass.signal, 1.2, 0.5);\n reverbline.addStereoSignal(bass.signal, 0.1, 0.0);\n\n mainline.addStereoSignal(drivelead.signal, 0.17, 0.4);\n echoline.addStereoSignal(drivelead.signal, 0.4, 0.6);\n\n mainline.addStereoSignal(squarelead.signal,0.6, 0.6);\n echoline.addStereoSignal(squarelead.signal, 0.6, 0.0);\n\n echoline.left += delayRight.read() * 0.5;\n echoline.right += delayLeft.read() * 0.5;\n \n delayLeft.write_and_advance(echoline.left);\n delayRight.write_and_advance(echoline.right);\n\n reverbline.addStereoSignal(echoline, 0.5, 0.5);\n \n freeverb.tick(reverbline);\n \n let left = gain * (mainline.left + echoline.left + reverbline.left);\n let right = gain * (mainline.right + echoline.right + reverbline.right);\n\n if (ENABLE_MULTIBAND_COMPRESSOR) {\n tribandstereocompressor.process(left,right,0.3, 0.3, 0.5 , 2.0, 0.80, 0.9);\n left = tribandstereocompressor.stereosignal.left;\n right = tribandstereocompressor.stereosignal.right;\n } else {\n left = left;\n right = right;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","mixes/webchip.mix.ts":"import { StereoSignal } from \"../synth/stereosignal.class\";\n\nimport { Freeverb } from \"../fx/freeverb\";\nimport { DelayLine } from \"../fx/delayline\";\nimport { SAMPLERATE } from \"../environment\";\n\nimport { TriBandStereoCompressor } from \"../fx/tribandstereocompressor\";\nimport { EQBand } from \"../fx/eqband\";\nimport { SubPiano } from \"../instruments/piano/subpiano\";\nimport { Kick2 } from \"../instruments/drums/kick2.class\";\nimport { Snare2 } from \"../instruments/drums/snare2.class\";\nimport { SawBass3 } from \"../instruments/bass/sawbass3\";\nimport { Eftang } from \"../instruments/lead/eftang\";\nimport { SoftPad } from \"../instruments/pad/softpad.class\";\nimport { Hihat } from \"../instruments/hihat.class\";\nimport { SineLead } from \"../instruments/lead/sinelead\";\n\nexport const PATTERN_SIZE_SHIFT: usize = 4;\nexport const BEATS_PER_PATTERN_SHIFT: usize = 2;\n\nconst gain: f32 = 0.13;\nconst ENABLE_MULTIBAND_COMPRESSOR = false;\n\nlet freeverb = new Freeverb();\n\nconst delayframes = (SAMPLERATE * (2/3) * 60 / 110) as usize;\nlet delayLeft: DelayLine = new DelayLine(delayframes);\nlet delayRight: DelayLine = new DelayLine(delayframes);\n \nlet echoline = new StereoSignal();\nlet reverbline = new StereoSignal();\nlet mainline = new StereoSignal();\n\nlet tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);\nlet eqbandl = new EQBand(20, 19500);\nlet eqbandr = new EQBand(20, 19500);\n\nfunction createInstrumentArray(length: i32, factoryFunc: () => T): T[] {\n const arr = new Array(length);\n for(let n = 0; n < length;n++) {\n arr[n] = factoryFunc();\n }\n return arr;\n}\n\nconst pianos: SubPiano[] = createInstrumentArray(8, () => new SubPiano());\nconst pads: SoftPad[] = createInstrumentArray(8, () => new SoftPad());\n\nconst kick = new Kick2();\nconst bass = new SawBass3();\nconst eftang = new Eftang();\nconst snare = new Snare2();\nconst hihat = new Hihat();\nconst sinelead = new SineLead();\n\nexport function setChannelValue(channel: usize, value: f32): void {\n switch(true) {\n case (channel < 8):\n pianos[channel].note = value;\n break;\n case channel === 8:\n kick.note = value;\n break;\n case channel === 9:\n snare.note = value;\n break;\n case channel === 10:\n hihat.note = value;\n break;\n case channel === 11:\n bass.note = value\n break;\n case channel === 12:\n eftang.note = value;\n break;\n case channel < 21:\n pads[channel - 13].note = value;\n break;\n case channel === 21:\n sinelead.note = value;\n break;\n }\n}\n\nexport function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void { \n mainline.clear()\n reverbline.clear();\n echoline.clear();\n \n for(let n = 0;n 1.0) {\n left = 1.0;\n }\n\n if (Math.abs(right) > 1.0) {\n right = 1.0;\n }\n\n store(leftSampleBufferPtr, left);\n store(rightSampleBufferPtr, right); \n}","synth/biquad.ts":"import { SAMPLERATE } from \"../environment\";\nimport { cos, PI, sin } from \"../math/sin\";\n\n// Taken from https://docs.rs/crate/biquad/0.2.0/source/src/\n\nexport const Q_BUTTERWORTH = 0.7071067811865475 as f32; // 1/Math.sqrt(2)\n\nexport enum FilterType {\n SinglePoleLowPass = 1 as i8,\n LowPass = 2 as i8,\n HighPass = 3 as i8,\n Notch = 4 as i8\n}\n\nexport class Coefficients {\n // Denominator coefficients\n a1: f32;\n a2: f32;\n\n // Nominator coefficients\n b0: f32;\n b1: f32;\n b2: f32;\n\n phaseSamples: f32;\n magnitude: f32;\n\n calculatePhaseAndMagnitudeForFreq(freq: f32): void {\n const w: f32 = 2 * Mathf.PI * freq / SAMPLERATE;\n \n const cos1: f32 = Mathf.cos(-1 * w);\n const cos2: f32 = Mathf.cos(-2 * w);\n \n const sin1: f32 = Mathf.sin(-1 * w);\n const sin2: f32 = Mathf.sin(-2 * w);\n \n const realZeros: f32 = this.b0 + this.b1 * cos1 + this.b2 * cos2;\n const imagZeros: f32 = this.b1 * sin1 + this.b2 * sin2;\n \n const realPoles: f32 = 1 + this.a1 * cos1 + this.a2 * cos2;\n const imagPoles: f32 = this.a1 * sin1 + this.a2 * sin2;\n \n const divider: f32 = realPoles * realPoles + imagPoles * imagPoles;\n \n const realHw: f32 = (realZeros * realPoles + imagZeros * imagPoles) / divider;\n const imagHw: f32 = (imagZeros * realPoles - realZeros * imagPoles) / divider;\n \n this.magnitude = Mathf.sqrt(realHw * realHw + imagHw * imagHw);\n\n const phase: f32 = Mathf.atan2(imagHw, realHw);\n \n this.phaseSamples = -(phase / (2*Mathf.PI)) * (SAMPLERATE / freq);\n }\n}\n\nexport class BiQuadFilter {\n y1: f32 = 0;\n y2: f32 = 0;\n x1: f32 = 0;\n x2: f32 = 0;\n s1: f32 = 0;\n s2: f32 = 0;\n readonly coeffs: Coefficients = new Coefficients();\n\n processForm2(input: f32): f32 {\n let out = this.s1 + this.coeffs.b0 * input;\n this.s1 = this.s2 + this.coeffs.b1 * input - this.coeffs.a1 * out;\n this.s2 = this.coeffs.b2 * input - this.coeffs.a2 * out;\n\n return out;\n }\n\n process(input: f32): f32 {\n let out = this.coeffs.b0 * input + this.coeffs.b1 * this.x1 + this.coeffs.b2 * this.x2\n - this.coeffs.a1 * this.y1\n - this.coeffs.a2 * this.y2;\n\n this.x2 = this.x1;\n this.x1 = input;\n this.y2 = this.y1;\n this.y1 = out;\n\n return out;\n }\n\n clearBuffers(): void {\n this.y1 = 0;\n this.y2 = 0;\n this.x1 = 0;\n this.x2 = 0;\n this.s1 = 0;\n this.s2 = 0; \n }\n\n /// Creates coefficients based on the biquad filter type, sampling and cutoff frequency, and Q\n /// value. Note that the cutoff frequency must be smaller than half the sampling frequency and\n /// that Q may not be negative, this will result in an `Err()`.\n update_coeffecients(\n filtertype: FilterType,\n fsHertz: f32,\n f0Hertz: f32,\n q_value: f32\n ): void {\n const fLimit = (fsHertz / 2.0) - 1000;\n if (f0Hertz > fLimit) {\n f0Hertz = fLimit;\n }\n\n if (q_value < 0.0) {\n q_value = 0;\n }\n\n let omega: f32 = 2.0 * PI * f0Hertz / fsHertz;\n let alpha: f32;\n let omega_s: f32;\n let omega_c: f32;\n let b0: f32;\n let b1: f32;\n let b2: f32;\n let a0: f32;\n let a1: f32;\n let a2: f32;\n\n\n switch (filtertype) {\n case FilterType.SinglePoleLowPass:\n alpha = omega / (omega + 1.0);\n\n this.coeffs.a1 = alpha - 1.0;\n this.coeffs.a2 = 0.0;\n this.coeffs.b0 = alpha;\n this.coeffs.b1 = 0.0;\n this.coeffs.b2 = 0.0;\n\n break;\n case FilterType.LowPass:\n // The code for omega_s/c and alpha is currently duplicated due to the single pole\n // low pass filter not needing it and when creating coefficients are commonly\n // assumed to be of low computational complexity.\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = (1.0 - omega_c) * 0.5;\n b1 = 1.0 - omega_c;\n b2 = (1.0 - omega_c) * 0.5;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n case FilterType.HighPass:\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = (1.0 + omega_c) * 0.5;\n b1 = -(1.0 + omega_c);\n b2 = (1.0 + omega_c) * 0.5;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n case FilterType.Notch:\n omega_s = sin(omega);\n omega_c = cos(omega);\n alpha = omega_s / (2.0 * q_value);\n\n b0 = 1.0;\n b1 = -2.0 * omega_c;\n b2 = 1.0;\n a0 = 1.0 + alpha;\n a1 = -2.0 * omega_c;\n a2 = 1.0 - alpha;\n\n this.coeffs.a1 = a1 / a0;\n this.coeffs.a2 = a2 / a0;\n this.coeffs.b0 = b0 / a0;\n this.coeffs.b1 = b1 / a0;\n this.coeffs.b2 = b2 / a0;\n\n break;\n }\n }\n}\n\nexport class LoPassBiQuadFilter extends BiQuadFilter {\n update(frequency: f32, Q: f32): void {\n this.update_coeffecients(FilterType.LowPass, SAMPLERATE, frequency , Q);\n }\n}\n\nexport class HiPassBiQuadFilter extends BiQuadFilter {\n update(frequency: f32, Q: f32): void {\n this.update_coeffecients(FilterType.HighPass, SAMPLERATE, frequency , Q);\n }\n}\n","synth/bpm.ts":"import { SAMPLERATE } from \"../environment\";\n\nexport function beatToFrame(beat: f64, bpm: f32): usize {\n return (SAMPLERATE * beat * 60 / bpm) as usize;\n}\n","synth/clip.ts":"// From https://ccrma.stanford.edu/~jos/pasp/Soft_Clipping.html#29695\n\n/**\n * soft clip signal with 1/3 headroom as result\n * @param signal signal to be clipped\n */\nexport function softclip(signal: f32): f32 {\n if(signal > 1.0) {\n return 2.0/3.0;\n } else if(signal < -1.0) {\n return -2.0/3.0;\n } else {\n return (signal - ((signal * signal * signal) / 3.0));\n }\n}\n\nexport function hardclip(signal: f32): f32 {\n if(signal > 1.0) {\n return 1.0;\n } else if(signal < -1.0) {\n return -1.0;\n } else {\n return signal;\n }\n}","synth/decibel.ts":"export function decibelToGain(dB: f32): f32 {\n return NativeMathf.pow(10, dB/20.0);\n}\n\nexport function midiLevelToDecibel(midiLevel: u8): f32 {\n return 40 * NativeMathf.log10(midiLevel as f32/127);\n}\n\nexport function midiLevelToGain(midiLevel: u8): f32 {\n return decibelToGain(midiLevelToDecibel(midiLevel));\n}","synth/envelope.class.ts":"import { SAMPLERATE } from \"../environment\";\n\nexport enum EnvelopeState {\n ATTACK = 0,\n DECAY = 1,\n SUSTAIN = 2,\n RELEASE = 3,\n DONE = 4\n}\n\nexport class Envelope {\n attackStep: f32;\n decayStep: f32;\n sustainLevel: f32;\n releaseStep: f32;\n \n val: f32 = 0;\n state: EnvelopeState = EnvelopeState.DONE;\n\n constructor(attackTime: f32, decayTime: f32, sustainLevel: f32, releaseTime: f32) {\n this.attackStep = 1.0 / (attackTime * SAMPLERATE);\n this.decayStep = 1.0 / (decayTime * SAMPLERATE);\n this.releaseStep = 1.0 / (releaseTime * SAMPLERATE);\n this.sustainLevel = sustainLevel;\n }\n\n next(): f32 {\n switch(this.state) {\n case EnvelopeState.ATTACK:\n this.val += this.attackStep;\n if(this.val >= 1.0) {\n this.val = 1.0;\n this.state = EnvelopeState.DECAY;\n }\n break;\n case EnvelopeState.DECAY:\n this.val -= this.decayStep;\n if(this.val <= this.sustainLevel) {\n this.val = this.sustainLevel;\n this.state = EnvelopeState.SUSTAIN;\n }\n break;\n case EnvelopeState.SUSTAIN:\n break;\n case EnvelopeState.RELEASE:\n this.val -= this.releaseStep;\n if(this.val <= 0) {\n this.val = 0;\n this.state = EnvelopeState.DONE;\n }\n break;\n case EnvelopeState.DONE:\n break;\n }\n return this.val;\n }\n\n attack(): void {\n this.state = EnvelopeState.ATTACK;\n }\n \n release(): void {\n this.state = EnvelopeState.RELEASE;\n }\n\n isDone(): boolean {\n return this.state === EnvelopeState.DONE;\n }\n}","synth/ifftoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { FFT } from '../math/fft';\n\nexport class IFFTOscillator {\n position: f32 = 0;\n positionincrement: f32 = 0;\n buffersize: f32;\n buffermask: u32;\n fft: FFT;\n scalefactor: f32;\n\n constructor(buffersize_shift: i32) {\n this.fft = new FFT(buffersize_shift);\n this.buffersize = (1 << buffersize_shift) as f32;\n this.buffermask = ~(0xffffffff << buffersize_shift);\n this.scalefactor = (this.buffersize / 2) - 1;\n }\n\n set frequency(frequency: f32) {\n this.positionincrement = (frequency * this.buffersize) / SAMPLERATE;\n }\n\n createWave(real: f32[], imaginary: f32[]): void { \n for (let n = 1; n <= real.length &&\n n <= imaginary.length &&\n n < (this.fft.buffer.length / 2) - 1; n++) {\n this.fft.buffer[n].re = -real[n - 1] * this.scalefactor;\n this.fft.buffer[this.fft.buffer.length - n].re = real[n -1] * this.scalefactor;\n\n this.fft.buffer[n].im = -imaginary[n -1] * this.scalefactor;\n this.fft.buffer[this.fft.buffer.length - n].im = imaginary[n -1] * this.scalefactor;\n }\n }\n\n next(): f32 {\n const bufferposfloor = NativeMathf.floor(this.position);\n const bufferpos = bufferposfloor as i32;\n const t = this.position - bufferposfloor;\n\n const x0 = this.fft.buffer[(bufferpos - 1) & this.buffermask].re;\n const x1 = this.fft.buffer[bufferpos].re;\n const x2 = this.fft.buffer[(bufferpos + 1) & this.buffermask].re;\n const x3 = this.fft.buffer[(bufferpos + 2) & this.buffermask].re;\n \n // cubic interpolation\n \n const a0 = x3 - x2 - x0 + x1;\n const a1 = x0 - x1 - a0;\n const a2 = x2 - x0;\n const a3 = x1;\n const ret = (a0 * (t * t * t)) + (a1 * (t * t)) + (a2 * t) + (a3);\n\n // increment position\n this.position += this.positionincrement;\n this.position %= this.buffersize;\n \n return ret; \n }\n}\n","synth/noise.class.ts":"let x: i32 = 123456789;\nlet y: i32=234567891;\nlet z: i32=345678912;\nlet w: i32=456789123;\nlet c: i32=0; \n\nexport class Noise {\n \n next(): f32 { \n y ^= (y<<5); y ^= (y>>7); y ^= (y<<22); \n\n let t = z+w+c; z = w;\n c = t < 0 ? 1 : 0;\n w = t & 2147483647; \n \n x += 1411392427; \n \n let rnd: f32 = ((x + y + w) & 0xffff) as f32;\n return ((rnd / (1 << 16 as f32))) - 0.5;\n }\n }\n ","synth/note.ts":"const pitchstep: f64 = 1.0004513695322617; // Math.pow(2, (1/128) / 12);\nconst c0: f64 = 8.175798915643707; // 440 * Math.pow(2, -69 / 12);\nlet pitchtable = __new(128 * 128 * 4, idof>());\nlet pitch: f64 = c0;\n\nfor (let n: usize = 0; n < (128 * 128); n++) {\n store(pitchtable + (n << 2), pitch as f32);\n pitch *= pitchstep;\n}\n\nexport function notefreq(note: f32): f32 {\n let pitchtableIndex: usize = (note * 128.0) as usize;\n return load(pitchtable + (pitchtableIndex << 2));\n}","synth/pan.class.ts":"import { StereoSignal } from \"./stereosignal.class\";\n\nconst HALF_OF_SQRT_2 = NativeMathf.sqrt(2) / 2;\n\nexport class Pan {\n leftLevel: f32;\n rightLevel: f32;\n \n constructor() {\n this.setPan(0.5); \n }\n\n /**\n * Don't use as part of the rendering process. Use to calculate pan levels on controller changes\n * @param pan from 0.0 (left) to 1.0 (right). 0.5 is center\n */\n setPan(pan: f32): void {\n const angle = (pan - 0.5) * NativeMathf.PI / 2;\n // left channel\n this.leftLevel = HALF_OF_SQRT_2 * (NativeMathf.cos(angle) - NativeMathf.sin(angle));\n // right channel\n this.rightLevel = HALF_OF_SQRT_2 * (NativeMathf.cos(angle) + NativeMathf.sin(angle));\n }\n}\n","synth/sawoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\n\nexport class SawOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if(this.frequency > 0) {\n let ret = (this.position as f32 / 0x10000 as f32) - 0.5;\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n \n return ret as f32;\n } else {\n return 0;\n }\n }\n }\n ","synth/shaper.ts":"/**\n * Taken from https://github.com/hzdgopher/64klang/blob/master/Player/Player/SynthNode.cpp#L2050\n */\n\nconst NOISEGEN_B0: f32 = 0.99765014648437500;\n\nexport class WaveShaper {\n drive: f32 = 0.5;\n \n process(input: f32): f32 { \n // clamp to -1..1 (a little less)\n let f: f32 = this.drive < NOISEGEN_B0 ? this.drive > -NOISEGEN_B0 ?\n this.drive : -NOISEGEN_B0 : \n NOISEGEN_B0;\n\n // k = 2*amount/(1-amount);\n let v = (f+f)/(1.0-f);\n\n // process f(x) = (1+k)*x/(1+k*abs(x))\n return (1.0 + v) *\n input/\n (1.0 + v * min(abs(input), 1.0)); \n }\n}","synth/sineoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\nimport { sin, PI } from '../math/sin';\n\nexport class SineOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n let ret = sin(PI * 2 * (this.position as f32) / (1 << 16 as f32));\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n return ret as f32;\n }\n }\n ","synth/squareoscillator.class.ts":"\nimport { SAMPLERATE } from '../environment';\n\nexport class SquareOscillator {\n position: u32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if(this.frequency > 0) {\n let ret: f32 = this.position as f32 > 0x8000 ? 0.5 : -0.5;\n this.position = (((this.position as f32) + (this.frequency/SAMPLERATE)\n * 0x10000 as f32) as u32) & 0xffff;\n \n \n return ret;\n } else {\n return 0;\n }\n }\n}\n ","synth/stereosignal.class.ts":"import { Pan } from './pan.class';\n\nexport class StereoSignal {\n left: f32 = 0;\n right: f32 = 0;\n\n clear(): void {\n this.left = 0;\n this.right = 0;\n }\n\n /**\n * Add left and right values directly to the signal\n * @param left\n * @param right \n */\n @inline\n add(left: f32, right:f32): void {\n this.left += left;\n this.right += right;\n }\n\n /**\n * Add stereo signal with simple (not proper) panning\n * @param signal \n * @param level \n * @param pan 0.0 - 1.0\n */\n addStereoSignal(signal: StereoSignal, level: f32, pan: f32): void {\n this.left += signal.left * pan * level;\n this.right += signal.right * (1 - pan) * level;\n }\n\n addMonoSignal(signal: f32, level: f32, pan: f32): void {\n this.left += signal * pan * level;\n this.right += signal * (1 - pan) * level;\n }\n}","synth/triangleoscillator.class.ts":"import { SAMPLERATE } from '../environment';\n\nexport class TriangleOscillator {\n position: i32 = 0;\n frequency: f32 = 0;\n\n next(): f32 {\n if (this.frequency > 0) {\n const pos: i32 = this.position;\n let ret: f32;\n if (pos < 0x8000) {\n ret = (pos as f32 / 0x8000 as f32);\n } else {\n ret = (- (pos - 0x8000) as f32 / 0x8000 as f32) + 1.0;\n }\n\n this.position = (((this.position as f32) + (this.frequency / SAMPLERATE)\n * 0x10000 as f32) as i32) & 0xffff;\n\n return ret * 2 - 1 as f32;\n } else {\n return 0;\n }\n }\n}\n","synth/waveguide.ts":"import { SAMPLERATE } from \"../environment\";\nimport { DelayLineFloat } from \"../fx/delayline\";\nimport { MonoAudioPlayer } from \"../midi/instruments/audioplayer\";\nimport { BiQuadFilter, FilterType, LoPassBiQuadFilter, Q_BUTTERWORTH } from \"./biquad\";\nimport { Envelope } from \"./envelope.class\";\nimport { notefreq } from \"./note\";\n\nlet seed: i32 = 1;\n\nexport function noise(): f32 {\n seed = (seed * 1103515245 + 12345) & 0x7fffffff;\n return ((seed as f32 % 1000000 / 1000000) - 0.5) as f32;\n}\n\nexport class WaveGuide {\n envExciter: Envelope;\n filterExciter: BiQuadFilter = new BiQuadFilter();\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackLevel: f32;\n feedbackFilterFreq: f32;\n freq: f32;\n exciterenvlevel: f32;\n\n constructor(exciterAttack: f32, exciterRelease: f32, exciterFilterFreq: f32, feedbackLevel: f32) {\n this.envExciter = new Envelope(exciterAttack,\n exciterRelease, 0,\n exciterRelease);\n this.filterExciter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n exciterFilterFreq, Q_BUTTERWORTH);\n\n this.feedbackLevel = feedbackLevel;\n }\n\n setFilterExciterFreq(freq: f32): void {\n this.filterExciter.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n freq, Q_BUTTERWORTH);\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers(); \n this.filterExciter.clearBuffers();\n\n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n this.envExciter.val = 0;\n\n }\n this.exciterenvlevel = 1;\n this.envExciter.attack();\n\n }\n\n process(): f32 {\n const envexciter = this.envExciter.next() * this.exciterenvlevel;\n let exciterSignal: f32 = noise() * envexciter;\n exciterSignal = this.filterExciter.process(exciterSignal);\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n\n }\n}\n\nexport class AuxExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n\n constructor(public exciter: WaveGuide) {\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n\n }\n }\n\n process(): f32 {\n let exciterSignal: f32 = this.exciter.process();\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}\n\nexport class AudioExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n exciterFilter: LoPassBiQuadFilter = new LoPassBiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n\n constructor(public exciter: MonoAudioPlayer) {\n\n }\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n this.exciter.restart();\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n this.exciterFilter.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n }\n }\n\n reset(): void {\n this.delay.reset();;\n this.filterFeedback.clearBuffers();\n this.exciterFilter.clearBuffers();\n }\n\n process(): f32 {\n let exciterSignal: f32 = this.exciter.nextframe();\n exciterSignal = this.exciterFilter.process(exciterSignal);\n\n const feedback = this.delay.read();\n let signal = exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}\n\nexport class CustomExciterWaveGuide {\n delay: DelayLineFloat = new DelayLineFloat((SAMPLERATE / notefreq(1)) as i32);\n filterFeedback: BiQuadFilter = new BiQuadFilter();\n feedbackFilterFreq: f32;\n feedbackLevel: f32;\n freq: f32;\n exciterSignal: f32;\n\n start(freq: f32, feedbackFilterFreq: f32): void {\n if (freq != this.freq) {\n this.freq = freq;\n const maxFeedbackFilterFreq: f32 = 20000;\n if (feedbackFilterFreq > maxFeedbackFilterFreq as f32) {\n feedbackFilterFreq = maxFeedbackFilterFreq as f32;\n } else if (feedbackFilterFreq < 10) {\n feedbackFilterFreq = 10;\n }\n this.filterFeedback.update_coeffecients(FilterType.LowPass, SAMPLERATE,\n feedbackFilterFreq, Q_BUTTERWORTH);\n this.filterFeedback.coeffs.calculatePhaseAndMagnitudeForFreq(freq);\n const filterphase: f32 = this.filterFeedback.coeffs.phaseSamples;\n\n this.filterFeedback.clearBuffers();\n \n this.feedbackFilterFreq = feedbackFilterFreq;\n this.delay.setNumFramesAndClear(\n (SAMPLERATE /\n (freq)\n ) - filterphase\n );\n }\n }\n\n process(): f32 {\n const feedback = this.delay.read();\n let signal = this.exciterSignal + feedback;\n\n signal = this.filterFeedback.processForm2(signal);\n this.delay.write_and_advance(\n signal * this.feedbackLevel\n );\n return signal;\n }\n}","wasi_main.ts":"import { fd_write, iovec} from 'bindings/wasi';\nimport { allocateSampleBuffer, getTick, setBPM, setPatternsPtr, setInstrumentPatternListPtr, fillSampleBufferInterleaved } from './index';\n\nconst patterns: i8[] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,1,1,1,33,1,36,38,0,36,1,33,36,0,38,1,33,1,45,1,0,0,33,1,36,1,48,1,36,48,0,50,100,0,0,0,100,0,0,10,100,0,0,0,100,0,0,0,90,20,90,20,90,20,90,20,90,20,90,20,90,20,90,20,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,1,1,1,0,0,0,0,0,0,0,0,62,1,1,1,64,1,1,1,0,0,0,0,0,0,0,0,64,1,1,1,62,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,64,1,1,64,0,0,0,0,62,1,1,62,0,0,0,0,66,1,1,1,0,0,0,0,0,0,0,0,66,1,1,1,67,1,1,1,0,0,0,0,0,0,0,0,67,1,1,1,66,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,67,1,1,67,0,0,0,0,67,1,1,67,0,0,0,0,57,1,1,1,0,0,0,0,0,0,0,0,57,1,1,1,60,1,1,1,0,0,0,0,0,0,0,0,71,1,1,1,69,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,72,1,1,72,0,0,0,0,71,1,1,71,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,30,60,0,0,40,0,0,57,1,62,1,57,1,62,1,1,64,1,1,60,1,1,1,59,1,60,1,59,1,60,1,1,59,1,1,57,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,1,67,1,67,1,67,1,1,69,1,1,66,0,62,64,67,0,71,0,0,74,0,67,0,0,0,0,0,0,31,1,43,1,0,0,0,0,26,38,0,41,0,41,43,0,26,1,38,1,0,0,0,0,21,33,0,36,0,36,38,0,29,1,41,1,0,0,0,0,24,36,0,39,0,39,41,0,24,1,36,1,0,0,0,0,19,31,0,34,0,34,36,0,0,0,67,0,67,0,67,71,0,72,0,71,0,67,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,65,62,0,65,0,67,0,69,0,0,67,0,0,64,0,62,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,65,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,67,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,69,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,71,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,72,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,62,0,65,0,67,0,69,0,0,67,0,0,0,72,0,72,71,0,72,0,74,0,71,0,0,67,0,0,0,0,62,74,0,62,74,0,62,0,69,1,1,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,67,0,74,72,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,71,1,1,1,67,1,1,1,0,0,0,0,1,1,1,1,71,1,1,1,67,1,1,1,69,1,1,1,72,1,1,1,1,1,1,1,1,1,1,1,71,1,69,1,67,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,16,32,48,64,0,0,0,0,0,0,0,0,0,0,0,32,40,48,64,0,0,0,0,0,0,0,0,0,0,0,0,74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,77,1,1,1,1,1,1,1,1,1,1,1,1,76,1,74,1,72,1,1,1,1,1,1,1,1,1,1,1,1,1,79,1,2,16,32,48,64,0,0,0,0,0,0,0,0,80,96,32,36,40,48,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,96,112,127,0,0,0,0,0,20,0,30,60,0,0,20,0,20,0,30,60,20,60,40,81,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,64,0,48,32,16,0,0,0,0,64,0,0,0,0,0,0,57,0,57,0,62,0,62,0,69,0,69,0,72,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,78,74,69,0,0,0,0,62,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,10,0,10,0,0,60,0,0,25,0,20,0,0,60,10,0,10,0,10,35,0,60,10,0,35,0,0,69,0,69,0,74,0,74,0,81,0,81,0,83,0,83,0,81,0,81,0,74,0,76,0,74,0,74,0,0,0,0,0,62,1,1,1,69,1,71,1,1,1,69,1,1,1,64,1,1,69,1,1,62,1,1,1,1,1,1,1,0,0,64,0,0,0,0,0,0,0,2,32,64,0,0,0,0,0,64,1,1,69,1,1,62,1,1,1,64,1,66,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,67,1,1,1,66,1,1,1,64,1,62,1,1,1,59,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,48,64,0,0,69,0,69,0,74,86,74,0,81,0,81,0,83,91,83,0,81,0,81,0,74,86,76,0,74,86,91,90,86,81,83,0,81,0,81,0,74,0,76,0,74,0,74,0,86,0,69,1,1,1,0,0,0,0,0,0,0,0,69,1,1,1,67,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,69,1,1,69,0,0,0,0,67,1,1,67,0,0,0,0,71,1,1,1,0,0,0,0,0,0,0,0,71,1,1,1,72,1,1,1,0,0,0,0,0,0,0,0,72,1,1,1,71,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,72,1,1,67,0,0,0,0,72,1,1,67,0,0,0,0,65,1,1,1,0,0,0,0,0,0,0,0,76,1,1,1,74,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,77,1,1,72,0,0,0,0,76,1,1,71,0,0,0,0,31,1,1,1,38,1,41,43,0,41,1,38,41,0,43,1,38,1,50,1,0,0,38,1,41,1,53,1,41,53,0,55,0,0,74,0,74,0,79,0,79,0,86,0,86,0,88,0,88,0,86,0,86,0,79,0,81,0,79,0,79,0,0,0,0,0,74,0,74,0,79,91,79,0,86,0,86,0,88,96,88,0,86,0,86,0,79,91,81,0,79,91,96,95,91,86,0,0,67,1,1,1,74,1,76,1,1,1,74,1,1,1,69,1,1,74,1,1,67,1,1,1,1,1,1,1,0,0,88,0,86,0,86,0,79,0,81,0,79,0,79,0,91,0,69,1,1,74,1,1,67,1,1,1,69,1,71,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,72,1,1,1,71,1,1,1,69,1,67,1,1,1,64,1,1,1,26,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,100,0,0,0,100,0,0,30,100,0,0,0,100,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,1,1,1,0,0,0,0,0,0,0,0,60,1,1,1,57,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,66,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,69,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,69,74,81,0,74,81,86,0,0,0,0,0,0,0,0,91,90,86,81,0,0,0,0,0,0,0,0,0,0,0,0,93,86,81,78,74,69,74,78,0,0,0,0,0,74,81,74,81,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\nconst instrumentspatternlists: i8[] = [1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,1,1,1,2,88,88,88,89,88,88,88,89,1,1,1,100,0,0,0,0,0,0,0,0,20,21,22,23,20,21,22,24,0,0,0,0,0,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,63,0,20,21,22,23,20,21,22,24,0,0,0,0,0,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,35,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,31,0,29,30,40,41,29,30,31,0,29,30,31,0,29,30,31,0,29,30,31,0,0,0,0,0,61,62,0,0,0,0,0,0,0,0,0,0,29,30,31,0,29,30,40,41,29,30,31,0,29,30,31,0,29,30,31,0,29,30,31,0,0,0,0,0,0,0,0,0,66,67,0,0,66,67,0,0,66,67,75,76,66,77,75,76,90,91,92,93,90,96,92,93,107,108,109,110,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,101,101,101,6,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,58,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,58,5,5,5,5,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,64,64,64,65,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,102,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,32,33,33,34,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,7,8,9,10,12,78,79,80,12,78,79,80,7,8,9,0,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,35,36,36,35,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,11,12,13,14,81,82,83,84,81,82,83,84,11,12,13,0,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,37,38,38,38,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,7,85,86,87,7,85,86,87,15,103,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,39,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,43,45,43,44,43,46,37,47,48,49,52,53,54,49,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,43,45,43,44,43,46,37,47,48,49,52,53,54,49,22,0,0,0,0,0,0,0,68,69,0,0,68,71,72,73,68,69,0,0,68,71,72,73,94,95,0,0,94,97,98,99,105,35,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,51,51,0,55,56,51,57,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,51,51,0,55,56,51,57,0,0,0,0,0,0,0,0,70,0,0,0,70,0,74,0,70,0,0,0,70,0,74,0,70,0,0,0,70,0,74,0,0,0,50,0];\n\n\n// ./node_modules/.bin/asc --runtime none assembly/wasi_main.ts --noAssert --use abort= -O3 -o build/index.wasm\n// wasmer build/index.wasm | sox -S -t raw -b 32 -e float -r 44100 -c 2 - -d\nexport function _start(): void {\n const samplebuf = allocateSampleBuffer(128);\n setPatternsPtr(load(changetype(patterns)));\n setInstrumentPatternListPtr(load(changetype(instrumentspatternlists)), 116, 19);\n setBPM(123);\n \n const iov = new iovec();\n iov.buf = samplebuf;\n iov.buf_len = 128 * 8;\n \n const written_ptr = changetype(new ArrayBuffer(sizeof()));\n \n let previousTick: f64;\n do {\n previousTick = getTick();\n fillSampleBufferInterleaved();\n fd_write(1, changetype(iov), 1, written_ptr);\n } while(previousTick < getTick())\n}"} \ No newline at end of file diff --git a/wasmaudioworklet/synth1/yarn.lock b/wasmaudioworklet/synth1/yarn.lock deleted file mode 100644 index a9710c25..00000000 --- a/wasmaudioworklet/synth1/yarn.lock +++ /dev/null @@ -1,426 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@as-covers/assembly@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@as-covers/assembly/-/assembly-0.2.0.tgz#6f335834483ddf91b21da06955bd86647f9e8db9" - integrity sha512-3Mo0pdLmaorJPqookq10LmJlWIpyXF/D9JWjphMtv5Th23yO537t6vMGi92uKe35d07k2xMOH/4WRHi04mlk6Q== - -"@as-covers/core@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@as-covers/core/-/core-0.2.1.tgz#362a4719a1901d416941f5425b63fa46288ce8e6" - integrity sha512-/GGTzPB850shvL6ZiidKDmIXSpBflYfzhYyipe7HA1eijBQKKluaLSRy/JLSN53f6kp3tLrCevPXN6HA2fyuBw== - dependencies: - "@as-covers/assembly" "^0.2.0" - "@as-covers/glue" "^0.2.0" - "@as-covers/transform" "^0.2.1" - -"@as-covers/glue@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@as-covers/glue/-/glue-0.2.0.tgz#c829491bcda643087259675361efba300d477615" - integrity sha512-oIRC3q5TA4zfNBv+UwNH10FKq1poAeRTrZUg5pmEcFNv2HpZfED30mb9fF0anNRbr7gmXrSY9iMsRSz6hkrmYQ== - dependencies: - csv-stringify "^5.6.2" - table "^6.7.1" - -"@as-covers/transform@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@as-covers/transform/-/transform-0.2.1.tgz#ea3cb56371493ba77b5761766d3ef46aba36d7c0" - integrity sha512-FutGj2yMIT2GOfqXrbnqSpeZ0eB5Bsnsg+BLnmqpEszthFhe/5/hKYmfNsiF2QBYZnqcIQ7dHw/z31+PlyUDug== - dependencies: - line-column "^1.0.2" - visitor-as "^0.6.0" - -"@as-pect/assembly@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@as-pect/assembly/-/assembly-6.2.0.tgz#29a0efa173df321354b76d92228e46944159ba95" - integrity sha512-jYr1jdlr0xNndIhOpTMBaPHmlhD/c3PcVCzow8wIkzLxgcSOzhBkqjip+LWPWGsiFK1vsZ8ZUaMTeK3fcnXQhw== - -"@as-pect/cli@^6.2.0": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@as-pect/cli/-/cli-6.2.4.tgz#83476d235a6bfb9052e78cef24e450c199ae9146" - integrity sha512-OSWehx90djGxgR4RxFZKixRyh9hsMLNM/6otayAljijEPjiD1zS2lxu3WCu/DiwSWIRJUYdGOUVzw15nqvdcZQ== - dependencies: - "@as-covers/core" "0.2.1" - "@as-pect/assembly" "^6.2.0" - "@as-pect/core" "^6.2.1" - chalk "^4.1.1" - glob "^7.1.7" - optionalDependencies: - "@as-pect/csv-reporter" "^6.2.1" - "@as-pect/json-reporter" "^6.2.1" - -"@as-pect/core@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@as-pect/core/-/core-6.2.1.tgz#fa1f3658e337506c19df7944f75a8ba7b13aed97" - integrity sha512-JnvUb55OhGP7CYUnYtsLXttUb+FGv+6kEN9NleTbIMvU73NFJzyTCGjoZuayPNpfiUzOF96j91XuMHuinJ8BAg== - dependencies: - "@as-pect/assembly" "^6.2.0" - "@as-pect/snapshots" "^6.2.1" - chalk "^4.1.1" - long "^4.0.0" - -"@as-pect/csv-reporter@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@as-pect/csv-reporter/-/csv-reporter-6.2.1.tgz#fe7e23ac2d811e2519006ccc82f5245adcaad526" - integrity sha512-jy8ka8dEP4UY/pK/OIjHFUqs4j2Hvw3r6no6XfX1AkOd9CRLlt/JIDddlzwEqCGEfF83GSBQfQ1At86FkE7RtA== - dependencies: - "@as-pect/core" "^6.2.1" - -"@as-pect/json-reporter@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@as-pect/json-reporter/-/json-reporter-6.2.1.tgz#a77c3257aed8e5b1e5175509fb1046c1f94851cf" - integrity sha512-vsTYOiqB42+WPpec0M3apm9P2SjstUe6MfXepDvVIu2DCZzt1rkEuIIXro13LLQCnOzwXgHO/00sn+uPEjsmSQ== - dependencies: - "@as-pect/core" "^6.2.1" - -"@as-pect/snapshots@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@as-pect/snapshots/-/snapshots-6.2.1.tgz#237ed3b958e85b3e527a0e9f43292813b6dbf789" - integrity sha512-a6xcOUaXMrR3f1n6vgGxMJxUUd6MIVm5vlQ3nZ2hDEMz1PFyEQ04OvGqqUIYHhKAeXIvD3iwz02cI8Wh9lDK7Q== - dependencies: - diff "^5.0.0" - nearley "^2.20.1" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -assemblyscript@^0.19.22: - version "0.19.23" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" - integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== - dependencies: - binaryen "102.0.0-nightly.20211028" - long "^5.2.0" - source-map-support "^0.5.20" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binaryen@102.0.0-nightly.20211028: - version "102.0.0-nightly.20211028" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" - integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^2.19.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -csv-stringify@^5.6.2: - version "5.6.5" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" - integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== - -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -glob@^7.1.7: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -isarray@1.0.0, isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -line-column@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" - integrity sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww== - dependencies: - isarray "^1.0.0" - isobject "^2.0.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -long@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -moo@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - -nearley@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" - integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== - dependencies: - commander "^2.19.0" - moo "^0.5.0" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-support@^0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^6.7.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -ts-mixer@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-5.4.1.tgz#b90db9ced48531aa17ce9184a2890d1e3c99b1e5" - integrity sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -visitor-as@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/visitor-as/-/visitor-as-0.6.0.tgz#b0cca3c918bd9d396545faf08529d2b9ba968a40" - integrity sha512-4WcnwCLXWjhNkwJj9gSqh46sdIv9CyIvnSuwr61OOfrGCtN2mKcW5KE828OeEr1rYjEy0Z/CIdPBJKJRLsUgDA== - dependencies: - lodash.clonedeep "^4.5.0" - ts-mixer "^5.4.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== diff --git a/wasmaudioworklet/web-test-runner.config.js b/wasmaudioworklet/web-test-runner.config.js new file mode 100644 index 00000000..cef024c4 --- /dev/null +++ b/wasmaudioworklet/web-test-runner.config.js @@ -0,0 +1,37 @@ +import { playwrightLauncher } from '@web/test-runner-playwright'; + +export default { + files: [ + '**/*.spec.js', // include `.spec.ts` files + '!./node_modules/**/*', // exclude any node modules + ], + concurrency: 1, + watch: false, + testRunnerHtml: testRunnerImport => + ` + + + + + `, + browsers: [ + playwrightLauncher({ product: 'chromium', launchOptions: { args: ['--autoplay-policy=no-user-gesture-required'] } }), + playwrightLauncher({ + product: 'firefox', launchOptions: { + headless: false, + firefoxUserPrefs: { + 'media.autoplay.block-webaudio': false + } + } + }), + /*playwrightLauncher({ + product: 'webkit',launchOptions: { + headless: false + } + })*/ + ], +}; \ No newline at end of file diff --git a/wasmaudioworklet/yarn.lock b/wasmaudioworklet/yarn.lock index b1f822ad..59141779 100644 --- a/wasmaudioworklet/yarn.lock +++ b/wasmaudioworklet/yarn.lock @@ -2,127 +2,870 @@ # yarn lockfile v1 +"@75lb/deep-merge@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@75lb/deep-merge/-/deep-merge-1.1.1.tgz#3b06155b90d34f5f8cc2107d796f1853ba02fd6d" + integrity sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw== + dependencies: + lodash.assignwith "^4.2.0" + typical "^7.1.1" + +"@as-covers/assembly@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@as-covers/assembly/-/assembly-0.4.1.tgz#d41e601b456bfa640591386ef084e538f67f029c" + integrity sha512-JPLYG9aVuncJaZ8sAqsb2oOebssbbTNahAB4WL4k4mwzgPw5H0gNB14YxSHr8wAiWvYUqLPYb+dGvGuFCUFcpQ== + +"@as-covers/core@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@as-covers/core/-/core-0.4.2.tgz#d0e942537be35171da63e4312c0e3a224c9b8193" + integrity sha512-386ZK6yZwDXfnCBFabKDQtTuvDZmR1aW7eQBp89oN6WwXj+/1FZjIjyMudI1z5qcEnTJ+yS9BGLOC5KH0XDQGg== + dependencies: + "@as-covers/assembly" "^0.4.1" + "@as-covers/glue" "^0.4.2" + "@as-covers/transform" "^0.4.2" + +"@as-covers/glue@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@as-covers/glue/-/glue-0.4.2.tgz#d17f4a48a3310f0ede4cd2ede5278217c1cd2c37" + integrity sha512-JqAoJwFovE6W6vChVEp2y1A0fhNxaEkwWR7NJSHjbdFUyGhdm27RP51pEwAOasvZVf0hu+643pbFY149DXivgw== + dependencies: + csv-stringify "^6.2.3" + table "^6.8.1" + +"@as-covers/transform@0.4.2", "@as-covers/transform@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@as-covers/transform/-/transform-0.4.2.tgz#da887bc2dda671b93907c285023f57c5620aa04a" + integrity sha512-d8NGZbXJvXnZi/gOKTLnaMl138cOpFqTTvE0gXL3rSzEPE9948dVc+ylof+lfAiQJHWz2uAvGAUhFMN3TR5NPg== + dependencies: + line-column "^1.0.2" + visitor-as "^0.11.4" + +"@as-pect/assembly@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/assembly/-/assembly-8.1.0.tgz#788ad200e2eec36e6fc158c5cf65932faca18671" + integrity sha512-ALDm5M0Zx/hoFZ27vS3/kjkzMHbcPt2IBIkNjJz0M798meRCJV6ZWbChfmi4kDcMqaPk/awU54b4Bpx+VxBKfg== + +"@as-pect/cli@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/cli/-/cli-8.1.0.tgz#5120560142a636d9de00783854e8f86c4938a30f" + integrity sha512-bu2PUnWdYcF3aQ7X9rB6GXiE+b7Pi0MGMOyiShqdGlDCr3vKoD1kAK5Kb5rqY3tWRCC4gWO7/wupEynem6Qq0Q== + dependencies: + "@as-covers/core" "0.4.2" + "@as-covers/transform" "0.4.2" + "@as-pect/assembly" "^8.1.0" + "@as-pect/core" "^8.1.0" + "@as-pect/transform" "^8.1.0" + chalk "^5.2.0" + chalk-template "^0.4.0" + commander "^9.4.1" + glob "^8.0.3" + glob-promise "^5.0.0" + optionalDependencies: + "@as-pect/csv-reporter" "^8.1.0" + "@as-pect/json-reporter" "^8.1.0" + +"@as-pect/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/core/-/core-8.1.0.tgz#80257068e7e0c194fab519ef5bc33dd0e85fe06f" + integrity sha512-ufXnyHzHh2ybfyyj1fojOxlI8npgk7o5ktbCqWdhfX+/RD7L5nyI14pBP5PUpHs2wRrpt7neXb4QEyHvZmc0Xw== + dependencies: + "@as-pect/assembly" "^8.1.0" + "@as-pect/snapshots" "^8.1.0" + "@assemblyscript/loader" "^0.25.0" + assemblyscript "^0.27.2" + chalk "^5.2.0" + chalk-template "^0.4.0" + long "^5.2.1" + +"@as-pect/csv-reporter@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/csv-reporter/-/csv-reporter-8.1.0.tgz#463919672b7c2e878b483443a7e92f678227a170" + integrity sha512-7EQL2IBZ4WgZk3UdIzG5SRwNaVgVzB6CpZyyyKCWQbtF3i4phUN8g59kRE2XM6vJx0Ojf9+LqkOCM00WNgIxJg== + dependencies: + "@as-pect/core" "^8.1.0" + +"@as-pect/json-reporter@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/json-reporter/-/json-reporter-8.1.0.tgz#0281b75e93258fe2fc4cb345d800251f4f0f7e93" + integrity sha512-KcMq15cGcY4mJh34UHOrqQAUR7LwajCJ0OkfcZZE3vPN45IY2R5CeO+sj4/1a/7TQIGvLFVMGB57szBIe6lDqQ== + dependencies: + "@as-pect/core" "^8.1.0" + +"@as-pect/snapshots@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/snapshots/-/snapshots-8.1.0.tgz#d7289c8d6cfd271814f4fc994fd5e11598b603f1" + integrity sha512-FoZdnxEFvTlhyGu2pfCrKkH9bs2BaR/Buf5On876cTOCI1yfLFpP0kwCnStjRz0kfwHmg6LSHGbhvc3tKaJBdg== + dependencies: + chevrotain "^10.4.2" + diff "^5.1.0" + nearley "^2.20.1" + +"@as-pect/transform@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@as-pect/transform/-/transform-8.1.0.tgz#3bdfda72a1b66e47d670f18a22b74588c54bbdcb" + integrity sha512-dyWSMjsNWg8TmIAf7GXmvlQSae155pGR8rEIteHCNo8kn4boLQ8IGlL6k8DdacJl58mtHRQWx+N3v4u0RN5yfg== + dependencies: + assemblyscript "^0.27.2" + +"@assemblyscript/loader@^0.25.0": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.25.2.tgz#8a596911af2bdc19e84122ed48da34a79f28a320" + integrity sha512-q2PyrBmepQ0YxlWN99Vb1MmOSL982ePhGRxAscX2XlZZPlzhv5DgH5UAefTUFgBHfQE8FY1CWONBIvPxS7Mjjw== + "@babel/code-frame@^7.10.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/code-frame@^7.12.11": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@chevrotain/cst-dts-gen@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.5.0.tgz#922ebd8cc59d97241bb01b1b17561a5c1ae0124e" + integrity sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw== + dependencies: + "@chevrotain/gast" "10.5.0" + "@chevrotain/types" "10.5.0" + lodash "4.17.21" + +"@chevrotain/gast@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-10.5.0.tgz#e4e614bc46d17a8892742f38e56cd33f1f3ad162" + integrity sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A== + dependencies: + "@chevrotain/types" "10.5.0" + lodash "4.17.21" + +"@chevrotain/types@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-10.5.0.tgz#52a97d74a8cfbc197f054636d93ecd8912d33d21" + integrity sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A== + +"@chevrotain/utils@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-10.5.0.tgz#0ee36f65b49b447fbac71b9e5af5c5c6c98ac057" + integrity sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ== + +"@esm-bundle/chai@^4.3.4-fix.0": + version "4.3.4-fix.0" + resolved "https://registry.yarnpkg.com/@esm-bundle/chai/-/chai-4.3.4-fix.0.tgz#3084cff7eb46d741749f47f3a48dbbdcbaf30a92" + integrity sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw== + dependencies: + "@types/chai" "^4.2.12" + +"@iarna/cli@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-2.1.0.tgz#f830356d54c72c804bd7afc43999de31e40fc3d6" + integrity sha512-rvVVqDa2g860niRbqs3D5RhL4la3dc1vwk+NlpKPZxKaMSHtE2se6C2x8NeveN+rcjp3/686X+u+09CZ+7lmAQ== + dependencies: + glob "^7.1.2" + signal-exit "^3.0.2" "@jridgewell/gen-mapping@^0.3.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -"@rollup/plugin-terser@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.3.0.tgz#43ee908fed27ed2bc876496fb9aab8033a0566ac" - integrity sha512-mYTkNW9KjOscS/3QWU5LfOKsR3/fAAVDaqcAe2TZ7ng6pN46f+C7FOZbITuIW/neA+PhcjoKl7yMyB3XcmA4gw== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - serialize-javascript "^6.0.0" - smob "^0.0.6" - terser "^5.15.1" + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -"@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@puppeteer/browsers@1.4.6": + version "1.4.6" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.6.tgz#1f70fd23d5d2ccce9d29b038e5039d7a1049ca77" + integrity sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ== + dependencies: + debug "4.3.4" + extract-zip "2.0.1" + progress "2.0.3" + proxy-agent "6.3.0" + tar-fs "3.0.4" + unbzip2-stream "1.4.3" + yargs "17.7.1" + +"@rollup/plugin-node-resolve@^15.0.1": + version "15.2.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9" + integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== + 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" + +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/pluginutils@^5.0.1": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.1.5.tgz#aa13d291631fe72552ca2adba50f8d58ef2cde6f" + integrity sha512-/fwx6GS8cIbM2rTNyLMxjSCOegHywOdXO+kN9yFy018iCULcKZCyA3xvzw4bxyKbYfdSxQgdhbsl0egNcxerQw== + +"@rollup/rollup-android-arm-eabi@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.2.tgz#ccb02257556bacbc1e756ab9b0b973cea2c7a664" + integrity sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA== + +"@rollup/rollup-android-arm64@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.1.5.tgz#b17d7262f00654296e8167b8b7a6708b79a29dc1" + integrity sha512-tmXh7dyEt+JEz/NgDJlB1UeL/1gFV0v8qYzUAU42WZH4lmUJ5rp6/HkR2qUNC5jCgYEwd8/EfbHKtGIEfS4CUg== + +"@rollup/rollup-android-arm64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.2.tgz#21bd0fbafdf442c6a17645b840f6a94556b0e9bb" + integrity sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg== + +"@rollup/rollup-darwin-arm64@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.1.5.tgz#7ddfe2dc9f369fc9560d007a5297492e2d289f45" + integrity sha512-lTDmLxdEVhzI3KCesZUrNbl3icBvPrDv/85JasY5gh4P2eAuDFmM4uj9HC5DdH0anLC0fwJ+1Uzasr4qOXcjRQ== + +"@rollup/rollup-darwin-arm64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.2.tgz#9f2e5d5637677f9839dbe1622130d0592179136a" + integrity sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw== + +"@rollup/rollup-darwin-x64@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.1.5.tgz#76d4b023964bfbf9dcfb9d968e3707841935f198" + integrity sha512-v6qEHZyjWnIgcc4oiy8AIeFsUJAx+Kg0sLj+RE7ICwv3u7YC/+bSClxAiBASRjMzqsq0Z+I/pfxj+OD8mjBYxg== + +"@rollup/rollup-darwin-x64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.2.tgz#1b06291ff1c41af94d2786cd167188c5bf7caec9" + integrity sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw== + +"@rollup/rollup-linux-arm-gnueabihf@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.1.5.tgz#ed0bff049b47126635908b095d421c699fe11996" + integrity sha512-WngCfwPEDUNbZR1FNO2TCROYUwJvRlbvPi3AS85bDUkkoRDBcjUIz42cuB1j4PKilmnZascL5xTMF/yU8YFayA== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.2.tgz#147069948bba00f435122f411210624e72638ebf" + integrity sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ== + +"@rollup/rollup-linux-arm64-gnu@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.1.5.tgz#a79023f1fa1ca7f0fc8bec343e87ee48ce67d159" + integrity sha512-Q2A/PEP/UTPTOBwgar3mmCaApahoezai/8e/7f4GCLV6XWCpnU4YwkQQtla7d7nUnc792Ps7g1G0WMovzIknrA== + +"@rollup/rollup-linux-arm64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.2.tgz#3a50f0e7ae6e444d11c61fce12783196454a4efb" + integrity sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg== + +"@rollup/rollup-linux-arm64-musl@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.1.5.tgz#d9629d2cdd3a16a9001715e13a53de27030b9ba6" + integrity sha512-84aBKNAVzTU/eG3tb2+kR4NGRAtm2YVW/KHwkGGDR4z1k4hyrDbuImsfs/6J74t6y0YLOe9HOSu7ejRjzUBGVQ== + +"@rollup/rollup-linux-arm64-musl@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.2.tgz#82b5e75484d91c25d4e649d018d9523e72d6dac2" + integrity sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g== + +"@rollup/rollup-linux-riscv64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.2.tgz#ca96f2d43a553d73aec736e991c07010561bc7a9" + integrity sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw== + +"@rollup/rollup-linux-x64-gnu@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.1.5.tgz#1867e169a32f6d9d302df443dd0fbef25f5b34e0" + integrity sha512-mldtP9UEBurIq2+GYMdNeiqCLW1fdgf4KdkMR/QegAeXk4jFHkKQl7p0NITrKFVyVqzISGXH5gR6GSTBH4wszw== + +"@rollup/rollup-linux-x64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.2.tgz#db1cece244ea46706c0e1a522ec19ca0173abc55" + integrity sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw== + +"@rollup/rollup-linux-x64-musl@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.1.5.tgz#fcd449c2838c61c2c320ae8de717961dc5c98d1b" + integrity sha512-36p+nMcSxjAEzfU47+by102HolUtf/EfgBAidocTKAofJMTqG5QD50qzaFLk4QO+z7Qvg4qd0wr99jGAwnKOig== + +"@rollup/rollup-linux-x64-musl@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.2.tgz#c15b26b86827f75977bf59ebd41ce5d788713936" + integrity sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg== + +"@rollup/rollup-win32-arm64-msvc@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.1.5.tgz#d4a674b472b0a31d8a8f9406b79933a6ccdb9efb" + integrity sha512-5oxhubo0A3J8aF/tG+6jHBg785HF8/88kl1YnfbDKmnqMxz/EFiAQDH9cq6lbnxofjn8tlq5KiTf0crJGOGThg== + +"@rollup/rollup-win32-arm64-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.2.tgz#60152948f9fb08e8c50c1555e334ca9f9f1f53aa" + integrity sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA== + +"@rollup/rollup-win32-ia32-msvc@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.1.5.tgz#a54c21255306f21429abf2a5c8b05909fe27b0e1" + integrity sha512-uVQyBREKX9ErofL8KAZ4iVlqzSZOXSIG+BOLYuz5FD+Cg6jh1eLIeUa3Q4SgX0QaTRFeeAgSNqCC+8kZrZBpSw== + +"@rollup/rollup-win32-ia32-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.2.tgz#657288cff10311f997d8dbd648590441760ae6d9" + integrity sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ== + +"@rollup/rollup-win32-x64-msvc@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.1.5.tgz#121eb95664a46afbc58d4fe2226b9dd9f8dcc59b" + integrity sha512-FQ5qYqRJ2vUBSom3Fos8o/6UvAMOvlus4+HGCAifH1TagbbwVnVVe0o01J1V52EWnQ8kmfpJDJ0FMrfM5yzcSA== + +"@rollup/rollup-win32-x64-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.2.tgz#830f3a3fba67f6216a5884368431918029045afe" + integrity sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA== + +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@types/accepts@*": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" + integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== + dependencies: + "@types/node" "*" + +"@types/babel__code-frame@^7.0.2": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz#20a899c0d29fba1ddf5c2156a10a2bda75ee6f29" + integrity sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA== + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/chai@^4.2.12": + version "4.3.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" + integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== + +"@types/co-body@^6.1.0": + version "6.1.3" + resolved "https://registry.yarnpkg.com/@types/co-body/-/co-body-6.1.3.tgz#201796c6389066b400cfcb4e1ec5c3db798265a2" + integrity sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + +"@types/command-line-args@^5.0.0": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.3.tgz#553ce2fd5acf160b448d307649b38ffc60d39639" + integrity sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw== + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/content-disposition@*": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.8.tgz#6742a5971f490dc41e59d277eee71361fea0b537" + integrity sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg== + +"@types/convert-source-map@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/convert-source-map/-/convert-source-map-2.0.3.tgz#e586c22ca4af2d670d47d32d7fe365d5c5558695" + integrity sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA== + +"@types/cookies@*": + version "0.7.10" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.10.tgz#c4881dca4dd913420c488508d192496c46eb4fd0" + integrity sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + +"@types/debounce@^1.2.0": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/debounce/-/debounce-1.2.4.tgz#cb7e85d9ad5ababfac2f27183e8ac8b576b2abb3" + integrity sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw== + +"@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/express-serve-static-core@^4.17.33": + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" -"@types/cors@^2.8.12": - version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" - integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== +"@types/glob@^8.0.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: + "@types/minimatch" "^5.1.2" "@types/node" "*" -"@types/node@*", "@types/node@>=10.0.0": - version "18.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== +"@types/http-assert@*": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.5.tgz#dfb1063eb7c240ee3d3fe213dac5671cfb6a8dbf" + integrity sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/keygrip@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.6.tgz#1749535181a2a9b02ac04a797550a8787345b740" + integrity sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ== + +"@types/koa-compose@*": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.8.tgz#dec48de1f6b3d87f87320097686a915f1e954b57" + integrity sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA== + dependencies: + "@types/koa" "*" + +"@types/koa@*", "@types/koa@^2.11.6": + version "2.13.12" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.12.tgz#70d87a9061a81909e0ee11ca50168416e8d3e795" + integrity sha512-vAo1KuDSYWFDB4Cs80CHvfmzSQWeUb909aQib0C0aFx4sw0K9UZFz2m5jaEP+b3X1+yr904iQiruS0hXi31jbw== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/node@*": + version "20.8.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.9.tgz#646390b4fab269abce59c308fc286dcd818a2b08" + integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg== + dependencies: + undici-types "~5.26.4" "@types/parse5@^6.0.1": version "6.0.3" resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== -"@web/parse5-utils@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@web/parse5-utils/-/parse5-utils-1.3.0.tgz#e2e9e98b31a4ca948309f74891bda8d77399f6bd" - integrity sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg== +"@types/qs@*": + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/ws@^7.4.0": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@web/browser-logs@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@web/browser-logs/-/browser-logs-0.4.0.tgz#8c4adddac46be02dff1a605312132053b3737d0a" + integrity sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA== + dependencies: + errorstacks "^2.2.0" + +"@web/config-loader@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@web/config-loader/-/config-loader-0.3.1.tgz#0917fd549c264e565e75bd6c7d73acd7365df26b" + integrity sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA== + +"@web/dev-server-core@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@web/dev-server-core/-/dev-server-core-0.7.0.tgz#ffe71dd272ecb73a2b0c1ee23f3fad812780b998" + integrity sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g== + dependencies: + "@types/koa" "^2.11.6" + "@types/ws" "^7.4.0" + "@web/parse5-utils" "^2.1.0" + chokidar "^3.4.3" + clone "^2.1.2" + es-module-lexer "^1.0.0" + get-stream "^6.0.0" + is-stream "^2.0.0" + isbinaryfile "^5.0.0" + koa "^2.13.0" + koa-etag "^4.0.0" + koa-send "^5.0.1" + koa-static "^5.0.0" + lru-cache "^8.0.4" + mime-types "^2.1.27" + parse5 "^6.0.1" + picomatch "^2.2.2" + ws "^7.4.2" + +"@web/dev-server-rollup@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz#85d881c20faf187138064a6de861c379be9ca224" + integrity sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg== + dependencies: + "@rollup/plugin-node-resolve" "^15.0.1" + "@web/dev-server-core" "^0.7.0" + nanocolors "^0.2.1" + parse5 "^6.0.1" + rollup "^4.4.0" + whatwg-url "^11.0.0" + +"@web/dev-server@^0.4.0": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@web/dev-server/-/dev-server-0.4.1.tgz#e534f106008b7a21f1c4593a230e1e7c14339684" + integrity sha512-GHeyH8MBZQpODFiHiXAdX4hOVbeDyD/DUermUinh/nexWAZUcXyXa200RItuAL6b25MQ3D/5hKNDypujSvXxiw== + dependencies: + "@babel/code-frame" "^7.12.11" + "@types/command-line-args" "^5.0.0" + "@web/config-loader" "^0.3.0" + "@web/dev-server-core" "^0.7.0" + "@web/dev-server-rollup" "^0.6.1" + camelcase "^6.2.0" + command-line-args "^5.1.1" + command-line-usage "^7.0.1" + debounce "^1.2.0" + deepmerge "^4.2.2" + ip "^1.1.5" + nanocolors "^0.2.1" + open "^8.0.2" + portfinder "^1.0.32" + +"@web/parse5-utils@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@web/parse5-utils/-/parse5-utils-2.0.2.tgz#263df67fb4262738c891314199b666f5bd96781b" + integrity sha512-TogrPNt36zOSjbEd8zoDmUGsN2dqMbk4U+2DrxsnbVxtUIBRCNPIuZ+XeoGF8gpxe2/Yf0dIVz+HW5+wEnqkCg== dependencies: "@types/parse5" "^6.0.1" parse5 "^6.0.1" -"@web/rollup-plugin-html@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@web/rollup-plugin-html/-/rollup-plugin-html-1.11.0.tgz#46c2bcb3a3b9db55d53b897ffc7e7ef2f618a052" - integrity sha512-EqUcV5plGYTV/utdbX8g5t8Yq/z6VfFuQuPD39ckOQuRj7Rj6HD15FHwLHpFAWOR0+GrDnNzR74RvI4ipGm0qQ== +"@web/parse5-utils@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@web/parse5-utils/-/parse5-utils-2.1.0.tgz#3d33aca62c66773492f2fba89d23a45f8b57ba4a" + integrity sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA== dependencies: - "@web/parse5-utils" "^1.3.0" + "@types/parse5" "^6.0.1" + parse5 "^6.0.1" + +"@web/rollup-plugin-html@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@web/rollup-plugin-html/-/rollup-plugin-html-2.0.1.tgz#735e5febd8c7874d573a206bb6d594f876a60412" + integrity sha512-4z0whGiRar8IYNqdid0QBgah3rPib/I4SFt2cB2mqLkQNHXWNCjRrIzhdrZPaTxUlshJNhbTHtEi/epT1mhLkQ== + dependencies: + "@web/parse5-utils" "^2.0.0" glob "^7.1.6" - html-minifier-terser "^6.0.0" + html-minifier-terser "^7.1.0" parse5 "^6.0.1" -accepts@~1.3.4: +"@web/test-runner-chrome@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz#13dfb885e82140d244f066f7361a22f89fe9ba59" + integrity sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w== + dependencies: + "@web/test-runner-core" "^0.13.0" + "@web/test-runner-coverage-v8" "^0.8.0" + async-mutex "0.4.0" + chrome-launcher "^0.15.0" + puppeteer-core "^20.0.0" + +"@web/test-runner-commands@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz#ed15a021249948204bb27559eb437ff6ceeee067" + integrity sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg== + dependencies: + "@web/test-runner-core" "^0.13.0" + mkdirp "^1.0.4" + +"@web/test-runner-core@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-core/-/test-runner-core-0.13.0.tgz#a3799461002fcb969b0baa100d88be6c1ff504f4" + integrity sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@types/babel__code-frame" "^7.0.2" + "@types/co-body" "^6.1.0" + "@types/convert-source-map" "^2.0.0" + "@types/debounce" "^1.2.0" + "@types/istanbul-lib-coverage" "^2.0.3" + "@types/istanbul-reports" "^3.0.0" + "@web/browser-logs" "^0.4.0" + "@web/dev-server-core" "^0.7.0" + chokidar "^3.4.3" + cli-cursor "^3.1.0" + co-body "^6.1.0" + convert-source-map "^2.0.0" + debounce "^1.2.0" + dependency-graph "^0.11.0" + globby "^11.0.1" + ip "^1.1.5" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-report "^3.0.1" + istanbul-reports "^3.0.2" + log-update "^4.0.0" + nanocolors "^0.2.1" + nanoid "^3.1.25" + open "^8.0.2" + picomatch "^2.2.2" + source-map "^0.7.3" + +"@web/test-runner-coverage-v8@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz#783e9f685f14cafc34a6bf323f7d9268c1477933" + integrity sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA== + dependencies: + "@web/test-runner-core" "^0.13.0" + istanbul-lib-coverage "^3.0.0" + lru-cache "^8.0.4" + picomatch "^2.2.2" + v8-to-istanbul "^9.0.1" + +"@web/test-runner-mocha@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz#4fbfa5c3222c8c787fdcc057dd932a0763267b10" + integrity sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ== + dependencies: + "@web/test-runner-core" "^0.13.0" + +"@web/test-runner-playwright@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz#6450dead573aca406ddf26f93471c776b1f98fcb" + integrity sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ== + dependencies: + "@web/test-runner-core" "^0.13.0" + "@web/test-runner-coverage-v8" "^0.8.0" + playwright "^1.22.2" + +"@web/test-runner@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@web/test-runner/-/test-runner-0.18.0.tgz#70a99bb7b4f78555d0944fb53ffd2b1cb3423eb7" + integrity sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg== + dependencies: + "@web/browser-logs" "^0.4.0" + "@web/config-loader" "^0.3.0" + "@web/dev-server" "^0.4.0" + "@web/test-runner-chrome" "^0.15.0" + "@web/test-runner-commands" "^0.9.0" + "@web/test-runner-core" "^0.13.0" + "@web/test-runner-mocha" "^0.9.0" + camelcase "^6.2.0" + command-line-args "^5.1.1" + command-line-usage "^7.0.1" + convert-source-map "^2.0.0" + diff "^5.0.0" + globby "^11.0.1" + nanocolors "^0.2.1" + portfinder "^1.0.32" + source-map "^0.7.3" + +JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1, abbrev@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@^1.3.5: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -130,22 +873,104 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn@^8.5.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.8.2: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== + dependencies: + string-width "^2.0.0" ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -159,6 +984,16 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -167,16 +1002,138 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-6.2.2.tgz#f567d99e9af88a6d3d2f9dfcc21db6f9ba9fd157" + integrity sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.reduce@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" + integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assemblyscript@^0.27.14: + version "0.27.14" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.27.14.tgz#8494b2b354001818b31fcff0554cdf11dcbcebd0" + integrity sha512-bOEYT6SF0C0QRyG5kNzPY3EfklydQnzlg1X1p38vsYGq3T5wXfYSMyUTen1peTloE+1n4q6HvjaJt+3JkjyF5w== + dependencies: + binaryen "112.0.0-nightly.20230411" + long "^5.2.1" + +assemblyscript@^0.27.2: + version "0.27.22" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.27.22.tgz#5825828602119c90173e974a4b55ac88769598d3" + integrity sha512-6ClobsR4Hxn6K0daYp/+n9qWTqVbpdVeSGSVDqRvUEz66vvFb8atS6nLm+fnQ54JXuXmzLQy0uWYYgB8G59btQ== + dependencies: + binaryen "116.0.0-nightly.20231102" + long "^5.2.1" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-mutex@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.0.tgz#ae8048cd4d04ace94347507504b3cf15e631c25f" + integrity sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA== + dependencies: + tslib "^2.4.0" + async@^2.6.4: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" @@ -184,15 +1141,40 @@ async@^2.6.4: dependencies: lodash "^4.17.14" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== basic-auth@^2.0.1: version "2.0.1" @@ -201,28 +1183,62 @@ basic-auth@^2.0.1: dependencies: safe-buffer "5.1.2" +basic-ftp@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.4.tgz#28aeab7bfbbde5f5d0159cd8bb3b8e633bbb091d" + integrity sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bin-links@^1.1.2, bin-links@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" + integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ== + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -body-parser@^1.19.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +binaryen@112.0.0-nightly.20230411: + version "112.0.0-nightly.20230411" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-112.0.0-nightly.20230411.tgz#2f85cff68c0fe3e89014d2dd4e933c4e7e313ef1" + integrity sha512-4V9r9x9fjAVFZdR2yvBFc3BEJJIBYvd2X8X8k0zAuJsao2gl9wNHDmpQ30QsLo6hgkRfRImkCbCjhXW3RDOYXQ== + +binaryen@116.0.0-nightly.20231102: + version "116.0.0-nightly.20231102" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-116.0.0-nightly.20231102.tgz#0bbf0181ef8a4d963859b1bf68c9bd2d24911dc7" + integrity sha512-aPU9tlKdw/gcXx6u4PxtDgOtGjg/ZKnYdk23ctYb70GxZgPhWnGWmnBt01aV5dt5yFFo2V4rbB7SzpSFhViFQA== + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" brace-expansion@^1.1.7: version "1.1.11" @@ -251,23 +1267,91 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.4: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== camel-case@^4.1.2: version "4.1.2" @@ -277,25 +1361,63 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^6.0.0: +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +capture-stack-trace@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz#1c43f6b059d4249e7f3f8724f15f048b927d3a8a" + integrity sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + chai@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + version "4.3.10" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" + integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.0.8" -chalk@^2.0.0: +chalk-template@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" + integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg== + dependencies: + chalk "^4.1.2" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -312,12 +1434,31 @@ chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -chokidar@3.5.3, chokidar@^3.5.1: +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chevrotain@^10.4.2: + version "10.5.0" + resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-10.5.0.tgz#9c1dc62ef0753bb562dbe521b5f72d041bad624e" + integrity sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A== + dependencies: + "@chevrotain/cst-dts-gen" "10.5.0" + "@chevrotain/gast" "10.5.0" + "@chevrotain/types" "10.5.0" + "@chevrotain/utils" "10.5.0" + lodash "4.17.21" + regexp-to-ast "0.5.0" + +chokidar@3.5.3, chokidar@^3.4.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -332,13 +1473,91 @@ chokidar@3.5.3, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" -clean-css@^5.2.2: - version "5.3.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" - integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-launcher@^0.15.0: + version "0.15.2" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" + integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + +chromium-bidi@0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.16.tgz#8a67bfdf6bb8804efc22765a82859d20724b46ab" + integrity sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA== + dependencies: + mitt "3.0.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== + dependencies: + ip-regex "^2.1.0" + +clean-css@~5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== dependencies: source-map "~0.6.0" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== + +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha512-iQYpDgpPPmCjn534ikQOhi+ydP6uMar+DtJ6a0In4aGL/PKqWfao75s6eF81quQQaz7isGz+goNECLARRZswdg== + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -348,6 +1567,53 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +co-body@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547" + integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ== + dependencies: + inflation "^2.0.0" + qs "^6.5.2" + raw-body "^2.3.3" + type-is "^1.6.16" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -372,126 +1638,391 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^2.20.0: +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ== + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-line-args@^5.1.1, command-line-args@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^7.0.0, command-line-usage@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-7.0.1.tgz#e540afef4a4f3bc501b124ffde33956309100655" + integrity sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ== + dependencies: + array-back "^6.2.2" + chalk-template "^0.4.0" + table-layout "^3.0.0" + typical "^7.1.1" + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" + ini "^1.3.4" + proto-list "~1.2.1" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +content-disposition@~0.5.2: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== +cookies@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" + integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== dependencies: - object-assign "^4" - vary "^1" + depd "~2.0.0" + keygrip "~1.1.0" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== corser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== + dependencies: + capture-stack-trace "^1.0.0" -date-format@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" - integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== +cross-fetch@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + +csv-stringify@^6.2.3: + version "6.4.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.4.5.tgz#99808b40ec30b86cc0e1c7d707c1d6ecbc4e1a00" + integrity sha512-SPu1Vnh8U5EnzpNOi1NDBL5jU5Rx7DVHr15DNg9LXDTAbQlAVAmEbVt16wZvEW9Fu9Qt4Ji8kmeCJ2B1+4rFTQ== + +cyclist@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" + integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz#540bd4c8753a25ee129035aebdedf63b078703c7" + integrity sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg== + +debounce@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.7: +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debuglog@*, debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-eql@^4.1.2: +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" -depd@2.0.0: +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -destroy@1.2.0: +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dependency-graph@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== + +destroy@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg== + +devtools-protocol@0.0.1147663: + version "0.0.1147663" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz#4ec5610b39a6250d1f87e6b9c7e16688ed0ac78e" + integrity sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ== + +dezalgo@^1.0.0, dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== +diff@^5.0.0, diff@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" + path-type "^4.0.0" + +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== dot-case@^3.0.4: version "3.0.4" @@ -501,77 +2032,337 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@~1.0.2: +encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -engine.io-parser@~5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.5.tgz#c6fa52e57d8d2dc68b24754348f779aa6e44f886" - integrity sha512-mjEyaa4zhuuRhaSLOdjEb57X0XPP9JEsnXI4E+ivhwT0GgzUogARx4MqoY1jQyB+4Bkz3BUOmzL7t9RMKmlG3g== +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA== + +errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +errorstacks@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/errorstacks/-/errorstacks-2.4.1.tgz#05adf6de1f5b04a66f2c12cc0593e1be2b18cd0f" + integrity sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw== + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-module-lexer@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" -engine.io@~6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.1.tgz#e3f7826ebc4140db9bbaa9021ad6b1efb175878f" - integrity sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: +escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -extend@^3.0.0: +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1, figgy-pudding@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -579,18 +2370,22 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" find-up@5.0.0: version "5.0.0" @@ -600,20 +2395,72 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha512-1eKYoECvhpM4IT70THQV8XNfmZoIlnROymbwOSazfmQO3kK+zCV+LSqUDzl7gDo3MZddCFeVa9Zg3Hi6FXqcgg== + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" fs-extra@^8.1.0: version "8.1.0" @@ -624,47 +2471,187 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha512-bwbv1FcWYwxN1F08I1THN8nS4Qe/pGq0gM8dy1J34vpxxp3qgZKJPPaqex36RyZO0sD2J+2ocnbwC2d/OjYICQ== + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -get-caller-file@^2.0.5: +gentle-fs@^2.3.0, gentle-fs@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" + integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q== + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" -glob-parent@~5.1.2: +get-uri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.2.tgz#e019521646f4a8ff6d291fbaea2c46da204bb75b" + integrity sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.0" + debug "^4.3.4" + fs-extra "^8.1.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-promise@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-5.0.1.tgz#e8eaa52a78152547f251bca51c0bdae32134542e" + integrity sha512-NvgDgLv2xE6W8EC1zCLtTQNd2UN0toCaHiBiRc9/uKQ/wSC+WWs7BtaPcJzHgKMfvIP8oD+2KgNpzCx9YB8/0Q== + dependencies: + "@types/glob" "^8.0.0" + npm-install-peers "^1.2.2" + glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -677,7 +2664,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -689,10 +2676,96 @@ glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + 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" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" @@ -704,23 +2777,52 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3: +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.0, has-unicode@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -728,18 +2830,36 @@ html-encoding-sniffer@^3.0.0: dependencies: whatwg-encoding "^2.0.0" -html-minifier-terser@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== dependencies: camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" + clean-css "~5.3.2" + commander "^10.0.0" + entities "^4.4.0" param-case "^3.0.4" relateurl "^0.2.7" - terser "^5.10.0" + terser "^5.15.1" + +http-assert@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" + integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== + dependencies: + deep-equal "~1.0.1" + http-errors "~1.8.0" + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-errors@2.0.0: version "2.0.0" @@ -752,6 +2872,43 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -780,6 +2937,38 @@ http-server@^14.1.1: union "~0.5.0" url-join "^4.0.1" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -787,14 +2976,61 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -inflight@^1.0.4: +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== + +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== + +ignore-walk@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@*, imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflation@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.1.0.tgz#9214db11a47e6f756d111c4f9df96971c60f886c" + integrity sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ== + +inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== @@ -802,11 +3038,80 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA== + +ip@^1.1.5, ip@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -814,7 +3119,55 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-docker@^2.0.0: +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-cidr@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" + integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw== + dependencies: + cidr-regex "^2.0.10" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -824,11 +3177,30 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -836,21 +3208,131 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -858,16 +3340,65 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isbinaryfile@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-reports@^3.0.2: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -889,6 +3420,41 @@ js-yaml@4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -896,67 +3462,263 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -karma-chai@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a" - integrity sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg== +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -karma-chrome-launcher@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" - integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: - which "^1.2.1" + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" -karma-firefox-launcher@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz#9a38cc783c579a50f3ed2a82b7386186385cfc2d" - integrity sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA== +keygrip@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" + integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== dependencies: - is-wsl "^2.2.0" - which "^2.0.1" + tsscmp "1.0.6" -karma-mocha@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" - integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== + dependencies: + co "^4.6.0" + koa-compose "^4.1.0" + +koa-etag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/koa-etag/-/koa-etag-4.0.0.tgz#2c2bb7ae69ca1ac6ced09ba28dcb78523c810414" + integrity sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg== + dependencies: + etag "^1.8.1" + +koa-send@^5.0.0, koa-send@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" + integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + resolve-path "^1.4.0" + +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" + integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== + dependencies: + debug "^3.1.0" + koa-send "^5.0.0" + +koa@^2.13.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.15.0.tgz#d24ae1b0ff378bf12eb3df584ab4204e4c12ac2b" + integrity sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.9.0" + debug "^4.3.2" + delegates "^1.0.0" + depd "^2.0.0" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^2.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== dependencies: - minimist "^1.2.3" + package-json "^4.0.0" -karma-safari-launcher@^1.0.0: +lazy-property@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz#96982a2cc47d066aae71c553babb28319115a2ce" - integrity sha512-qmypLWd6F2qrDJfAETvXDfxHvKDk+nyIjpH9xIeI3/hENr0U3nuqkxaftq73PfXZ4aOuOChA6SnLW4m4AxfRjQ== + resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha512-O52TK7FHpBPzdtvc5GoF0EPLQIBMqrAupANPGBidPkrDpl9IXlzuma3T+m0o0OpkRVPmTu3SDoT7985lw4KbNQ== -karma@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.1.tgz#f2253716dd3a41aaa813fa9f54b6ee047e1127d9" - integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== +libcipm@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" + integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.4.1" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.1.0" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" + integrity sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA== + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^14.2.3" + +lighthouse-logger@^1.0.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" + integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww== + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" locate-path@^6.0.0: version "6.0.0" @@ -965,7 +3727,108 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash@^4.17.14, lodash@^4.17.21: +lock-verify@^2.0.2, lock-verify@^2.1.0, lock-verify@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.2.tgz#9e93c0999dc3cbbede4f16f9cfdaa93ead8c76ef" + integrity sha512-2CUNtr1ZSVKJHcYP8uEzafmmuyauCB5zZimj8TvQd/Lflt9kXVZs+8S+EbAzZLaVUDn8CYGmeC3DFGdYfnCzeQ== + dependencies: + "@iarna/cli" "^2.1.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha512-bSYo8Pc/f0qAkr8fPJydpJjtrHiSynYfYBjtANIgXv5xEf1WlTC63dIDlgu0s9dmTvzRu1+JJTxcIAHe+sH0FQ== + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A== + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ== + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha512-S8dUjWr7SUT/X6TBIQ/OYoCHo1Stu1ZRy6uMUSKqzFnZp5G5RyQizSm6kvxD2Ewyy6AVfMg4AToeZzKfF99T5w== + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha512-ev5SP+iFpZOugyab/DEUQxUeZP5qyciVTlgQ1f4Vlw7VUcCD8fVnyIqVUEIaoFH9zjAqdgi69KiofzvVmda/ZQ== + dependencies: + lodash._getnative "^3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== + +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== + +lodash.assignwith@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" + integrity sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha512-M3MefBwfDhgKgINVuBJCO1YR3+gf6s9HNJsIiZ/Ru77Ws6uTb9eBuvrkpzO+9iLoAaRodGuq7tyrPCx+74QYGQ== + +lodash@4.17.21, lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -978,23 +3841,27 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log4js@^6.4.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.7.1.tgz#06e12b1ac915dd1067146ffad8215f666f7d2c51" - integrity sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: - date-format "^4.0.14" - debug "^4.3.4" - flatted "^3.2.7" - rfdc "^1.3.0" - streamroller "^3.1.3" - -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +long@^5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lower-case@^2.0.2: version "2.0.2" @@ -1003,6 +3870,84 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^8.0.4: + version "8.0.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +marky@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== + +meant@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" + integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1013,12 +3958,25 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -1030,10 +3988,10 @@ mime@^1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@5.0.1: version "5.0.1" @@ -1049,18 +4007,71 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.3, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mitt@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd" + integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ== + +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.5, mkdirp@^0.5.6: +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.0: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mocha@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" @@ -1088,80 +4099,510 @@ mocha@^10.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +moo@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanocolors@^0.2.1: + version "0.2.13" + resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.13.tgz#dfd1ed0bfab05e9fe540eb6874525f0a1684099b" + integrity sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +nanoid@^3.1.25: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nearley@^2.20.1: + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@^5.0.2, node-gyp@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +nopt@^4.0.1, nopt@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-audit-report@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" + integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + +npm-bundled@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha512-5v2y1KG06izpGvZJDSBR5q1Ej+NaPDO05yAAWBJE6+3eiId0R176Gz3Qc2vEmJnE+VGul84g6Qpq8fXzD82/JA== + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-install-peers@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/npm-install-peers/-/npm-install-peers-1.2.2.tgz#61030a2cc3c65d6bfe5e56d068357e18f78a4305" + integrity sha512-2KUOQVNbfr0FQmu4rJu+5lmmlrf17/Gh+Wm9GRR/P9GDiVqvPxr2I4KapNhLVJDJvodW18sUzSHM5XC8QQwvGw== + dependencies: + chalk "^1.1.3" + npm "< 7.0" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +npm-user-validate@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== +"npm@< 7.0": + version "6.14.18" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.18.tgz#5cd431567f0961e1fe63d46738cf37f74f7999eb" + integrity sha512-p3SjqSchSuNQUqbJBgwdv0L3O6bKkaSfQrQzJsskNpNKLg0g37c5xTXFV0SqTlX9GWvoGxBELVJMRWq0J8oaLA== dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.8" + bluebird "^3.7.2" + byte-size "^5.0.1" + cacache "^12.0.4" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.13" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "^1.0.4" + editor "~1.0.0" + figgy-pudding "^3.5.2" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.1" + glob "^7.2.3" + graceful-fs "^4.2.10" + has-unicode "~2.0.1" + hosted-git-info "^2.8.9" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.8" + init-package-json "^1.10.3" + is-cidr "^3.1.1" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.8" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.4" + lock-verify "^2.2.2" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "^1.0.3" + mississippi "^3.0.0" + mkdirp "^0.5.6" + move-concurrently "^1.0.1" + node-gyp "^5.1.1" + nopt "^4.0.3" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.3" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.5" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.7" + npm-user-validate "^1.0.1" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.2" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.14.1" + qw "^1.0.2" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.2" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.2" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.2.1" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.2" + stringify-package "^1.0.1" + tar "^4.4.19" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.4.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.1.2, npmlog@~4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -on-finished@2.4.1: +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.7" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" + integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + safe-array-concat "^1.0.0" + +on-finished@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -opener@^1.5.1: +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== + +open@^8.0.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.1, opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -1169,6 +4610,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -1176,6 +4624,89 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pac-proxy-agent@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75" + integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.2" + +pac-resolver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" + integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== + dependencies: + degenerator "^5.0.0" + ip "^1.1.8" + netmask "^2.0.2" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -1189,7 +4720,7 @@ parse5@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@~1.3.3: +parseurl@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -1202,27 +4733,81 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -picomatch@^2.0.4, picomatch@^2.2.1: +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -portfinder@^1.0.28: +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +playwright-core@1.40.1: + version "1.40.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.40.1.tgz#442d15e86866a87d90d07af528e0afabe4c75c05" + integrity sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ== + +playwright@^1.22.2: + version "1.40.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.40.1.tgz#a11bf8dca15be5a194851dbbf3df235b9f53d7ae" + integrity sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw== + dependencies: + playwright-core "1.40.1" + optionalDependencies: + fsevents "2.3.2" + +portfinder@^1.0.28, portfinder@^1.0.32: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== @@ -1231,18 +4816,189 @@ portfinder@^1.0.28: debug "^3.2.7" mkdirp "^0.5.6" -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1, promise-inflight@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw== + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -qs@6.11.0, qs@^6.4.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +proxy-agent@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.0.tgz#72f7bb20eb06049db79f7f86c49342c34f9ba08d" + integrity sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.0" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +punycode@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +puppeteer-core@^20.0.0: + version "20.9.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.9.0.tgz#6f4b420001b64419deab38d398a4d9cd071040e6" + integrity sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg== + dependencies: + "@puppeteer/browsers" "1.4.6" + chromium-bidi "0.4.16" + cross-fetch "4.0.0" + debug "4.3.4" + devtools-protocol "0.0.1147663" + ws "8.13.0" + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + +qs@^6.4.0, qs@^6.5.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^6.14.1: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +qw@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.2.tgz#0c31a6f810320a91c58b05198679427103b03c4a" + integrity sha512-1PhZ/iLKwlVNq45dnerTMKFjMof49uqli7/0QsvPNbX5OJ3IZ8msa9lUpvPheVdP+IYYPrf6cOaVil7S35joVA== + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -1250,21 +5006,115 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@^2.3.3: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ== + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -1272,30 +5122,140 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regexp-to-ast@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" + integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== + dependencies: + rc "^1.0.1" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve@^1.10.0, resolve@^1.22.1: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -1309,24 +5269,89 @@ rollup-plugin-terser@^7.0.2: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.9.1.tgz#27501d3d026418765fe379d5620d25954ff2a011" - integrity sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w== +rollup@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.1.5.tgz#0838662dbf56f4b3fdbe4de5f232212a302b198c" + integrity sha512-AEw14/q4NHYQkQlngoSae2yi7hDBeT9w84aEzdgCr39+2RL+iTG84lGTkgC1Wp5igtquN64cNzuzZKVz+U6jOg== optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.1.5" + "@rollup/rollup-android-arm64" "4.1.5" + "@rollup/rollup-darwin-arm64" "4.1.5" + "@rollup/rollup-darwin-x64" "4.1.5" + "@rollup/rollup-linux-arm-gnueabihf" "4.1.5" + "@rollup/rollup-linux-arm64-gnu" "4.1.5" + "@rollup/rollup-linux-arm64-musl" "4.1.5" + "@rollup/rollup-linux-x64-gnu" "4.1.5" + "@rollup/rollup-linux-x64-musl" "4.1.5" + "@rollup/rollup-win32-arm64-msvc" "4.1.5" + "@rollup/rollup-win32-ia32-msvc" "4.1.5" + "@rollup/rollup-win32-x64-msvc" "4.1.5" fsevents "~2.3.2" -safe-buffer@5.1.2: +rollup@^4.4.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.2.tgz#19d730219b7ec5f51372c6cf15cfb841990489fe" + integrity sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q== + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.9.2" + "@rollup/rollup-android-arm64" "4.9.2" + "@rollup/rollup-darwin-arm64" "4.9.2" + "@rollup/rollup-darwin-x64" "4.9.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.2" + "@rollup/rollup-linux-arm64-gnu" "4.9.2" + "@rollup/rollup-linux-arm64-musl" "4.9.2" + "@rollup/rollup-linux-riscv64-gnu" "4.9.2" + "@rollup/rollup-linux-x64-gnu" "4.9.2" + "@rollup/rollup-linux-x64-musl" "4.9.2" + "@rollup/rollup-win32-arm64-msvc" "4.9.2" + "@rollup/rollup-win32-ia32-msvc" "4.9.2" + "@rollup/rollup-win32-x64-msvc" "4.9.2" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== + dependencies: + aproba "^1.1.1" + +safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.1.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -1336,7 +5361,26 @@ secure-compare@3.0.1: resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== -serialize-javascript@6.0.0, serialize-javascript@^6.0.0: +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^7.5.3: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== @@ -1348,13 +5392,68 @@ serialize-javascript@^4.0.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: - randombytes "^2.1.0" + randombytes "^2.1.0" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== + dependencies: + graceful-fs "^4.1.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -1364,35 +5463,85 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -smob@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/smob/-/smob-0.0.6.tgz#09b268fea916158a2781c152044c6155adbb8aa1" - integrity sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw== +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== + +smart-buffer@^4.1.0, smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +smob@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" + integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" -socket.io-parser@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.1.tgz#01c96efa11ded938dcb21cbe590c26af5eff65e5" - integrity sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g== +socks-proxy-agent@^8.0.1, socks-proxy-agent@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha512-oKAAs26HeTu3qbawzUGCkTOBv/5MRrcuJyRWwbfEnWdpXnXsj+WEM3HTvarV73tMcf9uBEZNZoNDVRL62VLxzA== -socket.io@^4.4.1: - version "4.5.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.4.tgz#a4513f06e87451c17013b8d13fdfaf8da5a86a90" - integrity sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ== +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha512-RaKskQJZkmVREIwyAFho1RRU+sKjDdg51Crvxg2VxmIyiIrNhPNoJD/by5/pklWBXAZoO6LfAAGv8xd47p9TnQ== dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.2" - engine.io "~6.2.1" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.2.1" + from2 "^1.3.0" + stream-iterate "^1.1.0" source-map-support@~0.5.20: version "0.5.21" @@ -1402,31 +5551,128 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: +source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1, ssri@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -statuses@~1.5.0: +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -streamroller@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.4.tgz#844a18e795d39c1089a8216e66a1cf1151271df0" - integrity sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw== +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: - date-format "^4.0.14" - debug "^4.3.4" - fs-extra "^8.1.0" + end-of-stream "^1.1.0" + stream-shift "^1.0.0" -string-width@^4.1.0, string-width@^4.2.0: +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha512-QVfGkdBQ8NzsSIiL3rV6AoFFWwMvlg1qpTwVQaMGY5XYThDUuNM4hYSzi8pbKlimTsWyQdaWRZE+jwlPsMiiZw== + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + +stream-read-all@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/stream-read-all/-/stream-read-all-3.0.1.tgz#60762ae45e61d93ba0978cda7f3913790052ad96" + integrity sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamx@^2.15.0: + version "2.15.6" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887" + integrity sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1435,6 +5681,95 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1442,11 +5777,21 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-json-comments@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -1454,6 +5799,11 @@ supports-color@8.1.1: dependencies: has-flag "^4.0.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1468,32 +5818,110 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -terser@^5.0.0: - version "5.17.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" - integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +table-layout@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a" + integrity sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" + "@75lb/deep-merge" "^1.1.1" + array-back "^6.2.2" + command-line-args "^5.2.1" + command-line-usage "^7.0.0" + stream-read-all "^3.0.1" + typical "^7.1.1" + wordwrapjs "^5.1.0" + +table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar-fs@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.19: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== + dependencies: + execa "^0.7.0" -terser@^5.10.0, terser@^5.15.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== +terser@^5.0.0, terser@^5.15.1, terser@^5.17.4: + version "5.22.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.22.0.tgz#4f18103f84c5c9437aafb7a14918273310a8a49d" + integrity sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - rimraf "^3.0.0" + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3", through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== to-regex-range@^5.0.1: version "5.0.1" @@ -1507,17 +5935,64 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tslib@^2.0.3: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mixer@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" + integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsscmp@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" + integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -type-detect@^4.0.0, type-detect@^4.0.5: +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-is@~1.6.18: +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@^1.6.16: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -1525,10 +6000,92 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -ua-parser-js@^0.7.30: - version "0.7.32" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" - integrity sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-7.1.1.tgz#ba177ab7ab103b78534463ffa4c0c9754523ac1f" + integrity sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA== + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w== + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unbzip2-stream@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== union@~0.5.0: version "0.5.0" @@ -1537,6 +6094,27 @@ union@~0.5.0: dependencies: qs "^6.4.0" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== + dependencies: + crypto-random-string "^1.0.0" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -1547,25 +6125,130 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== + +update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + url-join@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA== + dependencies: + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" -vary@^1: +vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +visitor-as@^0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/visitor-as/-/visitor-as-0.11.4.tgz#7b2d7b7ac8be86d4741796aa0630af5e471a4744" + integrity sha512-uih7AooY2V3LhzobjLqyEQzhYYBGeq0y/rZk295foM1Ko498f24NNXBDyM1SgzcLMFCAT/fpmSRco1BpTIdKNQ== + dependencies: + lodash.clonedeep "^4.5.0" + ts-mixer "^6.0.2" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^2.0.0: version "2.0.0" @@ -1574,25 +6257,105 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" -which@^1.2.1: +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== +wide-align@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - isexe "^2.0.0" + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +wordwrapjs@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-5.1.0.tgz#4c4d20446dcc670b14fa115ef4f8fd9947af2b3a" + integrity sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg== + +worker-farm@^1.6.0, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -1607,26 +6370,83 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@^7.4.2: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@^15.0.1: + version "15.0.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" + integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -1637,7 +6457,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.1.1: +yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -1650,6 +6470,49 @@ yargs@16.2.0, yargs@^16.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@17.7.1: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + 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" + +yargs@^14.2.3: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +ylru@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.3.2.tgz#0de48017473275a4cbdfc83a1eaf67c01af8a785" + integrity sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"