From 4ec1145dced1d8aa3b268c64cd3ce9ae85909364 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 17 Nov 2022 11:09:54 +0100 Subject: [PATCH 01/31] Publish - @strudel.cycles/core@0.4.1 - @strudel.cycles/eval@0.4.1 - @strudel.cycles/midi@0.4.1 - @strudel.cycles/mini@0.4.1 - @strudel.cycles/osc@0.3.1 - @strudel.cycles/react@0.4.2 - @strudel.cycles/soundfonts@0.4.2 - @strudel.cycles/tonal@0.4.1 - @strudel.cycles/tone@0.4.1 - @strudel.cycles/transpiler@0.4.1 - @strudel.cycles/webaudio@0.4.2 - @strudel.cycles/webdirt@0.4.1 - @strudel.cycles/xen@0.4.1 --- packages/core/package-lock.json | 2 +- packages/core/package.json | 2 +- packages/eval/package-lock.json | 2 +- packages/eval/package.json | 4 ++-- packages/midi/package-lock.json | 2 +- packages/midi/package.json | 4 ++-- packages/mini/package-lock.json | 2 +- packages/mini/package.json | 8 ++++---- packages/osc/package-lock.json | 2 +- packages/osc/package.json | 2 +- packages/react/package.json | 10 +++++----- packages/soundfonts/package-lock.json | 2 +- packages/soundfonts/package.json | 6 +++--- packages/tonal/package-lock.json | 2 +- packages/tonal/package.json | 4 ++-- packages/tone/package-lock.json | 2 +- packages/tone/package.json | 4 ++-- packages/transpiler/package.json | 4 ++-- packages/webaudio/package-lock.json | 2 +- packages/webaudio/package.json | 4 ++-- packages/webdirt/package-lock.json | 2 +- packages/webdirt/package.json | 4 ++-- packages/xen/package.json | 4 ++-- 23 files changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 56ac3cb08..065394ee7 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/core", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/core/package.json b/packages/core/package.json index 4b57428f3..04d1b14f6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/core", - "version": "0.4.0", + "version": "0.4.1", "description": "Port of Tidal Cycles to JavaScript", "main": "index.mjs", "type": "module", diff --git a/packages/eval/package-lock.json b/packages/eval/package-lock.json index 65750d606..b551e545e 100644 --- a/packages/eval/package-lock.json +++ b/packages/eval/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/eval", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/eval/package.json b/packages/eval/package.json index 74381523e..7316ef2a9 100644 --- a/packages/eval/package.json +++ b/packages/eval/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/eval", - "version": "0.4.0", + "version": "0.4.1", "description": "Code evaluator for strudel", "main": "index.mjs", "type": "module", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", + "@strudel.cycles/core": "^0.4.1", "estraverse": "^5.3.0", "shift-ast": "^7.0.0", "shift-codegen": "^8.1.0", diff --git a/packages/midi/package-lock.json b/packages/midi/package-lock.json index 9d217fa68..a1dc944fa 100644 --- a/packages/midi/package-lock.json +++ b/packages/midi/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/midi", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/midi/package.json b/packages/midi/package.json index bca5a8607..88f95ae6c 100644 --- a/packages/midi/package.json +++ b/packages/midi/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/midi", - "version": "0.4.0", + "version": "0.4.1", "description": "Midi API for strudel", "main": "index.mjs", "repository": { @@ -21,7 +21,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/tone": "^0.4.0", + "@strudel.cycles/tone": "^0.4.1", "tone": "^14.7.77", "webmidi": "^3.0.21" } diff --git a/packages/mini/package-lock.json b/packages/mini/package-lock.json index 92e0ee74e..5d2d9c956 100644 --- a/packages/mini/package-lock.json +++ b/packages/mini/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/mini", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/mini/package.json b/packages/mini/package.json index 9a060ca71..744949da6 100644 --- a/packages/mini/package.json +++ b/packages/mini/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/mini", - "version": "0.4.0", + "version": "0.4.1", "description": "Mini notation for strudel", "main": "index.mjs", "type": "module", @@ -26,9 +26,9 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", - "@strudel.cycles/eval": "^0.4.0", - "@strudel.cycles/tone": "^0.4.0" + "@strudel.cycles/core": "^0.4.1", + "@strudel.cycles/eval": "^0.4.1", + "@strudel.cycles/tone": "^0.4.1" }, "devDependencies": { "peggy": "^2.0.1" diff --git a/packages/osc/package-lock.json b/packages/osc/package-lock.json index dab34a655..ecfe4131a 100644 --- a/packages/osc/package-lock.json +++ b/packages/osc/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/osc", - "version": "0.3.0", + "version": "0.3.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/osc/package.json b/packages/osc/package.json index b52ed2b4f..3b04b02f6 100644 --- a/packages/osc/package.json +++ b/packages/osc/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/osc", - "version": "0.3.0", + "version": "0.3.1", "description": "OSC messaging for strudel", "main": "osc.mjs", "scripts": { diff --git a/packages/react/package.json b/packages/react/package.json index 4b5687bca..e3998f0b6 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/react", - "version": "0.4.1", + "version": "0.4.2", "description": "React components for strudel", "main": "dist/index.cjs.js", "module": "dist/index.es.js", @@ -39,10 +39,10 @@ "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { "@codemirror/lang-javascript": "^6.1.1", - "@strudel.cycles/core": "^0.4.0", - "@strudel.cycles/tone": "^0.4.0", - "@strudel.cycles/transpiler": "^0.4.0", - "@strudel.cycles/webaudio": "^0.4.1", + "@strudel.cycles/core": "^0.4.1", + "@strudel.cycles/tone": "^0.4.1", + "@strudel.cycles/transpiler": "^0.4.1", + "@strudel.cycles/webaudio": "^0.4.2", "@uiw/codemirror-themes": "^4.12.4", "@uiw/react-codemirror": "^4.12.4", "react-hook-inview": "^4.5.0" diff --git a/packages/soundfonts/package-lock.json b/packages/soundfonts/package-lock.json index 0cc32344a..9959b4f46 100644 --- a/packages/soundfonts/package-lock.json +++ b/packages/soundfonts/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/soundfonts", - "version": "0.4.1", + "version": "0.4.2", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/soundfonts/package.json b/packages/soundfonts/package.json index 4d54d24a6..d88e52786 100644 --- a/packages/soundfonts/package.json +++ b/packages/soundfonts/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/soundfonts", - "version": "0.4.1", + "version": "0.4.2", "description": "Soundsfont support for strudel", "main": "index.mjs", "type": "module", @@ -22,8 +22,8 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", - "@strudel.cycles/webaudio": "^0.4.1", + "@strudel.cycles/core": "^0.4.1", + "@strudel.cycles/webaudio": "^0.4.2", "sfumato": "^0.1.2", "soundfont2": "^0.4.0" }, diff --git a/packages/tonal/package-lock.json b/packages/tonal/package-lock.json index 9c3c9ef3b..d3831a5eb 100644 --- a/packages/tonal/package-lock.json +++ b/packages/tonal/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/tonal", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/tonal/package.json b/packages/tonal/package.json index 3caa16c4a..eb68c56de 100644 --- a/packages/tonal/package.json +++ b/packages/tonal/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/tonal", - "version": "0.4.0", + "version": "0.4.1", "description": "Tonal functions for strudel", "main": "index.mjs", "type": "module", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", + "@strudel.cycles/core": "^0.4.1", "@tonaljs/tonal": "^4.6.5", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" diff --git a/packages/tone/package-lock.json b/packages/tone/package-lock.json index 472f9d5f7..b30ab6bde 100644 --- a/packages/tone/package-lock.json +++ b/packages/tone/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/tone", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/tone/package.json b/packages/tone/package.json index 2ad6bd04c..36bd52386 100644 --- a/packages/tone/package.json +++ b/packages/tone/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/tone", - "version": "0.4.0", + "version": "0.4.1", "description": "Tone.js API for strudel", "main": "index.mjs", "type": "module", @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", + "@strudel.cycles/core": "^0.4.1", "tone": "^14.7.77" } } diff --git a/packages/transpiler/package.json b/packages/transpiler/package.json index f91558361..da54a2b57 100644 --- a/packages/transpiler/package.json +++ b/packages/transpiler/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/transpiler", - "version": "0.4.0", + "version": "0.4.1", "description": "Transpiler for strudel user code. Converts syntactically correct but semantically meaningless JS into evaluatable strudel code.", "main": "index.mjs", "scripts": { @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", + "@strudel.cycles/core": "^0.4.1", "acorn": "^8.8.1", "escodegen": "^2.0.0", "estree-walker": "^3.0.1" diff --git a/packages/webaudio/package-lock.json b/packages/webaudio/package-lock.json index ba15a2b9d..d179e1a44 100644 --- a/packages/webaudio/package-lock.json +++ b/packages/webaudio/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/webaudio", - "version": "0.4.1", + "version": "0.4.2", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/webaudio/package.json b/packages/webaudio/package.json index 580acec6c..16873aabb 100644 --- a/packages/webaudio/package.json +++ b/packages/webaudio/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/webaudio", - "version": "0.4.1", + "version": "0.4.2", "description": "Web Audio helpers for Strudel", "main": "index.mjs", "type": "module", @@ -30,6 +30,6 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0" + "@strudel.cycles/core": "^0.4.1" } } diff --git a/packages/webdirt/package-lock.json b/packages/webdirt/package-lock.json index e64abc082..f4b12779b 100644 --- a/packages/webdirt/package-lock.json +++ b/packages/webdirt/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/webdirt", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/webdirt/package.json b/packages/webdirt/package.json index 5db8e1d92..0697df4f7 100644 --- a/packages/webdirt/package.json +++ b/packages/webdirt/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/webdirt", - "version": "0.4.0", + "version": "0.4.1", "description": "WebDirt integration for Strudel", "main": "index.mjs", "type": "module", @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0", + "@strudel.cycles/core": "^0.4.1", "WebDirt": "github:dktr0/WebDirt" } } diff --git a/packages/xen/package.json b/packages/xen/package.json index e75c74fc7..25342cd97 100644 --- a/packages/xen/package.json +++ b/packages/xen/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/xen", - "version": "0.4.0", + "version": "0.4.1", "description": "Xenharmonic API for strudel", "main": "index.mjs", "scripts": { @@ -24,6 +24,6 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.4.0" + "@strudel.cycles/core": "^0.4.1" } } From e2898ee5bf07f6664e46d083c1054b8059538834 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 24 Nov 2022 15:30:11 +0100 Subject: [PATCH 02/31] add eslint + fix lint errors --- .eslintignore | 14 + .eslintrc.json | 16 + package-lock.json | 824 ++++++++++++++++++- package.json | 6 +- packages/core/controls.mjs | 2 +- packages/core/draw.mjs | 2 +- packages/core/pattern.mjs | 89 +- packages/core/pianoroll.mjs | 2 +- packages/core/speak.mjs | 2 +- packages/mini/mini.mjs | 9 +- packages/react/dist/index.cjs.js | 2 +- packages/react/dist/index.es.js | 42 +- packages/react/src/hooks/useHighlighting.mjs | 7 +- packages/serial/serial.mjs | 1 + packages/soundfonts/fontloader.mjs | 2 + packages/soundfonts/sfumato.mjs | 3 +- packages/tonal/voicings.mjs | 2 +- packages/webaudio/sampler.mjs | 3 +- tutorial/render.js | 2 +- 19 files changed, 938 insertions(+), 92 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..3ceb0c5b6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,14 @@ +krill-parser.js +krill.pegjs +.eslintrc.json +server.js +tidal-sniffer.js +*.jsx +tunejs.js +out/** +postcss.config.js +postcss.config.cjs +tailwind.config.js +vite.config.js +/**/dist/**/* +!**/*.mjs diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..ba929b55c --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,16 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": ["eslint:recommended"], + "overrides": [], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [], + "rules": { + "no-unused-vars": ["warn", { "destructuredArrayIgnorePattern": ".", "ignoreRestSiblings": false }] + } +} diff --git a/package-lock.json b/package-lock.json index 01a31dbbe..2aa95c505 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "devDependencies": { "@vitest/ui": "^0.21.1", "c8": "^7.12.0", + "eslint": "^8.28.0", "events": "^3.3.0", "gh-pages": "^4.0.0", "jsdoc": "^3.6.10", @@ -669,12 +670,95 @@ "node": ">=12" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", @@ -2606,6 +2690,15 @@ "acorn-walk": "^7.1.1" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -4461,6 +4554,18 @@ "node": ">=12" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -5056,6 +5161,242 @@ "source-map": "~0.6.1" } }, + "node_modules/eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/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/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -5068,6 +5409,30 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -5257,6 +5622,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-set": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", @@ -5380,6 +5757,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5972,6 +6368,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -6719,6 +7121,15 @@ "node": ">=8" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -6938,11 +7349,33 @@ "node": ">=10.0.0" } }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "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==" }, + "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/js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", @@ -7241,6 +7674,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -7675,6 +8114,12 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -8119,9 +8564,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" @@ -8407,6 +8852,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -10446,6 +10897,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -11706,6 +12169,12 @@ "node": ">=0.10" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -13593,12 +14062,69 @@ "dev": true, "optional": true }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", @@ -15397,6 +15923,13 @@ "acorn-walk": "^7.1.1" } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -16838,6 +17371,15 @@ "walk-back": "^5.1.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -17197,11 +17739,199 @@ "source-map": "~0.6.1" } }, + "eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "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 + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -17344,6 +18074,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-set": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", @@ -17432,6 +18171,22 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "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 + }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -17885,6 +18640,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -18441,6 +19202,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -18603,11 +19370,26 @@ "integrity": "sha512-RUxChhn388CZfSymwwgucfaBxGu4Z0eeJOSTnUMsDN2tMx5E8G+o7h2gk/xPaDTfOORnQsJk71VhSuqiw1Hy9Q==", "optional": true }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "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" + } + }, "js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", @@ -18848,6 +19630,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -19199,6 +19987,12 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -19545,9 +20339,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" @@ -19761,6 +20555,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -21361,6 +22161,12 @@ "functions-have-names": "^1.2.2" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -22348,6 +23154,12 @@ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", diff --git a/package.json b/package.json index 412256288..98651de1e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Port of tidalcycles to javascript", "scripts": { "pretest": "cd tutorial && npm run jsdoc-json", - "test": "vitest run --version", + "test": "vitest run --version && npm run lint", "test-ui": "vitest --ui", "test-coverage": "vitest --coverage", "bootstrap": "lerna bootstrap", @@ -17,7 +17,8 @@ "preview": "npx serve ./out", "deploy": "NODE_DEBUG=gh-pages gh-pages -d out", "jsdoc": "jsdoc packages/ -c jsdoc.config.json", - "jsdoc-json": "jsdoc packages/ --template ./node_modules/jsdoc-json --destination doc.json -c jsdoc.config.json" + "jsdoc-json": "jsdoc packages/ --template ./node_modules/jsdoc-json --destination doc.json -c jsdoc.config.json", + "lint": "npx eslint . --ext mjs,js --quiet" }, "workspaces": [ "packages/*" @@ -42,6 +43,7 @@ "devDependencies": { "@vitest/ui": "^0.21.1", "c8": "^7.12.0", + "eslint": "^8.28.0", "events": "^3.3.0", "gh-pages": "^4.0.0", "jsdoc": "^3.6.10", diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index fec6c39ae..8dfeb5b6c 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -787,6 +787,6 @@ controls.createParam = (name) => { }; controls.createParams = (...names) => - names.reduce((acc, name) => Object.assign(acc, { [name]: createParam(name) }), {}); + names.reduce((acc, name) => Object.assign(acc, { [name]: controls.createParam(name) }), {}); export default controls; diff --git a/packages/core/draw.mjs b/packages/core/draw.mjs index 9ef34e3ab..7260e6547 100644 --- a/packages/core/draw.mjs +++ b/packages/core/draw.mjs @@ -4,7 +4,7 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { Pattern, getTime } from './index.mjs'; +import { Pattern, getTime, State, TimeSpan } from './index.mjs'; export const getDrawContext = (id = 'test-canvas') => { let canvas = document.querySelector('#' + id); diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 6c831ffe3..154253974 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -15,6 +15,7 @@ import drawLine from './drawLine.mjs'; import { logger } from './logger.mjs'; let stringParser; + // parser is expected to turn a string into a pattern // if set, the reify function will parse all strings with it // intended to use with mini to automatically interpret all strings as mini notation @@ -32,10 +33,9 @@ export class Pattern { this.query = query; } - ////////////////////////////////////////////////////////////////////// // Haskell-style functor, applicative and monadic operations - + /** * Returns a new pattern, with the function applied to the value of * each hap. It has the alias {@link Pattern#fmap}. @@ -164,7 +164,6 @@ export class Pattern { return new Pattern(query); } - bindWhole(choose_whole, func) { const pat_val = this; const query = function (state) { @@ -205,7 +204,7 @@ export class Pattern { } outerBind(func) { - return this.bindWhole((a, _) => a, func); + return this.bindWhole((a) => a, func); } outerJoin() { @@ -313,7 +312,7 @@ export class Pattern { ////////////////////////////////////////////////////////////////////// // Utility methods mainly for internal use - + /** * Query haps inside the given time span. * @@ -534,7 +533,7 @@ export class Pattern { // removes continuous haps that don't have a 'whole' timespan return this.filterHaps((hap) => hap.whole); } - + /** * Queries the pattern for the first cycle, returning Haps. Mainly of use when * debugging a pattern. @@ -940,8 +939,8 @@ export class Pattern { //binary_pat = sequence(binary_pat) const true_pat = binary_pat.filterValues(id); const false_pat = binary_pat.filterValues((val) => !val); - const with_pat = true_pat.fmap((_) => (y) => y).appRight(func(this)); - const without_pat = false_pat.fmap((_) => (y) => y).appRight(this); + const with_pat = true_pat.fmap(() => (y) => y).appRight(func(this)); + const without_pat = false_pat.fmap(() => (y) => y).appRight(this); return stack(with_pat, without_pat); } @@ -1007,7 +1006,7 @@ export class Pattern { every(n, func) { return this.firstOf(n, func); } - + /** * Returns a new pattern where every other cycle is played once, twice as * fast, and offset in time by one quarter of a cycle. Creates a kind of @@ -1051,7 +1050,6 @@ export class Pattern { return this.every(2, rev); } - juxBy(by, func) { by /= 2; const elem_or = function (dict, key, dflt) { @@ -1184,8 +1182,12 @@ export class Pattern { * note("0 1 2 3".scale('A minor')).iter(4) */ _iter(times, back = false) { - times = Fraction(times) - return slowcat(...listRange(0, times.sub(1)).map((i) => (back ? this.late(Fraction(i).div(times)) : this.early(Fraction(i).div(times))))); + times = Fraction(times); + return slowcat( + ...listRange(0, times.sub(1)).map((i) => + back ? this.late(Fraction(i).div(times)) : this.early(Fraction(i).div(times)), + ), + ); } /** @@ -1231,10 +1233,10 @@ export class Pattern { on = Boolean(parseInt(on)); return on ? silence : this; } - + ////////////////////////////////////////////////////////////////////// // Control-related methods, which manipulate patterns of objects - + /** * Cuts each sample into the given number of parts, allowing you to explore a technique known as 'granular synthesis'. * It turns a pattern of samples into a pattern of parts of samples. @@ -1282,17 +1284,11 @@ export class Pattern { ////////////////////////////////////////////////////////////////////// // Context methods - ones that deal with metadata - + _color(color) { return this.withContext((context) => ({ ...context, color })); } - log() { - return this.withHap((e) => { - return e.setContext({ ...e.context, logs: (e.context?.logs || []).concat([e.show()]) }); - }); - } - /** * * Sets the velocity from 0 to 1. Is multiplied together with gain. @@ -1363,7 +1359,6 @@ export class Pattern { _legato(value) { return this.withHapSpan((span) => new TimeSpan(span.begin, span.begin.add(span.end.sub(span.begin).mul(value)))); } - } // TODO - adopt value.mjs fully.. @@ -1388,7 +1383,7 @@ function _composeOp(a, b, func) { // pattern composers const composers = { set: [(a, b) => b], - keep: [(a, b) => a], + keep: [(a) => a], keepif: [(a, b) => (b ? a : undefined)], // numerical functions @@ -1488,21 +1483,21 @@ function _composeOp(a, b, func) { } if (how === 'In') { // set 'in' to default, but with magic properties to pick a different 'how' - Object.defineProperty(Pattern.prototype, what, { - // a getter that returns a function, so 'pat' can be - // accessed by closures that are methods of that function.. - get: function() { - const pat = this; - // wrap the 'in' function as default behaviour - const wrapper = (...other) => pat[what + "In"](...other); - // add methods to that function to pick alternative behaviours - for (const wraphow of hows) { + Object.defineProperty(Pattern.prototype, what, { + // a getter that returns a function, so 'pat' can be + // accessed by closures that are methods of that function.. + get: function () { + const pat = this; + // wrap the 'in' function as default behaviour + const wrapper = (...other) => pat[what + 'In'](...other); + // add methods to that function to pick alternative behaviours + for (const wraphow of hows) { wrapper[wraphow.toLowerCase()] = (...other) => pat[what + wraphow](...other); - } - - return wrapper; - } - }); + } + + return wrapper; + }, + }); } else { // default what to 'set', e.g. squeeze = setSqueeze if (what === 'set') { @@ -1580,7 +1575,7 @@ Pattern.prototype.factories = { // Elemental patterns // Nothing -export const silence = new Pattern((_) => []); +export const silence = new Pattern(() => []); /** A discrete value that repeats once per cycle. * @@ -1598,13 +1593,16 @@ export function pure(value) { export function isPattern(thing) { // thing?.constructor?.name !== 'Pattern' // <- this will fail when code is mangled const is = thing instanceof Pattern || thing?._Pattern; - if (!thing instanceof Pattern) { + // TODO: find out how to check wrong core dependency. below will never work !thing === 'undefined' + // wrapping it in (..) will result other checks to log that warning (e.g. isPattern('kalimba')) + /* if (!thing instanceof Pattern) { console.warn( `Found Pattern that fails "instanceof Pattern" check. This may happen if you are using multiple versions of @strudel.cycles/core. Please check by running "npm ls @strudel.cycles/core".`, ); - } + console.log(thing); + } */ return is; } @@ -1758,7 +1756,7 @@ export function polymeterSteps(steps, ...args) { const pats = []; for (const seq of seqs) { if (seq[1] == 0) { - next; + continue; } if (steps == seq[1]) { pats.push(seq[0]); @@ -1916,10 +1914,9 @@ Pattern.prototype.bootstrap = function () { this.patternified.forEach((prop) => { // the following will patternify all functions in Pattern.prototype.patternified Pattern.prototype[prop] = function (...args) { - return this.patternify(x => x.innerJoin(), Pattern.prototype['_' + prop])(...args); + return this.patternify((x) => x.innerJoin(), Pattern.prototype['_' + prop])(...args); }; - - + /* const func = Pattern.prototype['_' + prop]; Pattern.prototype[prop] = function (...args) { @@ -1945,7 +1942,7 @@ Pattern.prototype.bootstrap = function () { } }); */ - + // with the following, you can do, e.g. `stack(c3).fast.slowcat(1, 2, 4, 8)` instead of `stack(c3).fast(slowcat(1, 2, 4, 8))` // TODO: find a way to implement below outside of constructor (code only worked there) /* Object.assign( @@ -1978,4 +1975,4 @@ Pattern.prototype.define = (name, func, options = {}) => { // Pattern.prototype.define('early', (a, pat) => pat.early(a), { patternified: true, composable: true }); Pattern.prototype.define('hush', (pat) => pat.hush(), { patternified: false, composable: true }); -Pattern.prototype.define('bypass', (pat) => pat.bypass(on), { patternified: true, composable: true }); +Pattern.prototype.define('bypass', (pat) => pat.bypass(1), { patternified: true, composable: true }); diff --git a/packages/core/pianoroll.mjs b/packages/core/pianoroll.mjs index f9c198e94..60b1dc7bf 100644 --- a/packages/core/pianoroll.mjs +++ b/packages/core/pianoroll.mjs @@ -4,7 +4,7 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { Pattern } from './index.mjs'; +import { Pattern, toMidi, getDrawContext } from './index.mjs'; const scale = (normalized, min, max) => normalized * (max - min) + min; const getValue = (e) => { diff --git a/packages/core/speak.mjs b/packages/core/speak.mjs index 2e9ba80ac..25b396b5d 100644 --- a/packages/core/speak.mjs +++ b/packages/core/speak.mjs @@ -4,7 +4,7 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { Pattern, patternify2 } from './index.mjs'; +import { Pattern, patternify2, reify } from './index.mjs'; let synth; try { diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs index 82ed4b86a..dc9e53a31 100644 --- a/packages/mini/mini.mjs +++ b/packages/mini/mini.mjs @@ -23,9 +23,10 @@ const applyOptions = (parent) => (pat, i) => { const operator = options?.operator; if (operator) { switch (operator.type_) { - case 'stretch': + case 'stretch': { const speed = Fraction(operator.arguments_.amount).inverse(); return reify(pat).fast(speed); + } case 'bjorklund': return pat.euclid(operator.arguments_.pulse, operator.arguments_.step, operator.arguments_.rotation); case 'degradeBy': @@ -87,7 +88,7 @@ function resolveReplications(ast) { export function patternifyAST(ast) { switch (ast.type_) { - case 'pattern': + case 'pattern': { resolveReplications(ast); const children = ast.source_.map(patternifyAST).map(applyOptions(ast)); const alignment = ast.arguments_.alignment; @@ -110,7 +111,8 @@ export function patternifyAST(ast) { return pat; } return sequence(...children); - case 'element': + } + case 'element': { if (ast.source_ === '~') { return silence; } @@ -129,6 +131,7 @@ export function patternifyAST(ast) { return pure(value).withLocation([start.line, start.column, start.offset], [end.line, end.column, end.offset]); } return patternifyAST(ast.source_); + } case 'stretch': return patternifyAST(ast.source_).slow(ast.arguments_.amount); /* case 'scale': diff --git a/packages/react/dist/index.cjs.js b/packages/react/dist/index.cjs.js index cd672e9ea..771d8be03 100644 --- a/packages/react/dist/index.cjs.js +++ b/packages/react/dist/index.cjs.js @@ -1 +1 @@ -"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react"),X=require("@uiw/react-codemirror"),p=require("@codemirror/view"),A=require("@codemirror/state"),Y=require("@codemirror/lang-javascript"),o=require("@lezer/highlight"),Z=require("@uiw/codemirror-themes"),ee=require("react-hook-inview"),B=require("@strudel.cycles/webaudio"),te=require("@strudel.cycles/core"),re=require("@strudel.cycles/transpiler"),I=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},n=I(t),oe=I(X),ae=Z.createTheme({theme:"dark",settings:{background:"#222",foreground:"#75baff",caret:"#ffcc00",selection:"rgba(128, 203, 196, 0.5)",selectionMatch:"#036dd626",lineHighlight:"#00000050",gutterBackground:"transparent",gutterForeground:"#8a919966"},styles:[{tag:o.tags.keyword,color:"#c792ea"},{tag:o.tags.operator,color:"#89ddff"},{tag:o.tags.special(o.tags.variableName),color:"#eeffff"},{tag:o.tags.typeName,color:"#c3e88d"},{tag:o.tags.atom,color:"#f78c6c"},{tag:o.tags.number,color:"#c3e88d"},{tag:o.tags.definition(o.tags.variableName),color:"#82aaff"},{tag:o.tags.string,color:"#c3e88d"},{tag:o.tags.special(o.tags.string),color:"#c3e88d"},{tag:o.tags.comment,color:"#7d8799"},{tag:o.tags.variableName,color:"#c792ea"},{tag:o.tags.tagName,color:"#c3e88d"},{tag:o.tags.bracket,color:"#525154"},{tag:o.tags.meta,color:"#ffcb6b"},{tag:o.tags.attributeName,color:"#c792ea"},{tag:o.tags.propertyName,color:"#c792ea"},{tag:o.tags.className,color:"#decb6b"},{tag:o.tags.invalid,color:"#ffffff"}]});const L=A.StateEffect.define(),ne=A.StateField.define({create(){return p.Decoration.none},update(e,r){try{for(let a of r.effects)if(a.is(L))if(a.value){const s=p.Decoration.mark({attributes:{style:"background-color: #FFCA2880"}});e=p.Decoration.set([s.range(0,r.newDoc.length)])}else e=p.Decoration.set([]);return e}catch(a){return console.warn("flash error",a),e}},provide:e=>p.EditorView.decorations.from(e)}),K=e=>{e.dispatch({effects:L.of(!0)}),setTimeout(()=>{e.dispatch({effects:L.of(!1)})},200)},x=A.StateEffect.define(),se=A.StateField.define({create(){return p.Decoration.none},update(e,r){try{for(let a of r.effects)if(a.is(x)){const s=a.value.map(c=>(c.context.locations||[]).map(({start:g,end:d})=>{const f=c.context.color||"#FFCA28";let i=r.newDoc.line(g.line).from+g.column,l=r.newDoc.line(d.line).from+d.column;const m=r.newDoc.length;return i>m||l>m?void 0:p.Decoration.mark({attributes:{style:`outline: 1.5px solid ${f};`}}).range(i,l)})).flat().filter(Boolean)||[];e=p.Decoration.set(s,!0)}return e}catch{return p.Decoration.set([])}},provide:e=>p.EditorView.decorations.from(e)}),ce=[Y.javascript(),ae,se,ne];function O({value:e,onChange:r,onViewChanged:a,onSelectionChange:s,options:c,editorDidMount:g}){const d=t.useCallback(l=>{r?.(l)},[r]),f=t.useCallback(l=>{a?.(l)},[a]),i=t.useCallback(l=>{l.selectionSet&&s&&s?.(l.state.selection)},[s]);return n.default.createElement(n.default.Fragment,null,n.default.createElement(oe.default,{value:e,onChange:d,onCreateEditor:f,onUpdate:i,extensions:ce}))}function T(...e){return e.filter(Boolean).join(" ")}function U({view:e,pattern:r,active:a,getTime:s}){const c=t.useRef([]),g=t.useRef();t.useEffect(()=>{if(e)if(r&&a){let f=function(){try{const i=s(),m=[Math.max(g.current||i,i-1/10,0),i+1/60];g.current=m[1],c.current=c.current.filter(h=>h.whole.end>i);const v=r.queryArc(...m).filter(h=>h.hasOnset());c.current=c.current.concat(v),e.dispatch({effects:x.of(c.current)})}catch{e.dispatch({effects:x.of([])})}d=requestAnimationFrame(f)},d=requestAnimationFrame(f);return()=>{cancelAnimationFrame(d)}}else c.current=[],e.dispatch({effects:x.of([])})},[r,a,e])}const ie="_container_3i85k_1",le="_header_3i85k_5",ue="_buttons_3i85k_9",de="_button_3i85k_9",fe="_buttonDisabled_3i85k_17",ge="_error_3i85k_21",me="_body_3i85k_25",E={container:ie,header:le,buttons:ue,button:de,buttonDisabled:fe,error:ge,body:me};function j({type:e}){return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"sc-h-5 sc-w-5",viewBox:"0 0 20 20",fill:"currentColor"},{refresh:n.default.createElement("path",{fillRule:"evenodd",d:"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z",clipRule:"evenodd"}),play:n.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z",clipRule:"evenodd"}),pause:n.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}[e])}function J(e){return t.useEffect(()=>(window.addEventListener("message",e),()=>window.removeEventListener("message",e)),[e]),t.useCallback(r=>window.postMessage(r,"*"),[])}function $({defaultOutput:e,interval:r,getTime:a,evalOnMount:s=!1,initialCode:c="",autolink:g=!1,beforeEval:d,afterEval:f,onEvalError:i,onToggle:l}){const m=t.useMemo(()=>he(),[]),[v,h]=t.useState(),[_,C]=t.useState(),[b,y]=t.useState(c),[M,P]=t.useState(),[k,D]=t.useState(),[S,N]=t.useState(!1),w=b!==M,{scheduler:R,evaluate:H,start:G,stop:z,pause:Q}=t.useMemo(()=>te.repl({interval:r,defaultOutput:e,onSchedulerError:h,onEvalError:u=>{C(u),i?.(u)},getTime:a,transpiler:re.transpiler,beforeEval:({code:u})=>{y(u),d?.()},afterEval:({pattern:u,code:F})=>{P(F),D(u),C(),h(),g&&(window.location.hash="#"+encodeURIComponent(btoa(F))),f?.()},onToggle:u=>{N(u),l?.(u)}}),[e,r,a]),W=J(({data:{from:u,type:F}})=>{F==="start"&&u!==m&&z()}),q=t.useCallback(async(u=!0)=>{await H(b,u),W({type:"start",from:m})},[H,b]),V=t.useRef();return t.useEffect(()=>{!V.current&&s&&b&&(V.current=!0,q())},[q,s,b]),t.useEffect(()=>()=>{R.stop()},[R]),{code:b,setCode:y,error:v||_,schedulerError:v,scheduler:R,evalError:_,evaluate:H,activateCode:q,activeCode:M,isDirty:w,pattern:k,started:S,start:G,stop:z,pause:Q,togglePlay:async()=>{S?R.pause():await q()}}}function he(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}const pe=()=>B.getAudioContext().currentTime;function be({tune:e,hideOutsideView:r=!1,init:a,enableKeyboard:s}){const{code:c,setCode:g,evaluate:d,activateCode:f,error:i,isDirty:l,activeCode:m,pattern:v,started:h,scheduler:_,togglePlay:C,stop:b}=$({initialCode:e,defaultOutput:B.webaudioOutput,getTime:pe}),[y,M]=t.useState(),[P,k]=ee.useInView({threshold:.01}),D=t.useRef(),S=t.useMemo(()=>((k||!r)&&(D.current=!0),k||D.current),[k,r]);return U({view:y,pattern:v,active:h&&!m?.includes("strudel disable-highlighting"),getTime:()=>_.getPhase()}),t.useLayoutEffect(()=>{if(s){const N=async w=>{(w.ctrlKey||w.altKey)&&(w.code==="Enter"?(w.preventDefault(),K(y),await f()):w.code==="Period"&&(b(),w.preventDefault()))};return window.addEventListener("keydown",N,!0),()=>window.removeEventListener("keydown",N,!0)}},[s,v,c,d,b,y]),n.default.createElement("div",{className:E.container,ref:P},n.default.createElement("div",{className:E.header},n.default.createElement("div",{className:E.buttons},n.default.createElement("button",{className:T(E.button,h?"sc-animate-pulse":""),onClick:()=>C()},n.default.createElement(j,{type:h?"pause":"play"})),n.default.createElement("button",{className:T(l?E.button:E.buttonDisabled),onClick:()=>f()},n.default.createElement(j,{type:"refresh"}))),i&&n.default.createElement("div",{className:E.error},i.message)),n.default.createElement("div",{className:E.body},S&&n.default.createElement(O,{value:c,onChange:g,onViewChanged:M})))}const ve=e=>t.useLayoutEffect(()=>(window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)),[e]);exports.CodeMirror=O;exports.MiniRepl=be;exports.cx=T;exports.flash=K;exports.useHighlighting=U;exports.useKeydown=ve;exports.usePostMessage=J;exports.useStrudel=$; +"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react"),X=require("@uiw/react-codemirror"),p=require("@codemirror/view"),A=require("@codemirror/state"),Y=require("@codemirror/lang-javascript"),o=require("@lezer/highlight"),Z=require("@uiw/codemirror-themes"),ee=require("react-hook-inview"),B=require("@strudel.cycles/webaudio"),te=require("@strudel.cycles/core"),re=require("@strudel.cycles/transpiler"),I=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},n=I(t),oe=I(X),ae=Z.createTheme({theme:"dark",settings:{background:"#222",foreground:"#75baff",caret:"#ffcc00",selection:"rgba(128, 203, 196, 0.5)",selectionMatch:"#036dd626",lineHighlight:"#00000050",gutterBackground:"transparent",gutterForeground:"#8a919966"},styles:[{tag:o.tags.keyword,color:"#c792ea"},{tag:o.tags.operator,color:"#89ddff"},{tag:o.tags.special(o.tags.variableName),color:"#eeffff"},{tag:o.tags.typeName,color:"#c3e88d"},{tag:o.tags.atom,color:"#f78c6c"},{tag:o.tags.number,color:"#c3e88d"},{tag:o.tags.definition(o.tags.variableName),color:"#82aaff"},{tag:o.tags.string,color:"#c3e88d"},{tag:o.tags.special(o.tags.string),color:"#c3e88d"},{tag:o.tags.comment,color:"#7d8799"},{tag:o.tags.variableName,color:"#c792ea"},{tag:o.tags.tagName,color:"#c3e88d"},{tag:o.tags.bracket,color:"#525154"},{tag:o.tags.meta,color:"#ffcb6b"},{tag:o.tags.attributeName,color:"#c792ea"},{tag:o.tags.propertyName,color:"#c792ea"},{tag:o.tags.className,color:"#decb6b"},{tag:o.tags.invalid,color:"#ffffff"}]});const L=A.StateEffect.define(),ne=A.StateField.define({create(){return p.Decoration.none},update(e,r){try{for(let a of r.effects)if(a.is(L))if(a.value){const s=p.Decoration.mark({attributes:{style:"background-color: #FFCA2880"}});e=p.Decoration.set([s.range(0,r.newDoc.length)])}else e=p.Decoration.set([]);return e}catch(a){return console.warn("flash error",a),e}},provide:e=>p.EditorView.decorations.from(e)}),K=e=>{e.dispatch({effects:L.of(!0)}),setTimeout(()=>{e.dispatch({effects:L.of(!1)})},200)},x=A.StateEffect.define(),se=A.StateField.define({create(){return p.Decoration.none},update(e,r){try{for(let a of r.effects)if(a.is(x)){const s=a.value.map(c=>(c.context.locations||[]).map(({start:f,end:d})=>{const g=c.context.color||"#FFCA28";let i=r.newDoc.line(f.line).from+f.column,l=r.newDoc.line(d.line).from+d.column;const m=r.newDoc.length;return i>m||l>m?void 0:p.Decoration.mark({attributes:{style:`outline: 1.5px solid ${g};`}}).range(i,l)})).flat().filter(Boolean)||[];e=p.Decoration.set(s,!0)}return e}catch{return p.Decoration.set([])}},provide:e=>p.EditorView.decorations.from(e)}),ce=[Y.javascript(),ae,se,ne];function O({value:e,onChange:r,onViewChanged:a,onSelectionChange:s,options:c,editorDidMount:f}){const d=t.useCallback(l=>{r?.(l)},[r]),g=t.useCallback(l=>{a?.(l)},[a]),i=t.useCallback(l=>{l.selectionSet&&s&&s?.(l.state.selection)},[s]);return n.default.createElement(n.default.Fragment,null,n.default.createElement(oe.default,{value:e,onChange:d,onCreateEditor:g,onUpdate:i,extensions:ce}))}function T(...e){return e.filter(Boolean).join(" ")}function U({view:e,pattern:r,active:a,getTime:s}){const c=t.useRef([]),f=t.useRef();t.useEffect(()=>{if(e)if(r&&a){let d=requestAnimationFrame(function g(){try{const i=s(),m=[Math.max(f.current||i,i-1/10,0),i+1/60];f.current=m[1],c.current=c.current.filter(h=>h.whole.end>i);const v=r.queryArc(...m).filter(h=>h.hasOnset());c.current=c.current.concat(v),e.dispatch({effects:x.of(c.current)})}catch{e.dispatch({effects:x.of([])})}d=requestAnimationFrame(g)});return()=>{cancelAnimationFrame(d)}}else c.current=[],e.dispatch({effects:x.of([])})},[r,a,e])}const ie="_container_3i85k_1",le="_header_3i85k_5",ue="_buttons_3i85k_9",de="_button_3i85k_9",fe="_buttonDisabled_3i85k_17",ge="_error_3i85k_21",me="_body_3i85k_25",E={container:ie,header:le,buttons:ue,button:de,buttonDisabled:fe,error:ge,body:me};function j({type:e}){return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"sc-h-5 sc-w-5",viewBox:"0 0 20 20",fill:"currentColor"},{refresh:n.default.createElement("path",{fillRule:"evenodd",d:"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z",clipRule:"evenodd"}),play:n.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z",clipRule:"evenodd"}),pause:n.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}[e])}function J(e){return t.useEffect(()=>(window.addEventListener("message",e),()=>window.removeEventListener("message",e)),[e]),t.useCallback(r=>window.postMessage(r,"*"),[])}function $({defaultOutput:e,interval:r,getTime:a,evalOnMount:s=!1,initialCode:c="",autolink:f=!1,beforeEval:d,afterEval:g,onEvalError:i,onToggle:l}){const m=t.useMemo(()=>he(),[]),[v,h]=t.useState(),[_,C]=t.useState(),[b,y]=t.useState(c),[M,P]=t.useState(),[k,D]=t.useState(),[S,N]=t.useState(!1),w=b!==M,{scheduler:R,evaluate:H,start:G,stop:z,pause:Q}=t.useMemo(()=>te.repl({interval:r,defaultOutput:e,onSchedulerError:h,onEvalError:u=>{C(u),i?.(u)},getTime:a,transpiler:re.transpiler,beforeEval:({code:u})=>{y(u),d?.()},afterEval:({pattern:u,code:F})=>{P(F),D(u),C(),h(),f&&(window.location.hash="#"+encodeURIComponent(btoa(F))),g?.()},onToggle:u=>{N(u),l?.(u)}}),[e,r,a]),W=J(({data:{from:u,type:F}})=>{F==="start"&&u!==m&&z()}),q=t.useCallback(async(u=!0)=>{await H(b,u),W({type:"start",from:m})},[H,b]),V=t.useRef();return t.useEffect(()=>{!V.current&&s&&b&&(V.current=!0,q())},[q,s,b]),t.useEffect(()=>()=>{R.stop()},[R]),{code:b,setCode:y,error:v||_,schedulerError:v,scheduler:R,evalError:_,evaluate:H,activateCode:q,activeCode:M,isDirty:w,pattern:k,started:S,start:G,stop:z,pause:Q,togglePlay:async()=>{S?R.pause():await q()}}}function he(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}const pe=()=>B.getAudioContext().currentTime;function be({tune:e,hideOutsideView:r=!1,init:a,enableKeyboard:s}){const{code:c,setCode:f,evaluate:d,activateCode:g,error:i,isDirty:l,activeCode:m,pattern:v,started:h,scheduler:_,togglePlay:C,stop:b}=$({initialCode:e,defaultOutput:B.webaudioOutput,getTime:pe}),[y,M]=t.useState(),[P,k]=ee.useInView({threshold:.01}),D=t.useRef(),S=t.useMemo(()=>((k||!r)&&(D.current=!0),k||D.current),[k,r]);return U({view:y,pattern:v,active:h&&!m?.includes("strudel disable-highlighting"),getTime:()=>_.getPhase()}),t.useLayoutEffect(()=>{if(s){const N=async w=>{(w.ctrlKey||w.altKey)&&(w.code==="Enter"?(w.preventDefault(),K(y),await g()):w.code==="Period"&&(b(),w.preventDefault()))};return window.addEventListener("keydown",N,!0),()=>window.removeEventListener("keydown",N,!0)}},[s,v,c,d,b,y]),n.default.createElement("div",{className:E.container,ref:P},n.default.createElement("div",{className:E.header},n.default.createElement("div",{className:E.buttons},n.default.createElement("button",{className:T(E.button,h?"sc-animate-pulse":""),onClick:()=>C()},n.default.createElement(j,{type:h?"pause":"play"})),n.default.createElement("button",{className:T(l?E.button:E.buttonDisabled),onClick:()=>g()},n.default.createElement(j,{type:"refresh"}))),i&&n.default.createElement("div",{className:E.error},i.message)),n.default.createElement("div",{className:E.body},S&&n.default.createElement(O,{value:c,onChange:f,onViewChanged:M})))}const ve=e=>t.useLayoutEffect(()=>(window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)),[e]);exports.CodeMirror=O;exports.MiniRepl=be;exports.cx=T;exports.flash=K;exports.useHighlighting=U;exports.useKeydown=ve;exports.usePostMessage=J;exports.useStrudel=$; diff --git a/packages/react/dist/index.es.js b/packages/react/dist/index.es.js index 499895c35..5a00ac91f 100644 --- a/packages/react/dist/index.es.js +++ b/packages/react/dist/index.es.js @@ -74,11 +74,11 @@ const B = $.define(), se = G.define({ for (let o of t.effects) if (o.is(z)) { const a = o.value.map( - (s) => (s.context.locations || []).map(({ start: f, end: d }) => { - const u = s.context.color || "#FFCA28"; - let c = t.newDoc.line(f.line).from + f.column, i = t.newDoc.line(d.line).from + d.column; + (s) => (s.context.locations || []).map(({ start: u, end: d }) => { + const f = s.context.color || "#FFCA28"; + let c = t.newDoc.line(u.line).from + u.column, i = t.newDoc.line(d.line).from + d.column; const m = t.newDoc.length; - return c > m || i > m ? void 0 : E.mark({ attributes: { style: `outline: 1.5px solid ${u};` } }).range(c, i); + return c > m || i > m ? void 0 : E.mark({ attributes: { style: `outline: 1.5px solid ${f};` } }).range(c, i); }) ).flat().filter(Boolean) || []; e = E.set(a, !0); @@ -90,13 +90,13 @@ const B = $.define(), se = G.define({ }, provide: (e) => U.decorations.from(e) }), le = [Y(), ae, ie, se]; -function de({ value: e, onChange: t, onViewChanged: o, onSelectionChange: a, options: s, editorDidMount: f }) { +function de({ value: e, onChange: t, onViewChanged: o, onSelectionChange: a, options: s, editorDidMount: u }) { const d = _( (i) => { t?.(i); }, [t] - ), u = _( + ), f = _( (i) => { o?.(i); }, @@ -110,7 +110,7 @@ function de({ value: e, onChange: t, onViewChanged: o, onSelectionChange: a, opt return /* @__PURE__ */ n.createElement(n.Fragment, null, /* @__PURE__ */ n.createElement(X, { value: e, onChange: d, - onCreateEditor: u, + onCreateEditor: f, onUpdate: c, extensions: le })); @@ -119,21 +119,21 @@ function K(...e) { return e.filter(Boolean).join(" "); } function ue({ view: e, pattern: t, active: o, getTime: a }) { - const s = H([]), f = H(); + const s = H([]), u = H(); L(() => { if (e) if (t && o) { - let u = function() { + let d = requestAnimationFrame(function f() { try { - const c = a(), m = [Math.max(f.current || c, c - 1 / 10, 0), c + 1 / 60]; - f.current = m[1], s.current = s.current.filter((g) => g.whole.end > c); + const c = a(), m = [Math.max(u.current || c, c - 1 / 10, 0), c + 1 / 60]; + u.current = m[1], s.current = s.current.filter((g) => g.whole.end > c); const h = t.queryArc(...m).filter((g) => g.hasOnset()); s.current = s.current.concat(h), e.dispatch({ effects: z.of(s.current) }); } catch { e.dispatch({ effects: z.of([]) }); } - d = requestAnimationFrame(u); - }, d = requestAnimationFrame(u); + d = requestAnimationFrame(f); + }); return () => { cancelAnimationFrame(d); }; @@ -183,9 +183,9 @@ function we({ getTime: o, evalOnMount: a = !1, initialCode: s = "", - autolink: f = !1, + autolink: u = !1, beforeEval: d, - afterEval: u, + afterEval: f, onEvalError: c, onToggle: i }) { @@ -203,7 +203,7 @@ function we({ y(l), d?.(); }, afterEval: ({ pattern: l, code: P }) => { - S(P), D(l), N(), g(), f && (window.location.hash = "#" + encodeURIComponent(btoa(P))), u?.(); + S(P), D(l), N(), g(), u && (window.location.hash = "#" + encodeURIComponent(btoa(P))), f?.(); }, onToggle: (l) => { x(l), i?.(l); @@ -250,9 +250,9 @@ const ke = () => re().currentTime; function Se({ tune: e, hideOutsideView: t = !1, init: o, enableKeyboard: a }) { const { code: s, - setCode: f, + setCode: u, evaluate: d, - activateCode: u, + activateCode: f, error: c, isDirty: i, activeCode: m, @@ -276,7 +276,7 @@ function Se({ tune: e, hideOutsideView: t = !1, init: o, enableKeyboard: a }) { }), j(() => { if (a) { const x = async (b) => { - (b.ctrlKey || b.altKey) && (b.code === "Enter" ? (b.preventDefault(), ce(y), await u()) : b.code === "Period" && (p(), b.preventDefault())); + (b.ctrlKey || b.altKey) && (b.code === "Enter" ? (b.preventDefault(), ce(y), await f()) : b.code === "Period" && (p(), b.preventDefault())); }; return window.addEventListener("keydown", x, !0), () => window.removeEventListener("keydown", x, !0); } @@ -294,7 +294,7 @@ function Se({ tune: e, hideOutsideView: t = !1, init: o, enableKeyboard: a }) { type: g ? "pause" : "play" })), /* @__PURE__ */ n.createElement("button", { className: K(i ? v.button : v.buttonDisabled), - onClick: () => u() + onClick: () => f() }, /* @__PURE__ */ n.createElement(O, { type: "refresh" }))), c && /* @__PURE__ */ n.createElement("div", { @@ -303,7 +303,7 @@ function Se({ tune: e, hideOutsideView: t = !1, init: o, enableKeyboard: a }) { className: v.body }, F && /* @__PURE__ */ n.createElement(de, { value: s, - onChange: f, + onChange: u, onViewChanged: M }))); } diff --git a/packages/react/src/hooks/useHighlighting.mjs b/packages/react/src/hooks/useHighlighting.mjs index c9539044e..9aac40597 100644 --- a/packages/react/src/hooks/useHighlighting.mjs +++ b/packages/react/src/hooks/useHighlighting.mjs @@ -7,9 +7,7 @@ function useHighlighting({ view, pattern, active, getTime }) { useEffect(() => { if (view) { if (pattern && active) { - let frame = requestAnimationFrame(updateHighlights); - - function updateHighlights() { + let frame = requestAnimationFrame(function updateHighlights() { try { const audioTime = getTime(); // force min framerate of 10 fps => fixes crash on tab refocus, where lastEnd could be far away @@ -25,8 +23,7 @@ function useHighlighting({ view, pattern, active, getTime }) { view.dispatch({ effects: setHighlights.of([]) }); } frame = requestAnimationFrame(updateHighlights); - } - + }); return () => { cancelAnimationFrame(frame); }; diff --git a/packages/serial/serial.mjs b/packages/serial/serial.mjs index 4452195dd..27f2bb589 100644 --- a/packages/serial/serial.mjs +++ b/packages/serial/serial.mjs @@ -20,6 +20,7 @@ export async function getWriter(br = 38400) { if ('serial' in navigator) { const port = await navigator.serial.requestPort(); await port.open({ baudRate: br }); + // eslint-disable-next-line no-undef const textEncoder = new TextEncoderStream(); const writableStreamClosed = textEncoder.readable.pipeTo(port.writable); const writer = textEncoder.writable.getWriter(); diff --git a/packages/soundfonts/fontloader.mjs b/packages/soundfonts/fontloader.mjs index 341dfde7b..9f88b0fef 100644 --- a/packages/soundfonts/fontloader.mjs +++ b/packages/soundfonts/fontloader.mjs @@ -1,3 +1,5 @@ +import { toMidi } from '@strudel.cycles/core'; + let loadCache = {}; async function loadFont(name) { if (loadCache[name]) { diff --git a/packages/soundfonts/sfumato.mjs b/packages/soundfonts/sfumato.mjs index 1cca2ffe5..b4037c65f 100644 --- a/packages/soundfonts/sfumato.mjs +++ b/packages/soundfonts/sfumato.mjs @@ -1,4 +1,5 @@ -import { Pattern } from '@strudel.cycles/core'; +import { Pattern, getPlayableNoteValue, toMidi } from '@strudel.cycles/core'; +import { getAudioContext } from '@strudel.cycles/webaudio'; import { loadSoundfont as _loadSoundfont, startPresetNote } from 'sfumato'; Pattern.prototype.soundfont = function (sf, n = 0) { diff --git a/packages/tonal/voicings.mjs b/packages/tonal/voicings.mjs index 70a2f0e13..b9a9a3a6d 100644 --- a/packages/tonal/voicings.mjs +++ b/packages/tonal/voicings.mjs @@ -59,7 +59,7 @@ Pattern.prototype.voicings = function (range) { Pattern.prototype._rootNotes = function (octave = 2) { return this.fmap((value) => { - const [_, root] = value.match(/^([a-gA-G][b#]?).*$/); + const root = value.match(/^([a-gA-G][b#]?).*$/)[1]; return root + octave; }); }; diff --git a/packages/webaudio/sampler.mjs b/packages/webaudio/sampler.mjs index 59dffb7c5..094af87f9 100644 --- a/packages/webaudio/sampler.mjs +++ b/packages/webaudio/sampler.mjs @@ -1,4 +1,5 @@ -import { logger } from '@strudel.cycles/core'; +import { logger, toMidi } from '@strudel.cycles/core'; +import { getAudioContext } from './index.mjs'; const bufferCache = {}; // string: Promise const loadCache = {}; // string: Promise diff --git a/tutorial/render.js b/tutorial/render.js index 30dbab3fe..df88728f5 100644 --- a/tutorial/render.js +++ b/tutorial/render.js @@ -18,7 +18,7 @@ function renderAsMDX(name) { } return `### ${item.longname} -${item.description.replaceAll(/\{\@link ([a-zA-Z]+)?\#?([a-zA-Z]*)\}/g, (_, a, b) => { +${item.description.replaceAll(/\{@link ([a-zA-Z]+)?#?([a-zA-Z]*)\}/g, (_, a, b) => { // console.log(_, 'a', a, 'b', b); return `${a}${b ? `#${b}` : ''}`; })} From 611c429912ad8987fc4dabb43454adf08bf1a86c Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 24 Nov 2022 15:31:47 +0100 Subject: [PATCH 03/31] lint before test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 98651de1e..263e11c71 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Port of tidalcycles to javascript", "scripts": { "pretest": "cd tutorial && npm run jsdoc-json", - "test": "vitest run --version && npm run lint", + "test": "npm run lint && vitest run --version", "test-ui": "vitest --ui", "test-coverage": "vitest --coverage", "bootstrap": "lerna bootstrap", From 4e3e533e1337d7f0ad82b9a39418144fa68f4663 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 24 Nov 2022 20:13:04 +0100 Subject: [PATCH 04/31] repl: optional eval callbacks --- packages/core/repl.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index 7cb4b522b..6bef319b1 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -40,11 +40,11 @@ export function repl({ throw new Error('no code to evaluate'); } try { - beforeEval({ code }); + beforeEval?.({ code }); const { pattern } = await _evaluate(code, transpiler); logger(`[eval] code updated`); scheduler.setPattern(pattern, autostart); - afterEval({ code, pattern }); + afterEval?.({ code, pattern }); return pattern; } catch (err) { // console.warn(`[repl] eval error: ${err.message}`); From ac2aa7f288feb52146f305e7ddd63a238d8e08c0 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 28 Nov 2022 20:48:52 +0100 Subject: [PATCH 05/31] add csound minimal example --- packages/csound/example/.gitignore | 24 + packages/csound/example/counter.js | 9 + packages/csound/example/index.html | 13 + packages/csound/example/javascript.svg | 1 + packages/csound/example/main.js | 27 + packages/csound/example/package-lock.json | 3518 +++++++++++++++++++++ packages/csound/example/package.json | 17 + packages/csound/example/public/vite.svg | 1 + packages/csound/example/style.css | 97 + packages/csound/example/tutorial1.csd | 44 + packages/csound/package.json | 32 + 11 files changed, 3783 insertions(+) create mode 100644 packages/csound/example/.gitignore create mode 100644 packages/csound/example/counter.js create mode 100644 packages/csound/example/index.html create mode 100644 packages/csound/example/javascript.svg create mode 100644 packages/csound/example/main.js create mode 100644 packages/csound/example/package-lock.json create mode 100644 packages/csound/example/package.json create mode 100644 packages/csound/example/public/vite.svg create mode 100644 packages/csound/example/style.css create mode 100644 packages/csound/example/tutorial1.csd create mode 100644 packages/csound/package.json diff --git a/packages/csound/example/.gitignore b/packages/csound/example/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/packages/csound/example/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/csound/example/counter.js b/packages/csound/example/counter.js new file mode 100644 index 000000000..881e2d7ad --- /dev/null +++ b/packages/csound/example/counter.js @@ -0,0 +1,9 @@ +export function setupCounter(element) { + let counter = 0 + const setCounter = (count) => { + counter = count + element.innerHTML = `count is ${counter}` + } + element.addEventListener('click', () => setCounter(counter + 1)) + setCounter(0) +} diff --git a/packages/csound/example/index.html b/packages/csound/example/index.html new file mode 100644 index 000000000..2ad7b1ab9 --- /dev/null +++ b/packages/csound/example/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/packages/csound/example/javascript.svg b/packages/csound/example/javascript.svg new file mode 100644 index 000000000..f9abb2b72 --- /dev/null +++ b/packages/csound/example/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/csound/example/main.js b/packages/csound/example/main.js new file mode 100644 index 000000000..1cc550008 --- /dev/null +++ b/packages/csound/example/main.js @@ -0,0 +1,27 @@ +import { Csound } from '@csound/browser'; +import './style.css'; +import csd from './tutorial1.csd?raw'; + +document.querySelector('#app').innerHTML = ` +
+ +
+`; + +let csound = null; +const startCsound = async () => { + if (csound) { + return; + } + console.log('Starting Csound...'); + csound = await Csound(); + console.log(csound); + window.csound = csound; + + await csound.compileCsdText(csd); + await csound.start(); + + document.querySelector('#startButton').remove(); +}; + +document.querySelector('#startButton').addEventListener('click', startCsound); diff --git a/packages/csound/example/package-lock.json b/packages/csound/example/package-lock.json new file mode 100644 index 000000000..a54dd865e --- /dev/null +++ b/packages/csound/example/package-lock.json @@ -0,0 +1,3518 @@ +{ + "name": "example", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "example", + "version": "0.0.0", + "dependencies": { + "@csound/browser": "^6.18.3" + }, + "devDependencies": { + "vite": "^3.2.3" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dependencies": { + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csound/browser": { + "version": "6.18.3", + "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", + "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", + "dependencies": { + "comlink": "^4.3.1", + "eslint-plugin-n": "^15.5.1", + "eventemitter3": "^4.0.7", + "google-closure-compiler": "^20221102.0.1", + "google-closure-library": "^20221102.0.0", + "path-browserify": "^1.0.1", + "rambda": "^7.4.0", + "rimraf": "^3.0.2", + "standardized-audio-context": "^25.3.35", + "text-encoding-shim": "^1.0.5", + "unmute-ios-audio": "^3.3.0", + "web-midi-api": "^2.1.8" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.15.tgz", + "integrity": "sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.15.tgz", + "integrity": "sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "peer": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webmidi": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", + "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "peer": 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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "peer": true + }, + "node_modules/automation-events": { + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", + "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=12.20.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "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==", + "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==" + }, + "node_modules/comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "peer": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.15.tgz", + "integrity": "sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.15", + "@esbuild/linux-loong64": "0.15.15", + "esbuild-android-64": "0.15.15", + "esbuild-android-arm64": "0.15.15", + "esbuild-darwin-64": "0.15.15", + "esbuild-darwin-arm64": "0.15.15", + "esbuild-freebsd-64": "0.15.15", + "esbuild-freebsd-arm64": "0.15.15", + "esbuild-linux-32": "0.15.15", + "esbuild-linux-64": "0.15.15", + "esbuild-linux-arm": "0.15.15", + "esbuild-linux-arm64": "0.15.15", + "esbuild-linux-mips64le": "0.15.15", + "esbuild-linux-ppc64le": "0.15.15", + "esbuild-linux-riscv64": "0.15.15", + "esbuild-linux-s390x": "0.15.15", + "esbuild-netbsd-64": "0.15.15", + "esbuild-openbsd-64": "0.15.15", + "esbuild-sunos-64": "0.15.15", + "esbuild-windows-32": "0.15.15", + "esbuild-windows-64": "0.15.15", + "esbuild-windows-arm64": "0.15.15" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.15.tgz", + "integrity": "sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.15.tgz", + "integrity": "sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.15.tgz", + "integrity": "sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.15.tgz", + "integrity": "sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.15.tgz", + "integrity": "sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.15.tgz", + "integrity": "sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.15.tgz", + "integrity": "sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.15.tgz", + "integrity": "sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.15.tgz", + "integrity": "sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.15.tgz", + "integrity": "sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.15.tgz", + "integrity": "sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.15.tgz", + "integrity": "sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.15.tgz", + "integrity": "sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.15.tgz", + "integrity": "sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.15.tgz", + "integrity": "sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.15.tgz", + "integrity": "sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.15.tgz", + "integrity": "sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.15.tgz", + "integrity": "sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.15.tgz", + "integrity": "sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.15.tgz", + "integrity": "sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "peer": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "peer": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "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==", + "peer": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "peer": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "peer": 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-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "peer": true + }, + "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==" + }, + "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==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-closure-compiler": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", + "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", + "dependencies": { + "chalk": "4.x", + "google-closure-compiler-java": "^20221102.0.1", + "minimist": "1.x", + "vinyl": "2.x", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "bin": { + "google-closure-compiler": "cli.js" + }, + "engines": { + "node": ">=10" + }, + "optionalDependencies": { + "google-closure-compiler-linux": "^20221102.0.1", + "google-closure-compiler-osx": "^20221102.0.1", + "google-closure-compiler-windows": "^20221102.0.1" + } + }, + "node_modules/google-closure-compiler-java": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", + "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" + }, + "node_modules/google-closure-compiler-linux": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", + "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", + "cpu": [ + "x32", + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/google-closure-compiler-osx": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", + "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", + "cpu": [ + "x32", + "x64", + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/google-closure-compiler-windows": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", + "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", + "cpu": [ + "x32", + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/google-closure-library": { + "version": "20221102.0.0", + "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", + "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "peer": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "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==" + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "node_modules/jazz-midi": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", + "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "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==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "peer": true + }, + "node_modules/jzz": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", + "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", + "dependencies": { + "@types/webmidi": "^2.0.6", + "jazz-midi": "^1.7.6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.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==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "peer": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "peer": 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==", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "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==", + "peer": 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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "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==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/rambda": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", + "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "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/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/standardized-audio-context": { + "version": "25.3.35", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", + "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "automation-events": "^4.0.24", + "tslib": "^2.4.1" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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==", + "peer": 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==", + "peer": 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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unmute-ios-audio": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", + "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/web-midi-api": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", + "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", + "dependencies": { + "jzz": "^1.5.4" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@csound/browser": { + "version": "6.18.3", + "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", + "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", + "requires": { + "comlink": "^4.3.1", + "eslint-plugin-n": "^15.5.1", + "eventemitter3": "^4.0.7", + "google-closure-compiler": "^20221102.0.1", + "google-closure-library": "^20221102.0.0", + "path-browserify": "^1.0.1", + "rambda": "^7.4.0", + "rimraf": "^3.0.2", + "standardized-audio-context": "^25.3.35", + "text-encoding-shim": "^1.0.5", + "unmute-ios-audio": "^3.3.0", + "web-midi-api": "^2.1.8" + } + }, + "@esbuild/android-arm": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.15.tgz", + "integrity": "sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.15.tgz", + "integrity": "sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==", + "dev": true, + "optional": true + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "peer": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "peer": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "peer": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "peer": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "peer": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "peer": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "peer": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/webmidi": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", + "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "peer": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peer": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "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==", + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "automation-events": { + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", + "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", + "requires": { + "@babel/runtime": "^7.20.1", + "tslib": "^2.4.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "requires": { + "semver": "^7.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==" + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "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==", + "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==" + }, + "comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "peer": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "esbuild": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.15.tgz", + "integrity": "sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.15", + "@esbuild/linux-loong64": "0.15.15", + "esbuild-android-64": "0.15.15", + "esbuild-android-arm64": "0.15.15", + "esbuild-darwin-64": "0.15.15", + "esbuild-darwin-arm64": "0.15.15", + "esbuild-freebsd-64": "0.15.15", + "esbuild-freebsd-arm64": "0.15.15", + "esbuild-linux-32": "0.15.15", + "esbuild-linux-64": "0.15.15", + "esbuild-linux-arm": "0.15.15", + "esbuild-linux-arm64": "0.15.15", + "esbuild-linux-mips64le": "0.15.15", + "esbuild-linux-ppc64le": "0.15.15", + "esbuild-linux-riscv64": "0.15.15", + "esbuild-linux-s390x": "0.15.15", + "esbuild-netbsd-64": "0.15.15", + "esbuild-openbsd-64": "0.15.15", + "esbuild-sunos-64": "0.15.15", + "esbuild-windows-32": "0.15.15", + "esbuild-windows-64": "0.15.15", + "esbuild-windows-arm64": "0.15.15" + } + }, + "esbuild-android-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.15.tgz", + "integrity": "sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.15.tgz", + "integrity": "sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.15.tgz", + "integrity": "sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.15.tgz", + "integrity": "sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.15.tgz", + "integrity": "sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.15.tgz", + "integrity": "sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.15.tgz", + "integrity": "sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.15.tgz", + "integrity": "sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.15.tgz", + "integrity": "sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.15.tgz", + "integrity": "sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.15.tgz", + "integrity": "sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.15.tgz", + "integrity": "sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.15.tgz", + "integrity": "sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.15.tgz", + "integrity": "sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.15.tgz", + "integrity": "sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.15.tgz", + "integrity": "sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.15.tgz", + "integrity": "sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.15.tgz", + "integrity": "sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.15.tgz", + "integrity": "sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.15.tgz", + "integrity": "sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==", + "dev": true, + "optional": 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==", + "peer": true + }, + "eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "peer": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "peer": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "peer": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "peer": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "peer": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "peer": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "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==", + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "peer": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "peer": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "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==", + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "peer": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "peer": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "google-closure-compiler": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", + "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", + "requires": { + "chalk": "4.x", + "google-closure-compiler-java": "^20221102.0.1", + "google-closure-compiler-linux": "^20221102.0.1", + "google-closure-compiler-osx": "^20221102.0.1", + "google-closure-compiler-windows": "^20221102.0.1", + "minimist": "1.x", + "vinyl": "2.x", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "google-closure-compiler-java": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", + "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" + }, + "google-closure-compiler-linux": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", + "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", + "optional": true + }, + "google-closure-compiler-osx": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", + "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", + "optional": true + }, + "google-closure-compiler-windows": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", + "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", + "optional": true + }, + "google-closure-library": { + "version": "20221102.0.0", + "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", + "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "peer": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "peer": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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==" + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "peer": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "peer": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "jazz-midi": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", + "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==" + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "peer": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "peer": true + }, + "jzz": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", + "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", + "requires": { + "@types/webmidi": "^2.0.6", + "jazz-midi": "^1.7.6" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "peer": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "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==", + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "peer": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": 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==", + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "peer": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "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==", + "peer": 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==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "peer": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "peer": true + }, + "rambda": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", + "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "peer": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "peer": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "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" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "peer": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "standardized-audio-context": { + "version": "25.3.35", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", + "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", + "requires": { + "@babel/runtime": "^7.20.1", + "automation-events": "^4.0.24", + "tslib": "^2.4.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": 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==", + "peer": 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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "peer": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true + }, + "unmute-ios-audio": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", + "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "requires": { + "source-map": "^0.5.1" + } + }, + "vite": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", + "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "web-midi-api": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", + "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", + "requires": { + "jzz": "^1.5.4" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "peer": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "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==", + "peer": true + } + } +} diff --git a/packages/csound/example/package.json b/packages/csound/example/package.json new file mode 100644 index 000000000..87c2cb7a7 --- /dev/null +++ b/packages/csound/example/package.json @@ -0,0 +1,17 @@ +{ + "name": "example", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^3.2.3" + }, + "dependencies": { + "@csound/browser": "^6.18.3" + } +} diff --git a/packages/csound/example/public/vite.svg b/packages/csound/example/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/csound/example/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/csound/example/style.css b/packages/csound/example/style.css new file mode 100644 index 000000000..12320801d --- /dev/null +++ b/packages/csound/example/style.css @@ -0,0 +1,97 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #f7df1eaa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/csound/example/tutorial1.csd b/packages/csound/example/tutorial1.csd new file mode 100644 index 000000000..df789053c --- /dev/null +++ b/packages/csound/example/tutorial1.csd @@ -0,0 +1,44 @@ +;; Author: Steven Yi + + +-o dac --port=10000 + + +sr=48000 +ksmps=64 +nchnls=2 +0dbfs=1 + +instr 1 + ioct = octcps(p4) + kpwm = oscili(.1, 5) + asig = vco2(p5, p4, 4, .5 + kpwm) + asig += vco2(p5, p4 * 2) + + idepth = 3 + acut = transegr:a(0, .002, 0, idepth, .5, -4.2, 0.001, .5, -4.2, 0) + asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.5) + + asig *= linsegr:a(1, p3, 1, .5, 0) + + out(asig, asig) + +endin + +instr Main + inotes[] fillarray 60, 67, 63, 65, 62 + ioct[] fillarray 0,1,0,0,1 + inote = inotes[p4 % 37 % 11 % 5] + 12 * ioct[p4 % 41 % 17 % 5] + schedule(1, 0, .25, cpsmidinn(inote), 0.25) + + if(p4 % 64 % 37 % 17 % 11 == 0 && inote != 74 && inote != 62) then + schedule(1, 0, .5, cpsmidinn(inote + 7), 0.125) + endif + + schedule(p1, .25, .25, p4 + 1) +endin + +schedule("Main", 0, 0, 0) + + + \ No newline at end of file diff --git a/packages/csound/package.json b/packages/csound/package.json new file mode 100644 index 000000000..565bc6052 --- /dev/null +++ b/packages/csound/package.json @@ -0,0 +1,32 @@ +{ + "name": "@strudel.cycles/csound", + "version": "0.3.0", + "description": "csound bindings for strudel", + "main": "index.mjs", + "scripts": { + "test": "echo \"No tests present.\" && exit 0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tidalcycles/strudel.git" + }, + "keywords": [ + "tidalcycles", + "strudel", + "pattern", + "livecoding", + "algorave" + ], + "author": "Felix Roos ", + "contributors": [ + "Alex McLean " + ], + "license": "AGPL-3.0-or-later", + "bugs": { + "url": "https://github.com/tidalcycles/strudel/issues" + }, + "homepage": "https://github.com/tidalcycles/strudel#readme", + "dependencies": { + "@csound/browser": "^6.18.3" + } +} From e6210204741c58752982d5bf42cd5fc5359c94ab Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 28 Nov 2022 21:33:17 +0100 Subject: [PATCH 06/31] continue tutorial --- packages/csound/example/README.md | 7 +++ packages/csound/example/main.js | 26 +++++++++- packages/csound/example/test.orc | 1 + packages/csound/example/tutorial2.csd | 68 +++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 packages/csound/example/README.md create mode 100644 packages/csound/example/test.orc create mode 100644 packages/csound/example/tutorial2.csd diff --git a/packages/csound/example/README.md b/packages/csound/example/README.md new file mode 100644 index 000000000..9a52f5f70 --- /dev/null +++ b/packages/csound/example/README.md @@ -0,0 +1,7 @@ +# README + +this project is based on the webaudio csound tutorial: + + + +(currently came till step 4) diff --git a/packages/csound/example/main.js b/packages/csound/example/main.js index 1cc550008..e94d78820 100644 --- a/packages/csound/example/main.js +++ b/packages/csound/example/main.js @@ -1,6 +1,7 @@ import { Csound } from '@csound/browser'; import './style.css'; -import csd from './tutorial1.csd?raw'; +// import csd from './tutorial1.csd?raw'; +import csd from './tutorial2.csd?raw'; document.querySelector('#app').innerHTML = `
@@ -17,11 +18,32 @@ const startCsound = async () => { csound = await Csound(); console.log(csound); window.csound = csound; - + await csound.setOption('-m0'); await csound.compileCsdText(csd); + await csound.setControlChannel('main.note.amp', -12); await csound.start(); document.querySelector('#startButton').remove(); + createPerformanceUI(csound); +}; +const createPerformanceUI = (csound) => { + document.querySelector('#app').innerHTML = ` +
+ + +
+ `; + + document.querySelector('#flourish').addEventListener('click', async () => { + console.log('flourish..'); + // await csound.readScore(`i "Flourish" 0 0 0`); + await csound.evalCode(` + schedule("Flourish", next_time(.25), 0, 0) + `); + }); + document.querySelector('#ampSlider').addEventListener('input', async (evt) => { + await csound.setControlChannel('main.note.amp', evt.target.value); + }); }; document.querySelector('#startButton').addEventListener('click', startCsound); diff --git a/packages/csound/example/test.orc b/packages/csound/example/test.orc new file mode 100644 index 000000000..eb51791b1 --- /dev/null +++ b/packages/csound/example/test.orc @@ -0,0 +1 @@ +schedule("Flourish", 0, 0, 0) \ No newline at end of file diff --git a/packages/csound/example/tutorial2.csd b/packages/csound/example/tutorial2.csd new file mode 100644 index 000000000..bb853da3f --- /dev/null +++ b/packages/csound/example/tutorial2.csd @@ -0,0 +1,68 @@ +;; Author: Steven Yi + + +-o dac --port=10000 + + +sr=48000 +ksmps=64 +nchnls=2 +0dbfs=1 + +instr 1 + ioct = octcps(p4) + kpwm = oscili(.1, 5) + asig = vco2(p5, p4, 4, .5 + kpwm) + asig += vco2(p5, p4 * 2) + + idepth = 3 + acut = transegr:a(0, .002, 0, idepth, .5, -4.2, 0.001, .5, -4.2, 0) + asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.5) + + asig *= linsegr:a(1, p3, 1, .5, 0) + + out(asig, asig) + +endin + +opcode next_time, i, i + inext xin + + itime = times:i() + iticks = round(itime / inext) + iticks += 1 + + iout = (iticks * inext) - itime + xout iout +endop + +instr Flourish + inotes[] fillarray 72, 74, 75, 77, 79 + inote = inotes[floor(rnd(5))] + + schedule(1, 0, .25, cpsmidinn(inote), ampdbfs(-12 + p4 * .5)) + + if(p4 > -60) then + schedule(p1, next_time(.125), 0, p4 - 1) + endif +endin + +instr Main + iamp = ampdbfs(chnget:i("main.note.amp")) + inotes[] fillarray 60, 67, 63, 65, 62 + ioct[] fillarray 0,1,0,0,1 + inote = inotes[p4 % 37 % 11 % 5] + 12 * ioct[p4 % 41 % 17 % 5] + schedule(1, 0, .25, cpsmidinn(inote), iamp) + + if(p4 % 64 % 37 % 17 % 11 == 0 && inote != 74 && inote != 62) then + schedule(1, 0, .5, cpsmidinn(inote + 7), iamp / 2) + endif + + schedule(p1, next_time(.25), .25, p4 + 1) +endin + + +schedule("Main", 0, 0, 0) + + + \ No newline at end of file From afe17a507eb18f68578e58b7b26a703d24fb1c94 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 28 Nov 2022 23:00:15 +0100 Subject: [PATCH 07/31] update tonal: not working... --- package-lock.json | 496 ++++++++++++++++++------------------ packages/tonal/package.json | 2 +- 2 files changed, 249 insertions(+), 249 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01a31dbbe..4f0aee4ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2150,202 +2150,202 @@ "link": true }, "node_modules/@tonaljs/abc-notation": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.6.5.tgz", - "integrity": "sha512-1S0Jnx0NfDLgyhkQOMEHqOacELL6RUdPcWWUP+nAnsOsb9owvB9RKYLSzp5odd16FVUR7U8c/JLc2yxIRvSeJw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.0.tgz", + "integrity": "sha512-hYdmq+kugwHRQdK2hLyd19Abet47sNcte8JByukzxRm0A3jlCWG6jkD/hvnej7m+x4yWk7vB1KlOFQemKz7N/A==", "dependencies": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/array": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.5.tgz", - "integrity": "sha512-7A3DbBQ+qIQ134FqE518b4tJ8V2a15Sn303JjHzgnqZqKrNh/s3wqwkL60F7LKcd09tcp+vIKQP/MYt4xMcRAA==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.11.tgz", + "integrity": "sha512-r4frzNDC1RjmA48Z3QbuFHjABOLq0U3TzLz+ipEx1y9HtGjLpvZ/Lcl16RhH5a6W/66MS9kmrXstBezTdPXSMw==", "dependencies": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/chord": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.6.5.tgz", - "integrity": "sha512-Pjdel4aDVv4kcx9PW6Qozt5BB9nAt13AOExfzKztpgPmlBSy0SKHse7Jp1cA4MGAuLHU8dzVssTFYpCskEFw3w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.0.tgz", + "integrity": "sha512-RgJFsDmWE2KKFzIJmwkL7s8LFGfhASkbO3y/30KdWumRR4MD3v0V8xhFeq6c5TTnPLrXorEjBpwCcCdScj0/QA==", "dependencies": { - "@tonaljs/chord-detect": "^4.6.5", - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/chord-detect": "^4.7.0", + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "node_modules/@tonaljs/chord-detect": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.6.5.tgz", - "integrity": "sha512-4xu53UP4kNTfdTNpAAVijhXcQ+ypJqmeMnsST08ZXSjoYfJUhmf5rWDWfz36KOTtNdCA6AbYgdtTYV/Xw0nd/w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.0.tgz", + "integrity": "sha512-cdSk/aXI+oLBYMkRqcPaw4LWNjVOZk3YTj6EY6saFNutvVlADu9VguzEuSMyV+mH7xlrbVdrOEjmB3n/dIBfaA==", "dependencies": { - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "node_modules/@tonaljs/chord-type": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.6.5.tgz", - "integrity": "sha512-Ol4DDopqpZCF9odosO2i8I+plud3Ul7VWJGNvL+PPCf4Qnwuz87q3aJQDLNoRUz4VyW0u66mq3LyVh6A8kb6Ug==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.0.tgz", + "integrity": "sha512-EgBKNffekZd6T12qSXOpiCazCmo3WkXtKSs6Qby5dEODPCKKjHwEollOdEAB6Qk9FzTv3/2JjbOc7TcjI+gYTQ==", "dependencies": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "node_modules/@tonaljs/collection": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.6.2.tgz", - "integrity": "sha512-bfPCotLJNB/tG1NrdbsQPLDKZB5jlMs7uPQ6RYKiNkaena3345ZKkbCGl5pj6YTXeDm/oblXiSbFAn7SlLRZdQ==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.0.tgz", + "integrity": "sha512-483PlVCyRfJWPAGNjpNLK2xicsH4oUn4Aue3Taa479M0syxDvvIIZkp1v7Y5soBCZUPPGpeNTMp0w46NJD3AEQ==" }, "node_modules/@tonaljs/core": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.5.tgz", - "integrity": "sha512-t7Vx0+L3j/ubQj2AhI1H45D/K745np4DwJjJjXNi5FlGD+TL2wyw50dCwkHKGHsrLDqup1qqP6yN7LBpC6UwNg==" + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.11.tgz", + "integrity": "sha512-6mw/r286rVL/iMB1KBPoVBspcOEfBD/Fryr5lrLd2Gfw3r5nse3WaIvVsauTkTC3LtvlH7oGh5T3vOUREwT0Hw==" }, "node_modules/@tonaljs/duration-value": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.6.2.tgz", - "integrity": "sha512-zrXT0L/qsDQ6251Mlqz54vcUbYUB9xb6uJhlxUzc6VauXOt8UOfrdTULubRTXTaBwWt1h8J5n9pXTQmNGzNI9A==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.0.tgz", + "integrity": "sha512-pVGvFRLOhG0pYQHfxaHWLWh5j/iZv30qaZVlQy87my19keC34JOsXZiqNHm8/HtfRlTBCwfq3ZlELcZoxWMRIA==" }, "node_modules/@tonaljs/interval": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.6.5.tgz", - "integrity": "sha512-7EDWhqZ7Nnh9oD4ahRYJHLc799ACGxYL4hDHwMKD16B2MgXqPvDeDvwQ31qUuO0ruGz8tMb3FDlgg0Hplowcbw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.0.tgz", + "integrity": "sha512-eIyFMJal36lEfbvQr/h4tGgCJyJTB0l41x8usMnrdtPqph+lo3ZQwk4HSXQ4eHLrb7eP5aYVXM5P5ZVXKN8z8w==", "dependencies": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/key": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.6.5.tgz", - "integrity": "sha512-ZdZWb5IStx6CLRmdEjawR66CqNpoW3EVUua2nVZBMdgnNebWxt4nvgH/ZNvGlCQGFZkUZzRhCfTwqsS6e3OmSA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.0.tgz", + "integrity": "sha512-cJqALas3Kogr7dvmyUfRAP+NmooMR5vvvHVfSRpekiceXRp0GDCV+0RiBvliyDoUNJ7yDa9K7aXwkkj4OTG3fw==", "dependencies": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/note": "^4.7.0", + "@tonaljs/roman-numeral": "^4.7.0" } }, "node_modules/@tonaljs/midi": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.6.5.tgz", - "integrity": "sha512-fJEZtNvV3M6yW1w+Tep60Rbv5PvuKszQcQzaJS1Loq5mHOKAzdmRfuJSpEpZBiaKEZ1WAMh1QKXYyOd+imyGQg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.0.tgz", + "integrity": "sha512-kfGurkPXrRMxs01q3YDKicu64vRvYzZLvllLrYT6dgvf4VkYp0rku3cHdArt5nKC5m4QcQh6sszZ7oR51XZaEA==", "dependencies": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/mode": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.6.5.tgz", - "integrity": "sha512-54iaON1rJ6q8fV5iuei8RGDxYhKBGGxZz3rjAxGSqdTUwBRVOdPqtzOkofThf9gRGYOMhzPp1BMbxbV+UCAPsA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.0.tgz", + "integrity": "sha512-xqVDYuz1kdfdLO88Rbv2X8rRrYDgQghbzY+iW5mXLJZoo/dl9dR4/5iAT6IvjXGfoCOPFWY3cqY3uv0jezWoDQ==", "dependencies": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/interval": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/interval": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "node_modules/@tonaljs/note": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.6.5.tgz", - "integrity": "sha512-Y0/eTzcReXzfcSLLG4k/dLLayqbvh/XYIkybG/QMDyR0BREuJq0Sw+NavbzhTtO0dadIQb/qfe0GFq4k2xS+NQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.0.tgz", + "integrity": "sha512-I1YTvz7WC8T08/7iWAjd2rM/h7EOx+9iUbQUMQKXAj5eHhpsqJy83tRMyXqE2ZTL4W2Z/k5OTy0XsL9zlxs7Hg==", "dependencies": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/midi": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/midi": "^4.7.0" } }, "node_modules/@tonaljs/pcset": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.6.5.tgz", - "integrity": "sha512-oWAKflP3cREnUfScqsBzg2LLKNevxSnpDtrq8CPtwOAsrAa8PjQG07NQfhqIiFMjPUdgkDiER3qVA1n8dDwAJA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.0.tgz", + "integrity": "sha512-sg2paiMxakuVAMGnKeCKsH7bpGiN4uYprgySxWvqmM5vis8ZoleAmFg1vozc452Eu0NTlRlUIjQZtDFMXYrMKA==", "dependencies": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/progression": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.6.5.tgz", - "integrity": "sha512-ijYEgMFQG4izHYUw5cRtBRNBuoYzmpGvb/tRiykhJNI6XIjekZEMiMsOMfb1u5q+EGvnVNXRmrluMRDIz2rmRw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.0.tgz", + "integrity": "sha512-8UBemUK2ksTcCohI/HJD5TEJm56ymoV18OWzO5fKmhPibMR473ccVhJhQdTawiIWUDjbJtIV4uj67VXDqikQbQ==", "dependencies": { - "@tonaljs/chord": "^4.6.5", - "@tonaljs/core": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5" + "@tonaljs/chord": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/roman-numeral": "^4.7.0" } }, "node_modules/@tonaljs/range": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.6.5.tgz", - "integrity": "sha512-99cOvVJ3l4X0UJuTSa6qE87JriREnnWIsi3xo1/n7RoqFxnfi8YPh4SfJJyysvHcT18X4EfcTNde9ancMBVu6A==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.0.tgz", + "integrity": "sha512-FE4x3rVbnhuWSekWskhV3A90GCWnfZsRNJSKo9lHc272ub8mDlv0psHL1I4nJzavBM4v+8dOCW4JpGpfOEkB6w==", "dependencies": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/midi": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/midi": "^4.7.0" } }, "node_modules/@tonaljs/roman-numeral": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.6.5.tgz", - "integrity": "sha512-bWYQNZWKmYDDcmbQQNwcWAHfTWanpzmvI0wplrMnGd4x0op5etwUEv+Yzjg0B1ef+E+zcU02Sl0WwRJhaDK3hg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.0.tgz", + "integrity": "sha512-PNe+G844SfYeLnlDabGU95WSB1V5tB8mrEm1i+nbKBQgWMQD+O3iKH7RyekkX5IS9oyEWxHL1lbEy1bGnCzgJA==", "dependencies": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "node_modules/@tonaljs/scale": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.6.5.tgz", - "integrity": "sha512-isYDamelOBtcd5bEnJ8QV0Js7jKRwZ0FlFVE/+bUN3wsyo9u6KLL5gMyfH9RKdx74m8lE13JXYTXgKqe+AOa4A==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.0.tgz", + "integrity": "sha512-8JD/l5rXFN2ySDiNf5m6TEgWHWEuQ9JL1h6bSdJu4+KPtCRSuWrM3t/vJ6jAP8jldGLW53rjIbLSI3dLCGePrQ==", "dependencies": { - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/note": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "node_modules/@tonaljs/scale-type": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.6.5.tgz", - "integrity": "sha512-rwcDOYf2UifjLJhmuQ8f8bJSeOCMDQJ1lB7lzlqdFxes03OeQhdOEfrT0nPtW8BhBEvq4GMM2NA6CLxX8MTwOQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.0.tgz", + "integrity": "sha512-GTEanCRqpRCc6AFlxGea1Ms8NEz8shWcNUet7EUDOKxApHUGrHg1IV+d/fypZzdP0fgXJfKa9cX0eNmU62NstA==", "dependencies": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "node_modules/@tonaljs/time-signature": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.6.2.tgz", - "integrity": "sha512-OlZY4gdLd21WpMeAI1nS9E9zWcYU6oAzh6ptAUndqmVnFIrIWIWKCkWapdFx8dWdqrX8jqya3m4T33wmeo7w5Q==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.0.tgz", + "integrity": "sha512-vADjarvb9V5dgbE3H0twLz5Ho0e/HDEi2m5k+6q2In9AWfGZ9ZIvaRWR8b8MKjrfmvsCN2HeZt+lA5cLPfVbag==" }, "node_modules/@tonaljs/tonal": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.5.tgz", - "integrity": "sha512-lmsWinI9dy7nQyzCEgDVeVAwJtsk4ey05cJZd6oa4QVuSFD+CR8ebaEiwT4/Na+W0kHrKicT3h0uYc2PJIvx5Q==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.11.tgz", + "integrity": "sha512-peoIAamtFU2CCX5+98QaQfFMTPg1CfgS0m1YFXG4Xr14xXgCcgi2ukvoRyt29Orwhs7zSRcIqDBtadNaa7avrA==", "dependencies": { - "@tonaljs/abc-notation": "^4.6.5", - "@tonaljs/array": "^4.6.5", - "@tonaljs/chord": "^4.6.5", - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/duration-value": "^4.6.2", - "@tonaljs/interval": "^4.6.5", - "@tonaljs/key": "^4.6.5", - "@tonaljs/midi": "^4.6.5", - "@tonaljs/mode": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/progression": "^4.6.5", - "@tonaljs/range": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5", - "@tonaljs/scale": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5", - "@tonaljs/time-signature": "^4.6.2" + "@tonaljs/abc-notation": "^4.7.0", + "@tonaljs/array": "^4.6.11", + "@tonaljs/chord": "^4.7.0", + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/duration-value": "^4.7.0", + "@tonaljs/interval": "^4.7.0", + "@tonaljs/key": "^4.7.0", + "@tonaljs/midi": "^4.7.0", + "@tonaljs/mode": "^4.7.0", + "@tonaljs/note": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/progression": "^4.7.0", + "@tonaljs/range": "^4.7.0", + "@tonaljs/roman-numeral": "^4.7.0", + "@tonaljs/scale": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0", + "@tonaljs/time-signature": "^4.7.0" } }, "node_modules/@tootallnate/once": { @@ -13023,7 +13023,7 @@ "license": "AGPL-3.0-or-later", "dependencies": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.5", + "@tonaljs/tonal": "^4.6.11", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" } @@ -14911,7 +14911,7 @@ "version": "file:packages/tonal", "requires": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.5", + "@tonaljs/tonal": "^4.6.11", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" }, @@ -14970,202 +14970,202 @@ } }, "@tonaljs/abc-notation": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.6.5.tgz", - "integrity": "sha512-1S0Jnx0NfDLgyhkQOMEHqOacELL6RUdPcWWUP+nAnsOsb9owvB9RKYLSzp5odd16FVUR7U8c/JLc2yxIRvSeJw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.0.tgz", + "integrity": "sha512-hYdmq+kugwHRQdK2hLyd19Abet47sNcte8JByukzxRm0A3jlCWG6jkD/hvnej7m+x4yWk7vB1KlOFQemKz7N/A==", "requires": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/array": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.5.tgz", - "integrity": "sha512-7A3DbBQ+qIQ134FqE518b4tJ8V2a15Sn303JjHzgnqZqKrNh/s3wqwkL60F7LKcd09tcp+vIKQP/MYt4xMcRAA==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.11.tgz", + "integrity": "sha512-r4frzNDC1RjmA48Z3QbuFHjABOLq0U3TzLz+ipEx1y9HtGjLpvZ/Lcl16RhH5a6W/66MS9kmrXstBezTdPXSMw==", "requires": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/chord": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.6.5.tgz", - "integrity": "sha512-Pjdel4aDVv4kcx9PW6Qozt5BB9nAt13AOExfzKztpgPmlBSy0SKHse7Jp1cA4MGAuLHU8dzVssTFYpCskEFw3w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.0.tgz", + "integrity": "sha512-RgJFsDmWE2KKFzIJmwkL7s8LFGfhASkbO3y/30KdWumRR4MD3v0V8xhFeq6c5TTnPLrXorEjBpwCcCdScj0/QA==", "requires": { - "@tonaljs/chord-detect": "^4.6.5", - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/chord-detect": "^4.7.0", + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "@tonaljs/chord-detect": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.6.5.tgz", - "integrity": "sha512-4xu53UP4kNTfdTNpAAVijhXcQ+ypJqmeMnsST08ZXSjoYfJUhmf5rWDWfz36KOTtNdCA6AbYgdtTYV/Xw0nd/w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.0.tgz", + "integrity": "sha512-cdSk/aXI+oLBYMkRqcPaw4LWNjVOZk3YTj6EY6saFNutvVlADu9VguzEuSMyV+mH7xlrbVdrOEjmB3n/dIBfaA==", "requires": { - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "@tonaljs/chord-type": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.6.5.tgz", - "integrity": "sha512-Ol4DDopqpZCF9odosO2i8I+plud3Ul7VWJGNvL+PPCf4Qnwuz87q3aJQDLNoRUz4VyW0u66mq3LyVh6A8kb6Ug==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.0.tgz", + "integrity": "sha512-EgBKNffekZd6T12qSXOpiCazCmo3WkXtKSs6Qby5dEODPCKKjHwEollOdEAB6Qk9FzTv3/2JjbOc7TcjI+gYTQ==", "requires": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "@tonaljs/collection": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.6.2.tgz", - "integrity": "sha512-bfPCotLJNB/tG1NrdbsQPLDKZB5jlMs7uPQ6RYKiNkaena3345ZKkbCGl5pj6YTXeDm/oblXiSbFAn7SlLRZdQ==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.0.tgz", + "integrity": "sha512-483PlVCyRfJWPAGNjpNLK2xicsH4oUn4Aue3Taa479M0syxDvvIIZkp1v7Y5soBCZUPPGpeNTMp0w46NJD3AEQ==" }, "@tonaljs/core": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.5.tgz", - "integrity": "sha512-t7Vx0+L3j/ubQj2AhI1H45D/K745np4DwJjJjXNi5FlGD+TL2wyw50dCwkHKGHsrLDqup1qqP6yN7LBpC6UwNg==" + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.11.tgz", + "integrity": "sha512-6mw/r286rVL/iMB1KBPoVBspcOEfBD/Fryr5lrLd2Gfw3r5nse3WaIvVsauTkTC3LtvlH7oGh5T3vOUREwT0Hw==" }, "@tonaljs/duration-value": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.6.2.tgz", - "integrity": "sha512-zrXT0L/qsDQ6251Mlqz54vcUbYUB9xb6uJhlxUzc6VauXOt8UOfrdTULubRTXTaBwWt1h8J5n9pXTQmNGzNI9A==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.0.tgz", + "integrity": "sha512-pVGvFRLOhG0pYQHfxaHWLWh5j/iZv30qaZVlQy87my19keC34JOsXZiqNHm8/HtfRlTBCwfq3ZlELcZoxWMRIA==" }, "@tonaljs/interval": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.6.5.tgz", - "integrity": "sha512-7EDWhqZ7Nnh9oD4ahRYJHLc799ACGxYL4hDHwMKD16B2MgXqPvDeDvwQ31qUuO0ruGz8tMb3FDlgg0Hplowcbw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.0.tgz", + "integrity": "sha512-eIyFMJal36lEfbvQr/h4tGgCJyJTB0l41x8usMnrdtPqph+lo3ZQwk4HSXQ4eHLrb7eP5aYVXM5P5ZVXKN8z8w==", "requires": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/key": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.6.5.tgz", - "integrity": "sha512-ZdZWb5IStx6CLRmdEjawR66CqNpoW3EVUua2nVZBMdgnNebWxt4nvgH/ZNvGlCQGFZkUZzRhCfTwqsS6e3OmSA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.0.tgz", + "integrity": "sha512-cJqALas3Kogr7dvmyUfRAP+NmooMR5vvvHVfSRpekiceXRp0GDCV+0RiBvliyDoUNJ7yDa9K7aXwkkj4OTG3fw==", "requires": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/note": "^4.7.0", + "@tonaljs/roman-numeral": "^4.7.0" } }, "@tonaljs/midi": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.6.5.tgz", - "integrity": "sha512-fJEZtNvV3M6yW1w+Tep60Rbv5PvuKszQcQzaJS1Loq5mHOKAzdmRfuJSpEpZBiaKEZ1WAMh1QKXYyOd+imyGQg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.0.tgz", + "integrity": "sha512-kfGurkPXrRMxs01q3YDKicu64vRvYzZLvllLrYT6dgvf4VkYp0rku3cHdArt5nKC5m4QcQh6sszZ7oR51XZaEA==", "requires": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/mode": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.6.5.tgz", - "integrity": "sha512-54iaON1rJ6q8fV5iuei8RGDxYhKBGGxZz3rjAxGSqdTUwBRVOdPqtzOkofThf9gRGYOMhzPp1BMbxbV+UCAPsA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.0.tgz", + "integrity": "sha512-xqVDYuz1kdfdLO88Rbv2X8rRrYDgQghbzY+iW5mXLJZoo/dl9dR4/5iAT6IvjXGfoCOPFWY3cqY3uv0jezWoDQ==", "requires": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/interval": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/interval": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "@tonaljs/note": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.6.5.tgz", - "integrity": "sha512-Y0/eTzcReXzfcSLLG4k/dLLayqbvh/XYIkybG/QMDyR0BREuJq0Sw+NavbzhTtO0dadIQb/qfe0GFq4k2xS+NQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.0.tgz", + "integrity": "sha512-I1YTvz7WC8T08/7iWAjd2rM/h7EOx+9iUbQUMQKXAj5eHhpsqJy83tRMyXqE2ZTL4W2Z/k5OTy0XsL9zlxs7Hg==", "requires": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/midi": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/midi": "^4.7.0" } }, "@tonaljs/pcset": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.6.5.tgz", - "integrity": "sha512-oWAKflP3cREnUfScqsBzg2LLKNevxSnpDtrq8CPtwOAsrAa8PjQG07NQfhqIiFMjPUdgkDiER3qVA1n8dDwAJA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.0.tgz", + "integrity": "sha512-sg2paiMxakuVAMGnKeCKsH7bpGiN4uYprgySxWvqmM5vis8ZoleAmFg1vozc452Eu0NTlRlUIjQZtDFMXYrMKA==", "requires": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/progression": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.6.5.tgz", - "integrity": "sha512-ijYEgMFQG4izHYUw5cRtBRNBuoYzmpGvb/tRiykhJNI6XIjekZEMiMsOMfb1u5q+EGvnVNXRmrluMRDIz2rmRw==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.0.tgz", + "integrity": "sha512-8UBemUK2ksTcCohI/HJD5TEJm56ymoV18OWzO5fKmhPibMR473ccVhJhQdTawiIWUDjbJtIV4uj67VXDqikQbQ==", "requires": { - "@tonaljs/chord": "^4.6.5", - "@tonaljs/core": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5" + "@tonaljs/chord": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/roman-numeral": "^4.7.0" } }, "@tonaljs/range": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.6.5.tgz", - "integrity": "sha512-99cOvVJ3l4X0UJuTSa6qE87JriREnnWIsi3xo1/n7RoqFxnfi8YPh4SfJJyysvHcT18X4EfcTNde9ancMBVu6A==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.0.tgz", + "integrity": "sha512-FE4x3rVbnhuWSekWskhV3A90GCWnfZsRNJSKo9lHc272ub8mDlv0psHL1I4nJzavBM4v+8dOCW4JpGpfOEkB6w==", "requires": { - "@tonaljs/collection": "^4.6.2", - "@tonaljs/midi": "^4.6.5" + "@tonaljs/collection": "^4.7.0", + "@tonaljs/midi": "^4.7.0" } }, "@tonaljs/roman-numeral": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.6.5.tgz", - "integrity": "sha512-bWYQNZWKmYDDcmbQQNwcWAHfTWanpzmvI0wplrMnGd4x0op5etwUEv+Yzjg0B1ef+E+zcU02Sl0WwRJhaDK3hg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.0.tgz", + "integrity": "sha512-PNe+G844SfYeLnlDabGU95WSB1V5tB8mrEm1i+nbKBQgWMQD+O3iKH7RyekkX5IS9oyEWxHL1lbEy1bGnCzgJA==", "requires": { - "@tonaljs/core": "^4.6.5" + "@tonaljs/core": "^4.6.11" } }, "@tonaljs/scale": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.6.5.tgz", - "integrity": "sha512-isYDamelOBtcd5bEnJ8QV0Js7jKRwZ0FlFVE/+bUN3wsyo9u6KLL5gMyfH9RKdx74m8lE13JXYTXgKqe+AOa4A==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.0.tgz", + "integrity": "sha512-8JD/l5rXFN2ySDiNf5m6TEgWHWEuQ9JL1h6bSdJu4+KPtCRSuWrM3t/vJ6jAP8jldGLW53rjIbLSI3dLCGePrQ==", "requires": { - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5" + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/note": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0" } }, "@tonaljs/scale-type": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.6.5.tgz", - "integrity": "sha512-rwcDOYf2UifjLJhmuQ8f8bJSeOCMDQJ1lB7lzlqdFxes03OeQhdOEfrT0nPtW8BhBEvq4GMM2NA6CLxX8MTwOQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.0.tgz", + "integrity": "sha512-GTEanCRqpRCc6AFlxGea1Ms8NEz8shWcNUet7EUDOKxApHUGrHg1IV+d/fypZzdP0fgXJfKa9cX0eNmU62NstA==", "requires": { - "@tonaljs/core": "^4.6.5", - "@tonaljs/pcset": "^4.6.5" + "@tonaljs/core": "^4.6.11", + "@tonaljs/pcset": "^4.7.0" } }, "@tonaljs/time-signature": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.6.2.tgz", - "integrity": "sha512-OlZY4gdLd21WpMeAI1nS9E9zWcYU6oAzh6ptAUndqmVnFIrIWIWKCkWapdFx8dWdqrX8jqya3m4T33wmeo7w5Q==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.0.tgz", + "integrity": "sha512-vADjarvb9V5dgbE3H0twLz5Ho0e/HDEi2m5k+6q2In9AWfGZ9ZIvaRWR8b8MKjrfmvsCN2HeZt+lA5cLPfVbag==" }, "@tonaljs/tonal": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.5.tgz", - "integrity": "sha512-lmsWinI9dy7nQyzCEgDVeVAwJtsk4ey05cJZd6oa4QVuSFD+CR8ebaEiwT4/Na+W0kHrKicT3h0uYc2PJIvx5Q==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.11.tgz", + "integrity": "sha512-peoIAamtFU2CCX5+98QaQfFMTPg1CfgS0m1YFXG4Xr14xXgCcgi2ukvoRyt29Orwhs7zSRcIqDBtadNaa7avrA==", "requires": { - "@tonaljs/abc-notation": "^4.6.5", - "@tonaljs/array": "^4.6.5", - "@tonaljs/chord": "^4.6.5", - "@tonaljs/chord-type": "^4.6.5", - "@tonaljs/collection": "^4.6.2", - "@tonaljs/core": "^4.6.5", - "@tonaljs/duration-value": "^4.6.2", - "@tonaljs/interval": "^4.6.5", - "@tonaljs/key": "^4.6.5", - "@tonaljs/midi": "^4.6.5", - "@tonaljs/mode": "^4.6.5", - "@tonaljs/note": "^4.6.5", - "@tonaljs/pcset": "^4.6.5", - "@tonaljs/progression": "^4.6.5", - "@tonaljs/range": "^4.6.5", - "@tonaljs/roman-numeral": "^4.6.5", - "@tonaljs/scale": "^4.6.5", - "@tonaljs/scale-type": "^4.6.5", - "@tonaljs/time-signature": "^4.6.2" + "@tonaljs/abc-notation": "^4.7.0", + "@tonaljs/array": "^4.6.11", + "@tonaljs/chord": "^4.7.0", + "@tonaljs/chord-type": "^4.7.0", + "@tonaljs/collection": "^4.7.0", + "@tonaljs/core": "^4.6.11", + "@tonaljs/duration-value": "^4.7.0", + "@tonaljs/interval": "^4.7.0", + "@tonaljs/key": "^4.7.0", + "@tonaljs/midi": "^4.7.0", + "@tonaljs/mode": "^4.7.0", + "@tonaljs/note": "^4.7.0", + "@tonaljs/pcset": "^4.7.0", + "@tonaljs/progression": "^4.7.0", + "@tonaljs/range": "^4.7.0", + "@tonaljs/roman-numeral": "^4.7.0", + "@tonaljs/scale": "^4.7.0", + "@tonaljs/scale-type": "^4.7.0", + "@tonaljs/time-signature": "^4.7.0" } }, "@tootallnate/once": { diff --git a/packages/tonal/package.json b/packages/tonal/package.json index 3caa16c4a..494bb18ef 100644 --- a/packages/tonal/package.json +++ b/packages/tonal/package.json @@ -26,7 +26,7 @@ "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.5", + "@tonaljs/tonal": "^4.6.11", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" } From 43aa2247f13df1ce7aa226d870f1cf95b319c207 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 00:05:36 +0100 Subject: [PATCH 08/31] baasic csound output --- packages/csound/sounds.csd | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/csound/sounds.csd diff --git a/packages/csound/sounds.csd b/packages/csound/sounds.csd new file mode 100644 index 000000000..8ea6a4b63 --- /dev/null +++ b/packages/csound/sounds.csd @@ -0,0 +1,41 @@ +;; based on https://kunstmusik.github.io/icsc2022-csound-web/tutorial2-interacting-with-csound/ + + +-o dac --port=10000 + + +sr=48000x +ksmps=64 +nchnls=2 +0dbfs=1 + +instr 1 + ioct = octcps(p4) + kpwm = oscili(.1, 5) + asig = vco2(p5, p4, 4, .5 + kpwm) + asig += vco2(p5, p4 * 2) + + idepth = 3 + acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) + asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.125) + + asig *= linsegr:a(1, p3, 1, .125, 0) + + out(asig, asig) + +endin + +opcode next_time, i, i + inext xin + + itime = times:i() + iticks = round(itime / inext) + iticks += 1 + + iout = (iticks * inext) - itime + xout iout +endop + + + + \ No newline at end of file From eab86840d31118d62b52238dd6a529cf0dfc7c72 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 00:05:51 +0100 Subject: [PATCH 09/31] baasic csound output --- package-lock.json | 1744 ++++++++++++++++++++++++++++------ packages/csound/csound.mjs | 32 + packages/csound/package.json | 2 +- repl/src/App.jsx | 1 + 4 files changed, 1495 insertions(+), 284 deletions(-) create mode 100644 packages/csound/csound.mjs diff --git a/package-lock.json b/package-lock.json index 01a31dbbe..d462ef6d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -471,11 +471,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", + "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -637,6 +637,25 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@csound/browser": { + "version": "6.18.3", + "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", + "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", + "dependencies": { + "comlink": "^4.3.1", + "eslint-plugin-n": "^15.5.1", + "eventemitter3": "^4.0.7", + "google-closure-compiler": "^20221102.0.1", + "google-closure-library": "^20221102.0.0", + "path-browserify": "^1.0.1", + "rambda": "^7.4.0", + "rimraf": "^3.0.2", + "standardized-audio-context": "^25.3.35", + "text-encoding-shim": "^1.0.5", + "unmute-ios-audio": "^3.3.0", + "web-midi-api": "^2.1.8" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.15.13", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", @@ -669,12 +688,95 @@ "node": ">=12" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "peer": true + }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", @@ -1786,7 +1888,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1799,7 +1900,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -1808,7 +1908,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2093,6 +2192,10 @@ "resolved": "packages/core", "link": true }, + "node_modules/@strudel.cycles/csound": { + "resolved": "packages/csound", + "link": true + }, "node_modules/@strudel.cycles/embed": { "resolved": "packages/embed", "link": true @@ -2497,8 +2600,7 @@ "node_modules/@types/webmidi": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", - "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==", - "optional": true + "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" }, "node_modules/@uiw/codemirror-extensions-basic-setup": { "version": "4.12.4", @@ -2586,7 +2688,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2606,6 +2707,15 @@ "acorn-walk": "^7.1.1" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -2675,7 +2785,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2727,7 +2836,6 @@ "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" } @@ -2736,7 +2844,6 @@ "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" }, @@ -2785,8 +2892,7 @@ "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 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-back": { "version": "6.2.2", @@ -2916,12 +3022,12 @@ } }, "node_modules/automation-events": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.13.tgz", - "integrity": "sha512-SYHkG0A0x+JwLBHSexZhlv9mcYlvFpen9S2zTNjchfp5EDSbrs3Fm9Teje0PWpUNTV5W1C/kEPdZ4RTrGOm7Hg==", + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", + "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", "dependencies": { - "@babel/runtime": "^7.17.0", - "tslib": "^2.3.1" + "@babel/runtime": "^7.20.1", + "tslib": "^2.4.1" }, "engines": { "node": ">=12.20.1" @@ -2978,8 +3084,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -3065,7 +3170,6 @@ "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" @@ -3277,7 +3381,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -3382,7 +3485,6 @@ "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" @@ -3509,6 +3611,14 @@ "node": ">=0.8" } }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -3535,6 +3645,21 @@ "node": ">=0.10.0" } }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, "node_modules/cmd-shim": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", @@ -3587,7 +3712,6 @@ "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" }, @@ -3598,8 +3722,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/columnify": { "version": "1.6.0", @@ -3626,6 +3749,11 @@ "node": ">= 0.8" } }, + "node_modules/comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" + }, "node_modules/command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -3760,8 +3888,7 @@ "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/concat-stream": { "version": "2.0.0", @@ -3978,8 +4105,7 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { "version": "7.0.1", @@ -4006,7 +4132,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4171,7 +4296,6 @@ "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" }, @@ -4187,8 +4311,7 @@ "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 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/debuglog": { "version": "1.0.1", @@ -4461,6 +4584,18 @@ "node": ">=12" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -5056,6 +5191,323 @@ "source-map": "~0.6.1" } }, + "node_modules/eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "peer": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "peer": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -5068,6 +5520,30 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -5092,8 +5568,7 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { "version": "3.3.0", @@ -5180,8 +5655,7 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.2.12", @@ -5202,8 +5676,7 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -5214,7 +5687,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -5257,6 +5729,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-set": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", @@ -5368,7 +5852,6 @@ "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" @@ -5380,6 +5863,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "peer": true + }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5495,8 +5997,7 @@ "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 + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -5515,8 +6016,7 @@ "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 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -5909,7 +6409,6 @@ "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", @@ -5966,12 +6465,91 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/google-closure-compiler": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", + "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", + "dependencies": { + "chalk": "4.x", + "google-closure-compiler-java": "^20221102.0.1", + "minimist": "1.x", + "vinyl": "2.x", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "bin": { + "google-closure-compiler": "cli.js" + }, + "engines": { + "node": ">=10" + }, + "optionalDependencies": { + "google-closure-compiler-linux": "^20221102.0.1", + "google-closure-compiler-osx": "^20221102.0.1", + "google-closure-compiler-windows": "^20221102.0.1" + } + }, + "node_modules/google-closure-compiler-java": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", + "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" + }, + "node_modules/google-closure-compiler-linux": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", + "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", + "cpu": [ + "x32", + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/google-closure-compiler-osx": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", + "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", + "cpu": [ + "x32", + "x64", + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/google-closure-compiler-windows": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", + "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", + "cpu": [ + "x32", + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/google-closure-library": { + "version": "20221102.0.0", + "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", + "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "peer": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -6057,7 +6635,6 @@ "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" }, @@ -6078,7 +6655,6 @@ "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" } @@ -6329,7 +6905,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } @@ -6347,7 +6922,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6363,7 +6937,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -6391,7 +6964,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -6415,7 +6987,6 @@ "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" @@ -6424,8 +6995,7 @@ "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 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -6600,7 +7170,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -6642,7 +7211,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6660,7 +7228,6 @@ "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" }, @@ -6719,6 +7286,15 @@ "node": ">=8" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -6869,14 +7445,12 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "node_modules/isobject": { "version": "3.0.1", @@ -6930,19 +7504,40 @@ } }, "node_modules/jazz-midi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.5.tgz", - "integrity": "sha512-RUxChhn388CZfSymwwgucfaBxGu4Z0eeJOSTnUMsDN2tMx5E8G+o7h2gk/xPaDTfOORnQsJk71VhSuqiw1Hy9Q==", - "optional": true, + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", + "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==", "engines": { "node": ">=10.0.0" } }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "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==" }, + "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==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", @@ -7238,8 +7833,13 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -7312,13 +7912,12 @@ } }, "node_modules/jzz": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.0.tgz", - "integrity": "sha512-M3FrFdVulFMti3jxfjyt0h96w8Wrwe6SI6FKTW0/c+HxQg0j9P55NacpMt3dgPO9bwQaPQGujWdUBgexVMsbNw==", - "optional": true, + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", + "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", "dependencies": { "@types/webmidi": "^2.0.6", - "jazz-midi": "^1.7.5" + "jazz-midi": "^1.7.6" } }, "node_modules/kind-of": { @@ -7640,7 +8239,6 @@ "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" }, @@ -7675,6 +8273,12 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, "node_modules/lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -7736,7 +8340,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8119,10 +8722,9 @@ } }, "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, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8133,8 +8735,7 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minimist-options": { "version": "4.1.0", @@ -8407,6 +9008,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -8942,7 +9549,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -9053,7 +9659,6 @@ "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" }, @@ -9068,7 +9673,6 @@ "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" }, @@ -9294,7 +9898,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -9407,11 +10010,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "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" } @@ -9420,7 +10027,6 @@ "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" } @@ -9429,7 +10035,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -9437,8 +10042,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -9818,8 +10422,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/promise": { "version": "8.1.0", @@ -9892,7 +10495,6 @@ "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" } @@ -9938,7 +10540,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -9966,6 +10567,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rambda": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", + "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" + }, "node_modules/react": { "resolved": "packages/react", "link": true @@ -10277,7 +10883,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10291,8 +10896,7 @@ "node_modules/readable-stream/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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", @@ -10425,9 +11029,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", @@ -10446,6 +11050,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -10500,7 +11128,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -10560,7 +11187,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10570,7 +11196,6 @@ "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" }, @@ -10670,7 +11295,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -10774,7 +11398,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -10815,7 +11438,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10827,7 +11449,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -11200,13 +11821,13 @@ } }, "node_modules/standardized-audio-context": { - "version": "25.3.20", - "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.20.tgz", - "integrity": "sha512-c6eMQXmN7iDS7ROuSqOrHQhxpazerJSnRHEJiKD8YkruZBTt/a5E7zmk+KkStoi0dohFAod8wvwWxc7S1gmdig==", + "version": "25.3.35", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", + "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", "dependencies": { - "@babel/runtime": "^7.17.0", - "automation-events": "^4.0.12", - "tslib": "^2.3.1" + "@babel/runtime": "^7.20.1", + "automation-events": "^4.0.24", + "tslib": "^2.4.1" } }, "node_modules/stream-connect": { @@ -11264,7 +11885,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -11272,8 +11892,7 @@ "node_modules/string_decoder/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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/string-width": { "version": "4.2.3", @@ -11321,7 +11940,6 @@ "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" }, @@ -11363,7 +11981,6 @@ "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" }, @@ -11409,7 +12026,6 @@ "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" }, @@ -11421,7 +12037,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -11697,6 +12312,11 @@ "node": ">=4" } }, + "node_modules/text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" + }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -11706,6 +12326,12 @@ "node": ">=0.10" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -12099,6 +12725,25 @@ "node": ">= 10.0.0" } }, + "node_modules/unmute-ios-audio": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", + "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -12139,7 +12784,6 @@ "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" } @@ -12147,8 +12791,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/util-promisify": { "version": "2.1.0", @@ -12222,6 +12865,46 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/vite": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", @@ -12392,6 +13075,14 @@ "defaults": "^1.0.3" } }, + "node_modules/web-midi-api": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", + "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", + "dependencies": { + "jzz": "^1.5.4" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -12458,7 +13149,6 @@ "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" }, @@ -12550,8 +13240,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -12763,8 +13452,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -12806,7 +13494,6 @@ "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" }, @@ -12823,6 +13510,14 @@ "fraction.js": "^4.2.0" } }, + "packages/csound": { + "name": "@strudel.cycles/csound", + "version": "0.3.0", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@csound/browser": "^6.18.3" + } + }, "packages/embed": { "name": "@strudel.cycles/embed", "version": "0.2.0", @@ -13431,11 +14126,11 @@ } }, "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", + "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { @@ -13579,6 +14274,25 @@ "w3c-keyname": "^2.2.4" } }, + "@csound/browser": { + "version": "6.18.3", + "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", + "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", + "requires": { + "comlink": "^4.3.1", + "eslint-plugin-n": "^15.5.1", + "eventemitter3": "^4.0.7", + "google-closure-compiler": "^20221102.0.1", + "google-closure-library": "^20221102.0.0", + "path-browserify": "^1.0.1", + "rambda": "^7.4.0", + "rimraf": "^3.0.2", + "standardized-audio-context": "^25.3.35", + "text-encoding-shim": "^1.0.5", + "unmute-ios-audio": "^3.3.0", + "web-midi-api": "^2.1.8" + } + }, "@esbuild/android-arm": { "version": "0.15.13", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", @@ -13593,12 +14307,69 @@ "dev": true, "optional": true }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "peer": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true + } + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "peer": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "peer": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "peer": true + }, "@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", @@ -14502,7 +15273,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -14511,14 +15281,12 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -14775,6 +15543,12 @@ "fraction.js": "^4.2.0" } }, + "@strudel.cycles/csound": { + "version": "file:packages/csound", + "requires": { + "@csound/browser": "^6.18.3" + } + }, "@strudel.cycles/embed": { "version": "file:packages/embed" }, @@ -15314,8 +16088,7 @@ "@types/webmidi": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", - "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==", - "optional": true + "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" }, "@uiw/codemirror-extensions-basic-setup": { "version": "4.12.4", @@ -15382,8 +16155,7 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-globals": { "version": "6.0.0", @@ -15397,6 +16169,13 @@ "acorn-walk": "^7.1.1" } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peer": true, + "requires": {} + }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -15454,7 +16233,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15491,14 +16269,12 @@ "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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" } @@ -15538,8 +16314,7 @@ "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 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-back": { "version": "6.2.2", @@ -15639,12 +16414,12 @@ "dev": true }, "automation-events": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.13.tgz", - "integrity": "sha512-SYHkG0A0x+JwLBHSexZhlv9mcYlvFpen9S2zTNjchfp5EDSbrs3Fm9Teje0PWpUNTV5W1C/kEPdZ4RTrGOm7Hg==", + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", + "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", "requires": { - "@babel/runtime": "^7.17.0", - "tslib": "^2.3.1" + "@babel/runtime": "^7.20.1", + "tslib": "^2.4.1" } }, "autoprefixer": { @@ -15676,8 +16451,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -15745,7 +16519,6 @@ "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" @@ -15900,8 +16673,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", @@ -15974,7 +16746,6 @@ "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" @@ -16066,6 +16837,11 @@ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==" + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -16088,6 +16864,21 @@ } } }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, "cmd-shim": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", @@ -16131,7 +16922,6 @@ "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" } @@ -16139,8 +16929,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "columnify": { "version": "1.6.0", @@ -16161,6 +16950,11 @@ "delayed-stream": "~1.0.0" } }, + "comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" + }, "command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -16276,8 +17070,7 @@ "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "2.0.0", @@ -16460,8 +17253,7 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "7.0.1", @@ -16485,7 +17277,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -16618,7 +17409,6 @@ "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" }, @@ -16626,8 +17416,7 @@ "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 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -16838,6 +17627,15 @@ "walk-back": "^5.1.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -17197,11 +17995,254 @@ "source-map": "~0.6.1" } }, + "eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "peer": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "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==", + "peer": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "peer": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "peer": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "peer": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "peer": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true + } + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "requires": { + "semver": "^7.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "peer": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "peer": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "peer": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "peer": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "requires": { + "estraverse": "^5.2.0" + } + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -17220,8 +18261,7 @@ "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { "version": "3.3.0", @@ -17289,8 +18329,7 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.2.12", @@ -17308,8 +18347,7 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -17320,7 +18358,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -17344,6 +18381,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "peer": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-set": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", @@ -17426,12 +18472,27 @@ "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-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "peer": true + }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -17519,8 +18580,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -17532,8 +18592,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", @@ -17840,7 +18899,6 @@ "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", @@ -17879,12 +18937,61 @@ "slash": "^3.0.0" } }, + "google-closure-compiler": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", + "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", + "requires": { + "chalk": "4.x", + "google-closure-compiler-java": "^20221102.0.1", + "google-closure-compiler-linux": "^20221102.0.1", + "google-closure-compiler-osx": "^20221102.0.1", + "google-closure-compiler-windows": "^20221102.0.1", + "minimist": "1.x", + "vinyl": "2.x", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "google-closure-compiler-java": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", + "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" + }, + "google-closure-compiler-linux": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", + "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", + "optional": true + }, + "google-closure-compiler-osx": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", + "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", + "optional": true + }, + "google-closure-compiler-windows": { + "version": "20221102.0.1", + "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", + "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", + "optional": true + }, + "google-closure-library": { + "version": "20221102.0.0", + "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", + "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" + }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "peer": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -17951,7 +19058,6 @@ "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" } @@ -17965,8 +19071,7 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.0", @@ -18157,8 +19262,7 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-walk": { "version": "3.0.4", @@ -18173,7 +19277,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -18182,8 +19285,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -18200,8 +19302,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", @@ -18219,7 +19320,6 @@ "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" @@ -18228,8 +19328,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -18367,7 +19466,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -18390,8 +19488,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -18403,7 +19500,6 @@ "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" } @@ -18441,6 +19537,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -18549,14 +19651,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -18598,16 +19698,30 @@ } }, "jazz-midi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.5.tgz", - "integrity": "sha512-RUxChhn388CZfSymwwgucfaBxGu4Z0eeJOSTnUMsDN2tMx5E8G+o7h2gk/xPaDTfOORnQsJk71VhSuqiw1Hy9Q==", - "optional": true + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", + "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==" + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "peer": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, "js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", @@ -18845,8 +19959,13 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "peer": true }, "json-stringify-safe": { "version": "5.0.1", @@ -18899,13 +20018,12 @@ } }, "jzz": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.0.tgz", - "integrity": "sha512-M3FrFdVulFMti3jxfjyt0h96w8Wrwe6SI6FKTW0/c+HxQg0j9P55NacpMt3dgPO9bwQaPQGujWdUBgexVMsbNw==", - "optional": true, + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", + "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", "requires": { "@types/webmidi": "^2.0.6", - "jazz-midi": "^1.7.5" + "jazz-midi": "^1.7.6" } }, "kind-of": { @@ -19170,7 +20288,6 @@ "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" } @@ -19199,6 +20316,12 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, "lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", @@ -19257,7 +20380,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -19545,10 +20667,9 @@ "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, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -19556,8 +20677,7 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minimist-options": { "version": "4.1.0", @@ -19761,6 +20881,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -20179,7 +21305,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -20263,7 +21388,6 @@ "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" } @@ -20272,7 +21396,6 @@ "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" } @@ -20437,7 +21560,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -20532,29 +21654,30 @@ } } }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "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 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", @@ -20806,8 +21929,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise": { "version": "8.1.0", @@ -20876,8 +21998,7 @@ "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 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -20906,8 +22027,7 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-lru": { "version": "5.1.1", @@ -20915,6 +22035,11 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, + "rambda": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", + "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" + }, "react": { "version": "file:packages/react", "requires": { @@ -21223,7 +22348,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -21237,8 +22361,7 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -21346,9 +22469,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regexp.prototype.flags": { "version": "1.4.3", @@ -21361,6 +22484,21 @@ "functions-have-names": "^1.2.2" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -21408,7 +22546,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -21449,14 +22586,12 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "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" } @@ -21520,7 +22655,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -21589,7 +22723,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -21621,7 +22754,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -21629,8 +22761,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shift-ast": { "version": "7.0.0", @@ -21935,13 +23066,13 @@ } }, "standardized-audio-context": { - "version": "25.3.20", - "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.20.tgz", - "integrity": "sha512-c6eMQXmN7iDS7ROuSqOrHQhxpazerJSnRHEJiKD8YkruZBTt/a5E7zmk+KkStoi0dohFAod8wvwWxc7S1gmdig==", + "version": "25.3.35", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", + "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", "requires": { - "@babel/runtime": "^7.17.0", - "automation-events": "^4.0.12", - "tslib": "^2.3.1" + "@babel/runtime": "^7.20.1", + "automation-events": "^4.0.24", + "tslib": "^2.4.1" } }, "stream-connect": { @@ -21989,7 +23120,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" }, @@ -21997,8 +23127,7 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -22039,7 +23168,6 @@ "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" } @@ -22068,8 +23196,7 @@ "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 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strip-outer": { "version": "1.0.1", @@ -22100,7 +23227,6 @@ "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" } @@ -22108,8 +23234,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "symbol-tree": { "version": "3.2.4", @@ -22342,12 +23467,23 @@ } } }, + "text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" + }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -22664,6 +23800,11 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, + "unmute-ios-audio": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", + "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==" + }, "upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -22684,7 +23825,6 @@ "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" } @@ -22692,8 +23832,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-promisify": { "version": "2.1.0", @@ -22759,6 +23898,41 @@ } } }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "requires": { + "source-map": "^0.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, "vite": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", @@ -22848,6 +24022,14 @@ "defaults": "^1.0.3" } }, + "web-midi-api": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", + "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", + "requires": { + "jzz": "^1.5.4" + } + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -22898,7 +24080,6 @@ "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" } @@ -22968,8 +24149,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -23129,8 +24309,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", @@ -23162,8 +24341,7 @@ "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 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs new file mode 100644 index 000000000..809526eb9 --- /dev/null +++ b/packages/csound/csound.mjs @@ -0,0 +1,32 @@ +import { Pattern } from '@strudel.cycles/core'; +import { Csound } from '@csound/browser'; // TODO: use dynamic import for code splitting.. +import csd from './sounds.csd?raw'; +import { getAudioContext } from '@strudel.cycles/webaudio'; + +let csoundLoader; + +Pattern.prototype.csound = async function () { + if (!csoundLoader) { + csoundLoader = (async () => { + const csound = await Csound({ audioContext: getAudioContext() }); + await csound.setOption('-m0'); + await csound.compileCsdText(csd); + await csound.setControlChannel('main.note.amp', -12); + await csound.start(); + return csound; + })(); + } + const csound = await csoundLoader; + return this.onTrigger((time, hap, currentTime) => { + const { gain = 0.8 } = hap.value; + const deadline = time - currentTime; + const midi = toMidi(getPlayableNoteValue(hap)); + // TODO: find out how to send a precise ctx based time + const ctime = `next_time(.000001)+${deadline.toFixed(6)}`; + // const ctime = `${deadline.toFixed(6)}`; + const cmidi = `cpsmidinn(${midi})`; + const cgain = gain ? `ampdbfs(-32 + 32*${gain})` : `0`; + const code = `schedule(1, ${ctime}, .125, ${cmidi}, ${cgain})`; + csound.evalCode(code); + }); +}; diff --git a/packages/csound/package.json b/packages/csound/package.json index 565bc6052..90a2f7d4f 100644 --- a/packages/csound/package.json +++ b/packages/csound/package.json @@ -2,7 +2,7 @@ "name": "@strudel.cycles/csound", "version": "0.3.0", "description": "csound bindings for strudel", - "main": "index.mjs", + "main": "csound.mjs", "scripts": { "test": "echo \"No tests present.\" && exit 0" }, diff --git a/repl/src/App.jsx b/repl/src/App.jsx index ef2346c2e..423820167 100644 --- a/repl/src/App.jsx +++ b/repl/src/App.jsx @@ -42,6 +42,7 @@ const modules = [ import('@strudel.cycles/osc'), import('@strudel.cycles/serial'), import('@strudel.cycles/soundfonts'), + import('@strudel.cycles/csound'), ]; evalScope( From 729e0afdbebdb66f567f36c1bb156ae0c49d4f33 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 00:10:21 +0100 Subject: [PATCH 10/31] fix typo --- packages/csound/csound.mjs | 5 +++-- packages/csound/sounds.csd | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 809526eb9..297e5b514 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -22,11 +22,12 @@ Pattern.prototype.csound = async function () { const deadline = time - currentTime; const midi = toMidi(getPlayableNoteValue(hap)); // TODO: find out how to send a precise ctx based time - const ctime = `next_time(.000001)+${deadline.toFixed(6)}`; - // const ctime = `${deadline.toFixed(6)}`; + // const ctime = `next_time(0.0001)+${deadline.toFixed(4)}`; + const ctime = `${deadline.toFixed(8)}`; const cmidi = `cpsmidinn(${midi})`; const cgain = gain ? `ampdbfs(-32 + 32*${gain})` : `0`; const code = `schedule(1, ${ctime}, .125, ${cmidi}, ${cgain})`; + // console.log('code', code); csound.evalCode(code); }); }; diff --git a/packages/csound/sounds.csd b/packages/csound/sounds.csd index 8ea6a4b63..8cbd4d520 100644 --- a/packages/csound/sounds.csd +++ b/packages/csound/sounds.csd @@ -4,7 +4,7 @@ -o dac --port=10000 -sr=48000x +sr=48000 ksmps=64 nchnls=2 0dbfs=1 From c40078ffc9fadbc53fbf7298dda754db963c66ea Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 21:59:22 +0100 Subject: [PATCH 11/31] improve csound bindings: - better timing - can now pass instrument to .csound(...) - can now write instruments with csound(...) --- packages/csound/csd.mjs | 60 ++++++++++++++++++++ packages/csound/csound.mjs | 89 ++++++++++++++++++++--------- packages/csound/sounds.csd | 41 -------------- repl/src/tunes.mjs | 112 +++++++++++++++++++++++++++++++++++++ 4 files changed, 236 insertions(+), 66 deletions(-) create mode 100644 packages/csound/csd.mjs delete mode 100644 packages/csound/sounds.csd diff --git a/packages/csound/csd.mjs b/packages/csound/csd.mjs new file mode 100644 index 000000000..67adbb3e3 --- /dev/null +++ b/packages/csound/csd.mjs @@ -0,0 +1,60 @@ +export function csd(code = '') { + return ` + + +-o dac --port=10000 --sample-accurate + + +sr=48000 +ksmps=64 +nchnls=2 +0dbfs=1 + +instr organ + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + asig = vco2(igain, ifreq, 12, .5) ; my edit + kpwm = oscili(.1, 5) + asig = vco2(igain, ifreq, 4, .5 + kpwm) + asig += vco2(igain/4, ifreq * 2) + + ; filter + ; idepth = 2 + ; acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) ; filter envelope + ; asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.5) + + ; amp envelope + iattack = .001 + irelease = .05 + asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) + + out(asig, asig) + +endin + +instr triangle + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + asig = vco2(igain, ifreq, 12, .5) + + ; amp envelope + iattack = .001 + irelease = .05 + asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) + + out(asig, asig) + +endin + +${code} + + + +`; +} diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 297e5b514..80b0fddf1 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -1,33 +1,72 @@ -import { Pattern } from '@strudel.cycles/core'; +import { getFrequency, logger, Pattern } from '@strudel.cycles/core'; import { Csound } from '@csound/browser'; // TODO: use dynamic import for code splitting.. -import csd from './sounds.csd?raw'; +import { csd } from './csd.mjs'; import { getAudioContext } from '@strudel.cycles/webaudio'; -let csoundLoader; +let csoundLoader, _csound; -Pattern.prototype.csound = async function () { - if (!csoundLoader) { - csoundLoader = (async () => { - const csound = await Csound({ audioContext: getAudioContext() }); - await csound.setOption('-m0'); - await csound.compileCsdText(csd); - await csound.setControlChannel('main.note.amp', -12); - await csound.start(); - return csound; - })(); - } - const csound = await csoundLoader; +// triggers given instrument name using csound. expects csound function to be called in advance `await csound()` +Pattern.prototype._csound = function (instrument) { + instrument = instrument || 'triangle'; return this.onTrigger((time, hap, currentTime) => { - const { gain = 0.8 } = hap.value; - const deadline = time - currentTime; - const midi = toMidi(getPlayableNoteValue(hap)); + if (!_csound) { + logger('[csound] not loaded yet', 'warning'); + return; + } + let { gain = 0.8 } = hap.value; + gain *= 0.2; + + // const midi = toMidi(getPlayableNoteValue(hap)); + const freq = getFrequency(hap); // TODO: find out how to send a precise ctx based time - // const ctime = `next_time(0.0001)+${deadline.toFixed(4)}`; - const ctime = `${deadline.toFixed(8)}`; - const cmidi = `cpsmidinn(${midi})`; - const cgain = gain ? `ampdbfs(-32 + 32*${gain})` : `0`; - const code = `schedule(1, ${ctime}, .125, ${cmidi}, ${cgain})`; - // console.log('code', code); - csound.evalCode(code); + // http://www.csounds.com/manual/html/i.html + const params = [ + `"${instrument}"`, // p1: instrument name + time - currentTime, //.toFixed(precision), // p2: starting time in arbitrary unit called beats + hap.duration + 0, // p3: duration in beats + // instrument specific params: + freq, //.toFixed(precision), // p4: frequency + // -48 + gain * 24, // p5: gain + gain, // p5: gain + ]; + const msg = `i ${params.join(' ')}`; + // console.log('msg', msg); + _csound.inputMessage(msg); + // _csound.readScore(msg); // slower alternative + // even slower alternative: + /* const code = `schedule(${params.join(', ')})`; + _csound.evalCode(code); */ }); }; + +// initializes csound + can be used to reevaluate given instrument code +export async function csound(code = '') { + code = csd(code); + let isInit = false; + if (!csoundLoader) { + isInit = true; + csoundLoader = (async () => { + _csound = await Csound({ audioContext: getAudioContext() }); + await _csound.setOption('-m0'); + await _csound.compileCsdText(code); + await _csound.start(); + })(); + } + await csoundLoader; + !isInit && (await _csound?.compileCsdText(code)); +} + +// experimental: allows using jsx to eval csound +window.jsxPragma = function (fn, args, text) { + return fn(text); +}; + +// experimental: for use via JSX as ... +export function CsInstruments(text) { + if (Array.isArray(text)) { + text = text[0]; + } + return csound(text); +} + +Pattern.prototype.define('csound', (a, pat) => pat.csound(a), { composable: false, patternified: true }); diff --git a/packages/csound/sounds.csd b/packages/csound/sounds.csd deleted file mode 100644 index 8cbd4d520..000000000 --- a/packages/csound/sounds.csd +++ /dev/null @@ -1,41 +0,0 @@ -;; based on https://kunstmusik.github.io/icsc2022-csound-web/tutorial2-interacting-with-csound/ - - --o dac --port=10000 - - -sr=48000 -ksmps=64 -nchnls=2 -0dbfs=1 - -instr 1 - ioct = octcps(p4) - kpwm = oscili(.1, 5) - asig = vco2(p5, p4, 4, .5 + kpwm) - asig += vco2(p5, p4 * 2) - - idepth = 3 - acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) - asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.125) - - asig *= linsegr:a(1, p3, 1, .125, 0) - - out(asig, asig) - -endin - -opcode next_time, i, i - inext xin - - itime = times:i() - iticks = round(itime / inext) - iticks += 1 - - iout = (iticks * inext) - itime - xout iout -endop - - - - \ No newline at end of file diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index c9224d7a1..c65224e85 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -991,3 +991,115 @@ export const juxUndTollerei = `note("c3 eb3 g3 bb3").palindrome() .room(.6) .delay(.5).delaytime(.1).delayfeedback(.4) .pianoroll()`; + +export const csoundTest = `await csound\` +instr sawtooth + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + asig = vco2(igain, ifreq, 0) + + ; amp envelope + iattack = .5 + irelease = .1 + asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) + + idepth = 2 + acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) + asig = zdf_2pole(asig, 1000, 2) + + out(asig, asig) +endin\` + +stack( + note("/2".voicings()).s('sawtooth'), + note("/2").s('sawtooth') +) +.csound('sawtooth')`; + +export const csoundTest2 = `await csound\` +instr organ + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + kpwm = oscili(.5, 2) + asig = vco2(igain, ifreq, 4, .5 + kpwm) + asig += vco2(igain/4, ifreq * 2) + + iattack = .01 + irelease = .005 + asig *= linsegr:a(0, iattack, 1, iduration, 0, irelease, 0) + + out(asig, asig) +endin\` + +"<0 2 [4 6](3,4,1) 3*2>" +.off(1/4, add(2)) +.off(1/2, add(6)) +.scale('D minor') +.legato(perlin.range(.2,2).slow(8)) +// .echo(4, 1/8, .5) +.note() +.pianoroll() +.csound('organ');`; + +export const csoundTest3 = `await csound\` +instr CoolSynth + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + kpwm = oscili(.05, 8) + asig = vco2(igain, ifreq, 4, .5 + kpwm) + asig += vco2(igain, ifreq * 2) + + idepth = 2 + acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) ; filter envelope + asig = zdf_2pole(asig, cpsoct(ioct + acut + 2), 0.5) + + iattack = .01 + isustain = .5 + idecay = .1 + irelease = .1 + asig *= linsegr:a(0, iattack, 1, idecay, isustain, iduration, isustain, irelease, 0) + + out(asig, asig) +endin\` + +"<0 2 [4 6](3,4,1) 3*2>" +.off(1/4, add(2)) +.off(1/2, add(6)) +.scale('D minor') +.note() +//.pianoroll() +.csound("/4")`; + +export const csoundTest4 = `await csound() + +stack( + note("/2".voicings()).csound('organ').gain(.5), + note("/2".superimpose(add(.1))).s('sawtooth').cutoff(800).resonance(10).shape(.3) +)`; + +export const csoundMixed = `await csound() + +stack( + "/2".voicings() + .add(rand.range(-.1,.1)).note() + .csound('organ').gain(1).struct("[~@2 x]*2").legato(.25) + , + "/2" + .superimpose(add(rand.range(-.1,.1))).note() + .s('sawtooth').cutoff(perlin.range(200,500)).resonance(10) + .struct("x(4,6,1) x(5,6,2)") + .decay(.1).sustain(0) + , + s("bd*2,hh:1(4,6),[~ sd]/2") + .room(.5) + .speed(perlin.range(.9,1.1).slow(4)) +).slow(2)`; From 0a098e3008ad78d3ea2f323db7e5e213f68e0960 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 22:04:46 +0100 Subject: [PATCH 12/31] mock csound --- repl/src/runtime.mjs | 4 ++ .../test/__snapshots__/tunes.test.mjs.snap | 69 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/repl/src/runtime.mjs b/repl/src/runtime.mjs index 8945f1a81..d0c96c451 100644 --- a/repl/src/runtime.mjs +++ b/repl/src/runtime.mjs @@ -88,6 +88,9 @@ const toneHelpersMocked = { strudel.Pattern.prototype.osc = function () { return this; }; +strudel.Pattern.prototype.csound = function () { + return this; +}; strudel.Pattern.prototype.tone = function () { return this; }; @@ -170,6 +173,7 @@ evalScope( { // gist, // euclid, + csound: id, mini, getDrawContext, getAudioContext, diff --git a/repl/src/test/__snapshots__/tunes.test.mjs.snap b/repl/src/test/__snapshots__/tunes.test.mjs.snap index a1598d3f2..864a9ba79 100644 --- a/repl/src/test/__snapshots__/tunes.test.mjs.snap +++ b/repl/src/test/__snapshots__/tunes.test.mjs.snap @@ -1409,6 +1409,75 @@ exports[`renders tunes > tune: chop 1`] = ` ] `; +exports[`renders tunes > tune: csoundMixed 1`] = ` +[ + "2/3 -> 3/4: {\\"note\\":58.95209612324834,\\"gain\\":1}", + "2/3 -> 3/4: {\\"note\\":61.95209612324834,\\"gain\\":1}", + "2/3 -> 3/4: {\\"note\\":63.95209612324834,\\"gain\\":1}", + "2/3 -> 3/4: {\\"note\\":66.95209612324834,\\"gain\\":1}", + "0/1 -> 1/6: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "0/1 -> 1/6: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "1/3 -> 1/2: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "1/3 -> 1/2: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "1/2 -> 2/3: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "1/2 -> 2/3: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "5/6 -> 1/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "5/6 -> 1/1: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", + "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"room\\":0.5,\\"speed\\":0.900230494513707}", + "1/3 -> 2/3: {\\"s\\":\\"hh:1\\",\\"room\\":0.5,\\"speed\\":0.900230494513707}", + "2/3 -> 1/1: {\\"s\\":\\"hh:1\\",\\"room\\":0.5,\\"speed\\":0.9009985942422922}", +] +`; + +exports[`renders tunes > tune: csoundTest 1`] = ` +[ + "0/1 -> 2/1: {\\"note\\":\\"B3\\",\\"s\\":\\"sawtooth\\"}", + "0/1 -> 2/1: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\"}", + "0/1 -> 2/1: {\\"note\\":\\"E4\\",\\"s\\":\\"sawtooth\\"}", + "0/1 -> 2/1: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\"}", + "0/1 -> 2/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\"}", +] +`; + +exports[`renders tunes > tune: csoundTest2 1`] = ` +[ + "0/1 -> 511525/2531369: {\\"note\\":\\"D3\\"}", + "-1/4 -> -1508319/10125476: {\\"note\\":\\"Bb3\\"}", + "1/4 -> 4577469/10125476: {\\"note\\":\\"F3\\"}", + "0/1 -> 511525/5062738: {\\"note\\":\\"F4\\"}", + "1/2 -> 3554419/5062738: {\\"note\\":\\"C4\\"}", + "-1/4 -> -1508319/10125476: {\\"note\\":\\"A4\\"}", + "1/4 -> 3554419/10125476: {\\"note\\":\\"A4\\"}", + "1/4 -> 3554419/10125476: {\\"note\\":\\"A4\\"}", + "3/4 -> 9640207/10125476: {\\"note\\":\\"E4\\"}", +] +`; + +exports[`renders tunes > tune: csoundTest3 1`] = ` +[ + "0/1 -> 1/1: {\\"note\\":\\"D3\\"}", + "-1/4 -> 1/4: {\\"note\\":\\"Bb3\\"}", + "1/4 -> 5/4: {\\"note\\":\\"F3\\"}", + "0/1 -> 1/2: {\\"note\\":\\"F4\\"}", + "1/2 -> 3/2: {\\"note\\":\\"C4\\"}", + "-1/4 -> 1/4: {\\"note\\":\\"A4\\"}", + "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", + "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", + "3/4 -> 7/4: {\\"note\\":\\"E4\\"}", +] +`; + +exports[`renders tunes > tune: csoundTest4 1`] = ` +[ + "0/1 -> 2/1: {\\"note\\":\\"B3\\",\\"gain\\":0.5}", + "0/1 -> 2/1: {\\"note\\":\\"D4\\",\\"gain\\":0.5}", + "0/1 -> 2/1: {\\"note\\":\\"E4\\",\\"gain\\":0.5}", + "0/1 -> 2/1: {\\"note\\":\\"G4\\",\\"gain\\":0.5}", + "0/1 -> 2/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":800,\\"resonance\\":10,\\"shape\\":0.3}", + "0/1 -> 2/1: {\\"note\\":36.1,\\"s\\":\\"sawtooth\\",\\"cutoff\\":800,\\"resonance\\":10,\\"shape\\":0.3}", +] +`; + exports[`renders tunes > tune: delay 1`] = ` [ "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0,\\"delaytime\\":0.16,\\"delayfeedback\\":0.8,\\"speed\\":-1}", From 517ada6dbf90cd0d8635bb63d3f3ecfa99543912 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 23:02:09 +0100 Subject: [PATCH 13/31] tiny time improvement --- packages/csound/csound.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 80b0fddf1..ab80dd6f4 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -22,7 +22,7 @@ Pattern.prototype._csound = function (instrument) { // http://www.csounds.com/manual/html/i.html const params = [ `"${instrument}"`, // p1: instrument name - time - currentTime, //.toFixed(precision), // p2: starting time in arbitrary unit called beats + time - getAudioContext().currentTime, //.toFixed(precision), // p2: starting time in arbitrary unit called beats hap.duration + 0, // p3: duration in beats // instrument specific params: freq, //.toFixed(precision), // p4: frequency From 6c0b86d8f4b179afce6f2270e34c57f271c77928 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 29 Nov 2022 23:31:23 +0100 Subject: [PATCH 14/31] update tonal, fixes #269 --- package-lock.json | 496 ++++++++++++++++++------------------ packages/tonal/package.json | 2 +- 2 files changed, 249 insertions(+), 249 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f0aee4ad..e7f93bac8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2150,202 +2150,202 @@ "link": true }, "node_modules/@tonaljs/abc-notation": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.0.tgz", - "integrity": "sha512-hYdmq+kugwHRQdK2hLyd19Abet47sNcte8JByukzxRm0A3jlCWG6jkD/hvnej7m+x4yWk7vB1KlOFQemKz7N/A==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.2.tgz", + "integrity": "sha512-MgJ2puyvixrPMswftwJHgHv92H32ZT+NPWL+cgdQGUC8jFYlvH7iWIvfk0uF+Dp1Qv7crg2UEaku60J6Zqy3Qg==", "dependencies": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/array": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.11.tgz", - "integrity": "sha512-r4frzNDC1RjmA48Z3QbuFHjABOLq0U3TzLz+ipEx1y9HtGjLpvZ/Lcl16RhH5a6W/66MS9kmrXstBezTdPXSMw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.7.2.tgz", + "integrity": "sha512-LXd8Kx/1mxn8TBh+0dGqih29YdY2LrcZeYsgK2LvGKKEIgLbXJL/QiatfRZlWmFjYsYX49F5PZjXp4YcNKppZQ==", "dependencies": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/chord": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.0.tgz", - "integrity": "sha512-RgJFsDmWE2KKFzIJmwkL7s8LFGfhASkbO3y/30KdWumRR4MD3v0V8xhFeq6c5TTnPLrXorEjBpwCcCdScj0/QA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.2.tgz", + "integrity": "sha512-us5r1ribkTOLtj0qRdlSd0bTdQHAXrGc2VHo/1zgeXarypwDp3oBzrvBM0JdOpCs7OA05qmyRjSa7WUruDZK2g==", "dependencies": { - "@tonaljs/chord-detect": "^4.7.0", - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/chord-detect": "^4.7.2", + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "node_modules/@tonaljs/chord-detect": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.0.tgz", - "integrity": "sha512-cdSk/aXI+oLBYMkRqcPaw4LWNjVOZk3YTj6EY6saFNutvVlADu9VguzEuSMyV+mH7xlrbVdrOEjmB3n/dIBfaA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.2.tgz", + "integrity": "sha512-v3pazk+rDeIvroiLQ+OaEzm8C/biCgUdgvNTPu//42cSygYIMHH2/CHg+NCMRXeYoovj0Dhy+6zaL4MXubyLvw==", "dependencies": { - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "node_modules/@tonaljs/chord-type": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.0.tgz", - "integrity": "sha512-EgBKNffekZd6T12qSXOpiCazCmo3WkXtKSs6Qby5dEODPCKKjHwEollOdEAB6Qk9FzTv3/2JjbOc7TcjI+gYTQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.2.tgz", + "integrity": "sha512-JppOaVjvh+5TBPZKpkkX/FXzJLFmOzAASZZOLmM6TMgHJnpBaxZhYFuVGXlQcKdwdrQWR/mBrHDhy4pFpJI3zQ==", "dependencies": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "node_modules/@tonaljs/collection": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.0.tgz", - "integrity": "sha512-483PlVCyRfJWPAGNjpNLK2xicsH4oUn4Aue3Taa479M0syxDvvIIZkp1v7Y5soBCZUPPGpeNTMp0w46NJD3AEQ==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.2.tgz", + "integrity": "sha512-5jdv/pwBTiCjIa8LF1tNVutY8gk2snQyVyTfK7k9R6hzxSvSZK9IwcajDGQSiW+IhQv86ITi36wt5r0equ8jAw==" }, "node_modules/@tonaljs/core": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.11.tgz", - "integrity": "sha512-6mw/r286rVL/iMB1KBPoVBspcOEfBD/Fryr5lrLd2Gfw3r5nse3WaIvVsauTkTC3LtvlH7oGh5T3vOUREwT0Hw==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.7.2.tgz", + "integrity": "sha512-zDAyakW8MJY42iqYAR4bBs7vvWQUSlBmiqSi4jEfUmvzqmujPz6zFKk33F6OzSxhVmv6FtZoknU7pe2EUIkX1w==" }, "node_modules/@tonaljs/duration-value": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.0.tgz", - "integrity": "sha512-pVGvFRLOhG0pYQHfxaHWLWh5j/iZv30qaZVlQy87my19keC34JOsXZiqNHm8/HtfRlTBCwfq3ZlELcZoxWMRIA==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.2.tgz", + "integrity": "sha512-xD+rMjwE3MxXwcwUeY3mWRJxNn4EweKAcsOqE3kzfAHF+mFxdVJEQy0jeTTr6gVFFtTrO1av+Q/mczLQhUjgvQ==" }, "node_modules/@tonaljs/interval": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.0.tgz", - "integrity": "sha512-eIyFMJal36lEfbvQr/h4tGgCJyJTB0l41x8usMnrdtPqph+lo3ZQwk4HSXQ4eHLrb7eP5aYVXM5P5ZVXKN8z8w==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.2.tgz", + "integrity": "sha512-TtwiGLkQHvaiI48h2daw6cGLb8BOTwXFqzzD4/KVQPcL6PfaM8iyczob7+aLa4uXsVP0Lh1387wWHOcpYESJng==", "dependencies": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/key": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.0.tgz", - "integrity": "sha512-cJqALas3Kogr7dvmyUfRAP+NmooMR5vvvHVfSRpekiceXRp0GDCV+0RiBvliyDoUNJ7yDa9K7aXwkkj4OTG3fw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.2.tgz", + "integrity": "sha512-k/IkyliLja37NXj+M0eL5UXSoZ47T15D8Iv1xSIKm9b9xseyOdEVehiQnSaSD9UEOmeOFW54OkMn5Z9bqQuV/Q==", "dependencies": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/note": "^4.7.0", - "@tonaljs/roman-numeral": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2" } }, "node_modules/@tonaljs/midi": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.0.tgz", - "integrity": "sha512-kfGurkPXrRMxs01q3YDKicu64vRvYzZLvllLrYT6dgvf4VkYp0rku3cHdArt5nKC5m4QcQh6sszZ7oR51XZaEA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.2.tgz", + "integrity": "sha512-XZVfCbfHsmthrK5Sw0hxeOD66Dqc0WnR25y5gsLSInB8ucqC1QM8Fni2+djdv1H8z2JcTs5HvBXXm65oGjU2ow==", "dependencies": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/mode": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.0.tgz", - "integrity": "sha512-xqVDYuz1kdfdLO88Rbv2X8rRrYDgQghbzY+iW5mXLJZoo/dl9dR4/5iAT6IvjXGfoCOPFWY3cqY3uv0jezWoDQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.2.tgz", + "integrity": "sha512-WFGapvBWzrGDNLEUvYkRpR1CzH+qScS1aOiLwLzSL7JuleI8U6M3dEqKGeRpYanDiUfFOu/OjMdtQqZAxJb/wg==", "dependencies": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/interval": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/interval": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "node_modules/@tonaljs/note": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.0.tgz", - "integrity": "sha512-I1YTvz7WC8T08/7iWAjd2rM/h7EOx+9iUbQUMQKXAj5eHhpsqJy83tRMyXqE2ZTL4W2Z/k5OTy0XsL9zlxs7Hg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.2.tgz", + "integrity": "sha512-1TuvHrbhwK/iDHm2Wla45bIgfzsVLjlMqOptpyz+GKMoGDYYmUO2VuRh7PXv3O8ogtrrO3lPr0gU9P+C6Gt8WA==", "dependencies": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/midi": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/midi": "^4.7.2" } }, "node_modules/@tonaljs/pcset": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.0.tgz", - "integrity": "sha512-sg2paiMxakuVAMGnKeCKsH7bpGiN4uYprgySxWvqmM5vis8ZoleAmFg1vozc452Eu0NTlRlUIjQZtDFMXYrMKA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.2.tgz", + "integrity": "sha512-Bd1QtZIXVCAe73YvVV0d9ssPRauwbk2r5rsa4hAtZULeJr239Mg3WiM1ZF5HIKFvmWIJFpem0IPWCx4cVJ0mEw==", "dependencies": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/progression": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.0.tgz", - "integrity": "sha512-8UBemUK2ksTcCohI/HJD5TEJm56ymoV18OWzO5fKmhPibMR473ccVhJhQdTawiIWUDjbJtIV4uj67VXDqikQbQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.2.tgz", + "integrity": "sha512-TQI/cP1fYMg93IqtZum3aTvWpUtBwRb4kxAfrmPUZy8BozyLsuyVW9G5Edhn7KJX5NBHWZctkdEO3zMwu5TeIQ==", "dependencies": { - "@tonaljs/chord": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/roman-numeral": "^4.7.0" + "@tonaljs/chord": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2" } }, "node_modules/@tonaljs/range": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.0.tgz", - "integrity": "sha512-FE4x3rVbnhuWSekWskhV3A90GCWnfZsRNJSKo9lHc272ub8mDlv0psHL1I4nJzavBM4v+8dOCW4JpGpfOEkB6w==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.2.tgz", + "integrity": "sha512-INxvzf4gRpVkZ4SpEwtVFTKIVQWbjU3o2e8B5Kooxc/UQher0JoK+EVM/g+i+boJANhQYxMvk74O3mMBujLeHg==", "dependencies": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/midi": "^4.7.0" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/midi": "^4.7.2" } }, "node_modules/@tonaljs/roman-numeral": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.0.tgz", - "integrity": "sha512-PNe+G844SfYeLnlDabGU95WSB1V5tB8mrEm1i+nbKBQgWMQD+O3iKH7RyekkX5IS9oyEWxHL1lbEy1bGnCzgJA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.2.tgz", + "integrity": "sha512-Pi90E3VeB5BsAJGHbGraPa/FIEk0gJqs5j1A+gpSvPpwVRlPPV6IFH16InnXGc+Qh5ZGfHHLPjtlsMlaNCX/OA==", "dependencies": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "node_modules/@tonaljs/scale": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.0.tgz", - "integrity": "sha512-8JD/l5rXFN2ySDiNf5m6TEgWHWEuQ9JL1h6bSdJu4+KPtCRSuWrM3t/vJ6jAP8jldGLW53rjIbLSI3dLCGePrQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.2.tgz", + "integrity": "sha512-smZfKAv3LCnK40C/PxO0rENYi23iF4G6/EAUKIVNYr4KoEpGJTJ7BzAGkXPa83x3TA2HHhHXTKYvtMy+Q/IK0Q==", "dependencies": { - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/note": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "node_modules/@tonaljs/scale-type": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.0.tgz", - "integrity": "sha512-GTEanCRqpRCc6AFlxGea1Ms8NEz8shWcNUet7EUDOKxApHUGrHg1IV+d/fypZzdP0fgXJfKa9cX0eNmU62NstA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.2.tgz", + "integrity": "sha512-r5rhs50d01yLvLo6urg6/UQ8T46G+FZsmcBGfFfi1xHquh3DTscdAI8FlqSMVWWNPncM1v/aq4LDhZSiqZtqZw==", "dependencies": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "node_modules/@tonaljs/time-signature": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.0.tgz", - "integrity": "sha512-vADjarvb9V5dgbE3H0twLz5Ho0e/HDEi2m5k+6q2In9AWfGZ9ZIvaRWR8b8MKjrfmvsCN2HeZt+lA5cLPfVbag==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.2.tgz", + "integrity": "sha512-NKLjm4mcidcLFYU3Zg7mTL3rDKmbfmIwjGMCWpHBndSizIu+vuZM56iKECewcytS+ZCucDyd3KkS6zmYjaoLNQ==" }, "node_modules/@tonaljs/tonal": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.11.tgz", - "integrity": "sha512-peoIAamtFU2CCX5+98QaQfFMTPg1CfgS0m1YFXG4Xr14xXgCcgi2ukvoRyt29Orwhs7zSRcIqDBtadNaa7avrA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.7.2.tgz", + "integrity": "sha512-Ht8nIyDXcNNSk4487oXU0ahaV7R0ZBPGJCpP7RpcIMpva9oV0BSncERqHa5FJuSIl5ntwkoyqhg5PWnc5MNMZQ==", "dependencies": { - "@tonaljs/abc-notation": "^4.7.0", - "@tonaljs/array": "^4.6.11", - "@tonaljs/chord": "^4.7.0", - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/duration-value": "^4.7.0", - "@tonaljs/interval": "^4.7.0", - "@tonaljs/key": "^4.7.0", - "@tonaljs/midi": "^4.7.0", - "@tonaljs/mode": "^4.7.0", - "@tonaljs/note": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/progression": "^4.7.0", - "@tonaljs/range": "^4.7.0", - "@tonaljs/roman-numeral": "^4.7.0", - "@tonaljs/scale": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0", - "@tonaljs/time-signature": "^4.7.0" + "@tonaljs/abc-notation": "^4.7.2", + "@tonaljs/array": "^4.7.2", + "@tonaljs/chord": "^4.7.2", + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/duration-value": "^4.7.2", + "@tonaljs/interval": "^4.7.2", + "@tonaljs/key": "^4.7.2", + "@tonaljs/midi": "^4.7.2", + "@tonaljs/mode": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/progression": "^4.7.2", + "@tonaljs/range": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2", + "@tonaljs/scale": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2", + "@tonaljs/time-signature": "^4.7.2" } }, "node_modules/@tootallnate/once": { @@ -13023,7 +13023,7 @@ "license": "AGPL-3.0-or-later", "dependencies": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.11", + "@tonaljs/tonal": "^4.7.2", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" } @@ -14911,7 +14911,7 @@ "version": "file:packages/tonal", "requires": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.11", + "@tonaljs/tonal": "^4.7.2", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" }, @@ -14970,202 +14970,202 @@ } }, "@tonaljs/abc-notation": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.0.tgz", - "integrity": "sha512-hYdmq+kugwHRQdK2hLyd19Abet47sNcte8JByukzxRm0A3jlCWG6jkD/hvnej7m+x4yWk7vB1KlOFQemKz7N/A==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.7.2.tgz", + "integrity": "sha512-MgJ2puyvixrPMswftwJHgHv92H32ZT+NPWL+cgdQGUC8jFYlvH7iWIvfk0uF+Dp1Qv7crg2UEaku60J6Zqy3Qg==", "requires": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/array": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.11.tgz", - "integrity": "sha512-r4frzNDC1RjmA48Z3QbuFHjABOLq0U3TzLz+ipEx1y9HtGjLpvZ/Lcl16RhH5a6W/66MS9kmrXstBezTdPXSMw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.7.2.tgz", + "integrity": "sha512-LXd8Kx/1mxn8TBh+0dGqih29YdY2LrcZeYsgK2LvGKKEIgLbXJL/QiatfRZlWmFjYsYX49F5PZjXp4YcNKppZQ==", "requires": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/chord": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.0.tgz", - "integrity": "sha512-RgJFsDmWE2KKFzIJmwkL7s8LFGfhASkbO3y/30KdWumRR4MD3v0V8xhFeq6c5TTnPLrXorEjBpwCcCdScj0/QA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.7.2.tgz", + "integrity": "sha512-us5r1ribkTOLtj0qRdlSd0bTdQHAXrGc2VHo/1zgeXarypwDp3oBzrvBM0JdOpCs7OA05qmyRjSa7WUruDZK2g==", "requires": { - "@tonaljs/chord-detect": "^4.7.0", - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/chord-detect": "^4.7.2", + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "@tonaljs/chord-detect": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.0.tgz", - "integrity": "sha512-cdSk/aXI+oLBYMkRqcPaw4LWNjVOZk3YTj6EY6saFNutvVlADu9VguzEuSMyV+mH7xlrbVdrOEjmB3n/dIBfaA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.7.2.tgz", + "integrity": "sha512-v3pazk+rDeIvroiLQ+OaEzm8C/biCgUdgvNTPu//42cSygYIMHH2/CHg+NCMRXeYoovj0Dhy+6zaL4MXubyLvw==", "requires": { - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "@tonaljs/chord-type": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.0.tgz", - "integrity": "sha512-EgBKNffekZd6T12qSXOpiCazCmo3WkXtKSs6Qby5dEODPCKKjHwEollOdEAB6Qk9FzTv3/2JjbOc7TcjI+gYTQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.7.2.tgz", + "integrity": "sha512-JppOaVjvh+5TBPZKpkkX/FXzJLFmOzAASZZOLmM6TMgHJnpBaxZhYFuVGXlQcKdwdrQWR/mBrHDhy4pFpJI3zQ==", "requires": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "@tonaljs/collection": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.0.tgz", - "integrity": "sha512-483PlVCyRfJWPAGNjpNLK2xicsH4oUn4Aue3Taa479M0syxDvvIIZkp1v7Y5soBCZUPPGpeNTMp0w46NJD3AEQ==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.7.2.tgz", + "integrity": "sha512-5jdv/pwBTiCjIa8LF1tNVutY8gk2snQyVyTfK7k9R6hzxSvSZK9IwcajDGQSiW+IhQv86ITi36wt5r0equ8jAw==" }, "@tonaljs/core": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.11.tgz", - "integrity": "sha512-6mw/r286rVL/iMB1KBPoVBspcOEfBD/Fryr5lrLd2Gfw3r5nse3WaIvVsauTkTC3LtvlH7oGh5T3vOUREwT0Hw==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.7.2.tgz", + "integrity": "sha512-zDAyakW8MJY42iqYAR4bBs7vvWQUSlBmiqSi4jEfUmvzqmujPz6zFKk33F6OzSxhVmv6FtZoknU7pe2EUIkX1w==" }, "@tonaljs/duration-value": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.0.tgz", - "integrity": "sha512-pVGvFRLOhG0pYQHfxaHWLWh5j/iZv30qaZVlQy87my19keC34JOsXZiqNHm8/HtfRlTBCwfq3ZlELcZoxWMRIA==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.7.2.tgz", + "integrity": "sha512-xD+rMjwE3MxXwcwUeY3mWRJxNn4EweKAcsOqE3kzfAHF+mFxdVJEQy0jeTTr6gVFFtTrO1av+Q/mczLQhUjgvQ==" }, "@tonaljs/interval": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.0.tgz", - "integrity": "sha512-eIyFMJal36lEfbvQr/h4tGgCJyJTB0l41x8usMnrdtPqph+lo3ZQwk4HSXQ4eHLrb7eP5aYVXM5P5ZVXKN8z8w==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.7.2.tgz", + "integrity": "sha512-TtwiGLkQHvaiI48h2daw6cGLb8BOTwXFqzzD4/KVQPcL6PfaM8iyczob7+aLa4uXsVP0Lh1387wWHOcpYESJng==", "requires": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/key": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.0.tgz", - "integrity": "sha512-cJqALas3Kogr7dvmyUfRAP+NmooMR5vvvHVfSRpekiceXRp0GDCV+0RiBvliyDoUNJ7yDa9K7aXwkkj4OTG3fw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.7.2.tgz", + "integrity": "sha512-k/IkyliLja37NXj+M0eL5UXSoZ47T15D8Iv1xSIKm9b9xseyOdEVehiQnSaSD9UEOmeOFW54OkMn5Z9bqQuV/Q==", "requires": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/note": "^4.7.0", - "@tonaljs/roman-numeral": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2" } }, "@tonaljs/midi": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.0.tgz", - "integrity": "sha512-kfGurkPXrRMxs01q3YDKicu64vRvYzZLvllLrYT6dgvf4VkYp0rku3cHdArt5nKC5m4QcQh6sszZ7oR51XZaEA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.7.2.tgz", + "integrity": "sha512-XZVfCbfHsmthrK5Sw0hxeOD66Dqc0WnR25y5gsLSInB8ucqC1QM8Fni2+djdv1H8z2JcTs5HvBXXm65oGjU2ow==", "requires": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/mode": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.0.tgz", - "integrity": "sha512-xqVDYuz1kdfdLO88Rbv2X8rRrYDgQghbzY+iW5mXLJZoo/dl9dR4/5iAT6IvjXGfoCOPFWY3cqY3uv0jezWoDQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.7.2.tgz", + "integrity": "sha512-WFGapvBWzrGDNLEUvYkRpR1CzH+qScS1aOiLwLzSL7JuleI8U6M3dEqKGeRpYanDiUfFOu/OjMdtQqZAxJb/wg==", "requires": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/interval": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/interval": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "@tonaljs/note": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.0.tgz", - "integrity": "sha512-I1YTvz7WC8T08/7iWAjd2rM/h7EOx+9iUbQUMQKXAj5eHhpsqJy83tRMyXqE2ZTL4W2Z/k5OTy0XsL9zlxs7Hg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.7.2.tgz", + "integrity": "sha512-1TuvHrbhwK/iDHm2Wla45bIgfzsVLjlMqOptpyz+GKMoGDYYmUO2VuRh7PXv3O8ogtrrO3lPr0gU9P+C6Gt8WA==", "requires": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/midi": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/midi": "^4.7.2" } }, "@tonaljs/pcset": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.0.tgz", - "integrity": "sha512-sg2paiMxakuVAMGnKeCKsH7bpGiN4uYprgySxWvqmM5vis8ZoleAmFg1vozc452Eu0NTlRlUIjQZtDFMXYrMKA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.7.2.tgz", + "integrity": "sha512-Bd1QtZIXVCAe73YvVV0d9ssPRauwbk2r5rsa4hAtZULeJr239Mg3WiM1ZF5HIKFvmWIJFpem0IPWCx4cVJ0mEw==", "requires": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/progression": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.0.tgz", - "integrity": "sha512-8UBemUK2ksTcCohI/HJD5TEJm56ymoV18OWzO5fKmhPibMR473ccVhJhQdTawiIWUDjbJtIV4uj67VXDqikQbQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.7.2.tgz", + "integrity": "sha512-TQI/cP1fYMg93IqtZum3aTvWpUtBwRb4kxAfrmPUZy8BozyLsuyVW9G5Edhn7KJX5NBHWZctkdEO3zMwu5TeIQ==", "requires": { - "@tonaljs/chord": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/roman-numeral": "^4.7.0" + "@tonaljs/chord": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2" } }, "@tonaljs/range": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.0.tgz", - "integrity": "sha512-FE4x3rVbnhuWSekWskhV3A90GCWnfZsRNJSKo9lHc272ub8mDlv0psHL1I4nJzavBM4v+8dOCW4JpGpfOEkB6w==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.7.2.tgz", + "integrity": "sha512-INxvzf4gRpVkZ4SpEwtVFTKIVQWbjU3o2e8B5Kooxc/UQher0JoK+EVM/g+i+boJANhQYxMvk74O3mMBujLeHg==", "requires": { - "@tonaljs/collection": "^4.7.0", - "@tonaljs/midi": "^4.7.0" + "@tonaljs/collection": "^4.7.2", + "@tonaljs/midi": "^4.7.2" } }, "@tonaljs/roman-numeral": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.0.tgz", - "integrity": "sha512-PNe+G844SfYeLnlDabGU95WSB1V5tB8mrEm1i+nbKBQgWMQD+O3iKH7RyekkX5IS9oyEWxHL1lbEy1bGnCzgJA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.7.2.tgz", + "integrity": "sha512-Pi90E3VeB5BsAJGHbGraPa/FIEk0gJqs5j1A+gpSvPpwVRlPPV6IFH16InnXGc+Qh5ZGfHHLPjtlsMlaNCX/OA==", "requires": { - "@tonaljs/core": "^4.6.11" + "@tonaljs/core": "^4.7.2" } }, "@tonaljs/scale": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.0.tgz", - "integrity": "sha512-8JD/l5rXFN2ySDiNf5m6TEgWHWEuQ9JL1h6bSdJu4+KPtCRSuWrM3t/vJ6jAP8jldGLW53rjIbLSI3dLCGePrQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.7.2.tgz", + "integrity": "sha512-smZfKAv3LCnK40C/PxO0rENYi23iF4G6/EAUKIVNYr4KoEpGJTJ7BzAGkXPa83x3TA2HHhHXTKYvtMy+Q/IK0Q==", "requires": { - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/note": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0" + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2" } }, "@tonaljs/scale-type": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.0.tgz", - "integrity": "sha512-GTEanCRqpRCc6AFlxGea1Ms8NEz8shWcNUet7EUDOKxApHUGrHg1IV+d/fypZzdP0fgXJfKa9cX0eNmU62NstA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.7.2.tgz", + "integrity": "sha512-r5rhs50d01yLvLo6urg6/UQ8T46G+FZsmcBGfFfi1xHquh3DTscdAI8FlqSMVWWNPncM1v/aq4LDhZSiqZtqZw==", "requires": { - "@tonaljs/core": "^4.6.11", - "@tonaljs/pcset": "^4.7.0" + "@tonaljs/core": "^4.7.2", + "@tonaljs/pcset": "^4.7.2" } }, "@tonaljs/time-signature": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.0.tgz", - "integrity": "sha512-vADjarvb9V5dgbE3H0twLz5Ho0e/HDEi2m5k+6q2In9AWfGZ9ZIvaRWR8b8MKjrfmvsCN2HeZt+lA5cLPfVbag==" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.7.2.tgz", + "integrity": "sha512-NKLjm4mcidcLFYU3Zg7mTL3rDKmbfmIwjGMCWpHBndSizIu+vuZM56iKECewcytS+ZCucDyd3KkS6zmYjaoLNQ==" }, "@tonaljs/tonal": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.11.tgz", - "integrity": "sha512-peoIAamtFU2CCX5+98QaQfFMTPg1CfgS0m1YFXG4Xr14xXgCcgi2ukvoRyt29Orwhs7zSRcIqDBtadNaa7avrA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.7.2.tgz", + "integrity": "sha512-Ht8nIyDXcNNSk4487oXU0ahaV7R0ZBPGJCpP7RpcIMpva9oV0BSncERqHa5FJuSIl5ntwkoyqhg5PWnc5MNMZQ==", "requires": { - "@tonaljs/abc-notation": "^4.7.0", - "@tonaljs/array": "^4.6.11", - "@tonaljs/chord": "^4.7.0", - "@tonaljs/chord-type": "^4.7.0", - "@tonaljs/collection": "^4.7.0", - "@tonaljs/core": "^4.6.11", - "@tonaljs/duration-value": "^4.7.0", - "@tonaljs/interval": "^4.7.0", - "@tonaljs/key": "^4.7.0", - "@tonaljs/midi": "^4.7.0", - "@tonaljs/mode": "^4.7.0", - "@tonaljs/note": "^4.7.0", - "@tonaljs/pcset": "^4.7.0", - "@tonaljs/progression": "^4.7.0", - "@tonaljs/range": "^4.7.0", - "@tonaljs/roman-numeral": "^4.7.0", - "@tonaljs/scale": "^4.7.0", - "@tonaljs/scale-type": "^4.7.0", - "@tonaljs/time-signature": "^4.7.0" + "@tonaljs/abc-notation": "^4.7.2", + "@tonaljs/array": "^4.7.2", + "@tonaljs/chord": "^4.7.2", + "@tonaljs/chord-type": "^4.7.2", + "@tonaljs/collection": "^4.7.2", + "@tonaljs/core": "^4.7.2", + "@tonaljs/duration-value": "^4.7.2", + "@tonaljs/interval": "^4.7.2", + "@tonaljs/key": "^4.7.2", + "@tonaljs/midi": "^4.7.2", + "@tonaljs/mode": "^4.7.2", + "@tonaljs/note": "^4.7.2", + "@tonaljs/pcset": "^4.7.2", + "@tonaljs/progression": "^4.7.2", + "@tonaljs/range": "^4.7.2", + "@tonaljs/roman-numeral": "^4.7.2", + "@tonaljs/scale": "^4.7.2", + "@tonaljs/scale-type": "^4.7.2", + "@tonaljs/time-signature": "^4.7.2" } }, "@tootallnate/once": { diff --git a/packages/tonal/package.json b/packages/tonal/package.json index 494bb18ef..d43aab45e 100644 --- a/packages/tonal/package.json +++ b/packages/tonal/package.json @@ -26,7 +26,7 @@ "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { "@strudel.cycles/core": "^0.4.0", - "@tonaljs/tonal": "^4.6.11", + "@tonaljs/tonal": "^4.7.2", "chord-voicings": "^0.0.1", "webmidi": "^3.0.21" } From 9052ff71e61934e3f6d639df8b7ee19099c6bec3 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 12:34:26 +0100 Subject: [PATCH 15/31] get rid of csound warning on reevaluation: - only compile on init, use evalCode after - pull presets into csd file - use custom logging --- packages/csound/csound.mjs | 61 +++++++++++++++++-------- packages/csound/{csd.mjs => sounds.csd} | 39 ++++++---------- 2 files changed, 55 insertions(+), 45 deletions(-) rename packages/csound/{csd.mjs => sounds.csd} (63%) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index ab80dd6f4..03a539dc5 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -1,7 +1,7 @@ import { getFrequency, logger, Pattern } from '@strudel.cycles/core'; import { Csound } from '@csound/browser'; // TODO: use dynamic import for code splitting.. -import { csd } from './csd.mjs'; import { getAudioContext } from '@strudel.cycles/webaudio'; +import csd from './sounds.csd?raw'; let csoundLoader, _csound; @@ -30,30 +30,53 @@ Pattern.prototype._csound = function (instrument) { gain, // p5: gain ]; const msg = `i ${params.join(' ')}`; - // console.log('msg', msg); _csound.inputMessage(msg); - // _csound.readScore(msg); // slower alternative - // even slower alternative: - /* const code = `schedule(${params.join(', ')})`; - _csound.evalCode(code); */ }); }; // initializes csound + can be used to reevaluate given instrument code export async function csound(code = '') { - code = csd(code); - let isInit = false; - if (!csoundLoader) { - isInit = true; - csoundLoader = (async () => { - _csound = await Csound({ audioContext: getAudioContext() }); - await _csound.setOption('-m0'); - await _csound.compileCsdText(code); - await _csound.start(); - })(); - } + csoundLoader = csoundLoader || init(); await csoundLoader; - !isInit && (await _csound?.compileCsdText(code)); + code && (await _csound?.evalCode(`${code}`)); + // ^ ^ + // wrapping in backticks makes sure it works when calling as templated function +} + +Pattern.prototype.define('csound', (a, pat) => pat.csound(a), { composable: false, patternified: true }); + +function eventLogger(type, args) { + const [msg] = args; + if ( + type === 'message' && + (['[commit: HEAD]'].includes(msg) || + msg.startsWith('--Csound version') || + msg.startsWith('libsndfile') || + msg.startsWith('sr =') || + msg.startsWith('0dBFS') || + msg.startsWith('audio buffered') || + msg.startsWith('writing') || + msg.startsWith('SECTION 1:')) + ) { + // ignore + return; + } + let logType = 'info'; + if (msg.startsWith('error:')) { + logType = 'error'; + } + logger(`[csound] ${msg || ''}`, logType); +} + +async function init() { + _csound = await Csound({ audioContext: getAudioContext() }); + _csound.removeAllListeners('message'); + ['message'].forEach((k) => _csound.on(k, (...args) => eventLogger(k, args))); + await _csound.setOption('-m0'); // see -m flag https://csound.com/docs/manual/CommandFlags.html + await _csound.setOption('--sample-accurate'); + await _csound.compileCsdText(csd); + await _csound.start(); + return _csound; } // experimental: allows using jsx to eval csound @@ -68,5 +91,3 @@ export function CsInstruments(text) { } return csound(text); } - -Pattern.prototype.define('csound', (a, pat) => pat.csound(a), { composable: false, patternified: true }); diff --git a/packages/csound/csd.mjs b/packages/csound/sounds.csd similarity index 63% rename from packages/csound/csd.mjs rename to packages/csound/sounds.csd index 67adbb3e3..aafea9a46 100644 --- a/packages/csound/csd.mjs +++ b/packages/csound/sounds.csd @@ -1,9 +1,4 @@ -export function csd(code = '') { - return ` - --o dac --port=10000 --sample-accurate - sr=48000 ksmps=64 @@ -36,25 +31,19 @@ instr organ endin instr triangle - iduration = p3 - ifreq = p4 - igain = p5 - ioct = octcps(ifreq) - - asig = vco2(igain, ifreq, 12, .5) - - ; amp envelope - iattack = .001 - irelease = .05 - asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) - - out(asig, asig) - + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + asig = vco2(igain, ifreq, 12, .5) + + ; amp envelope + iattack = .001 + irelease = .05 + asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) + + out(asig, asig) endin - -${code} - - -`; -} + \ No newline at end of file From d78da55f54bdeaece907a92f22ddab785ce0edcd Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 14:36:00 +0100 Subject: [PATCH 16/31] lazy init + add livecode.org --- packages/csound/csound.mjs | 19 +- packages/csound/livecode.orc | 2226 ++++++++++++++++++++ packages/csound/project.csd | 10 + packages/csound/{sounds.csd => sounds.orc} | 11 +- 4 files changed, 2251 insertions(+), 15 deletions(-) create mode 100644 packages/csound/livecode.orc create mode 100644 packages/csound/project.csd rename packages/csound/{sounds.csd => sounds.orc} (87%) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 03a539dc5..21ad9c95e 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -1,13 +1,16 @@ import { getFrequency, logger, Pattern } from '@strudel.cycles/core'; -import { Csound } from '@csound/browser'; // TODO: use dynamic import for code splitting.. import { getAudioContext } from '@strudel.cycles/webaudio'; -import csd from './sounds.csd?raw'; +import csd from './project.csd?raw'; +import orc from './livecode.orc?raw'; +// import orc from './sounds.orc?raw'; let csoundLoader, _csound; // triggers given instrument name using csound. expects csound function to be called in advance `await csound()` Pattern.prototype._csound = function (instrument) { instrument = instrument || 'triangle'; + init(); // not async to support csound inside other patterns + to be able to call pattern methods after it + // TODO: find a alternative way to wait for csound to load (to wait with first time playback) return this.onTrigger((time, hap, currentTime) => { if (!_csound) { logger('[csound] not loaded yet', 'warning'); @@ -36,8 +39,7 @@ Pattern.prototype._csound = function (instrument) { // initializes csound + can be used to reevaluate given instrument code export async function csound(code = '') { - csoundLoader = csoundLoader || init(); - await csoundLoader; + await init(); code && (await _csound?.evalCode(`${code}`)); // ^ ^ // wrapping in backticks makes sure it works when calling as templated function @@ -68,17 +70,24 @@ function eventLogger(type, args) { logger(`[csound] ${msg || ''}`, logType); } -async function init() { +async function load() { + const { Csound } = await import('@csound/browser'); _csound = await Csound({ audioContext: getAudioContext() }); _csound.removeAllListeners('message'); ['message'].forEach((k) => _csound.on(k, (...args) => eventLogger(k, args))); await _csound.setOption('-m0'); // see -m flag https://csound.com/docs/manual/CommandFlags.html await _csound.setOption('--sample-accurate'); await _csound.compileCsdText(csd); + await _csound.compileOrc(orc); await _csound.start(); return _csound; } +async function init() { + csoundLoader = csoundLoader || load(); + return csoundLoader; +} + // experimental: allows using jsx to eval csound window.jsxPragma = function (fn, args, text) { return fn(text); diff --git a/packages/csound/livecode.orc b/packages/csound/livecode.orc new file mode 100644 index 000000000..cb16760af --- /dev/null +++ b/packages/csound/livecode.orc @@ -0,0 +1,2226 @@ +/* + Live Coding Functions + Author: Steven Yi +*/ + +instr S1 + ifreq = p4 + iamp = p5 +endin + +instr P1 + ibeat = p4 +endin + +;; TIME + +gk_tempo init 120 + + +/** Set tempo of global clock to itempo value in beats per minute. */ +opcode set_tempo,0,i + itempo xin + gk_tempo init itempo +endop + +/** Returns tempo of global clock in beats per minute. */ +opcode get_tempo,i,0 + xout i(gk_tempo) +endop + +/** Adjust tempo of global clock towards by inewtempo by incr amount. */ +opcode go_tempo, 0, ii + inewtempo, incr xin + + icurtempo = i(gk_tempo) + itemp init icurtempo + + if(inewtempo > icurtempo) ithen + itemp = min:i(inewtempo, icurtempo + abs(incr)) + gk_tempo init itemp + elseif (inewtempo < icurtempo) ithen + itemp = max:i(inewtempo, icurtempo - abs(incr)) + gk_tempo init itemp + endif +endop + +instr Perform + ibeat = p4 + + schedule("P1", 0, p3, ibeat) +endin + + +gk_clock_internal init 0 +gk_clock_tick init 0 +gk_now init 0 + +/** Returns value of now beat time + (Code used from Thorin Kerr's LivecodeLib.csd) */ +opcode now, i, 0 + xout i(gk_now) +endop + +/** Returns current clock tick at init time */ +opcode now_tick, i, 0 + xout i(gk_clock_tick) +endop + +/** Returns duration of time in given number of beats (quarter notes) */ +opcode beats, i, i + inumbeats xin + ibeatdur = divz(60, i(gk_tempo), -1) + xout ibeatdur * inumbeats +endop + +/** Returns duration of time in given number of measures (4 quarter notes) */ +opcode measures, i, i + inummeasures xin + xout beats(inummeasures * 4) +endop + +/** Returns duration of time in given number of ticks (16th notes) */ +opcode ticks, i, i + inumbeats xin + ibeatdur = divz(60, i(gk_tempo), -1) + ibeatdur = ibeatdur / 4 + xout ibeatdur * inumbeats +endop + +/** Returns time from now for next beat, rounding to align + on beat boundary. + (Code used from Thorin Kerr's LivecodeLib.csd) */ +opcode next_beat, i, p + ibeatcount xin + inow = now() + ibc = frac(ibeatcount) + inudge = int(ibeatcount) + iresult = inudge + ibc + (round(divz(inow, ibc, inow)) * (ibc == 0 ? 1 : ibc)) - inow + xout beats(iresult) +endop + +/** Returns time from now for next measure, rounding to align to measure + boundary. */ +opcode next_measure, i,0 + inow = now() % 4 + ival = 4 - inow + if(ival < 0.25) then + ival += 4 + endif + inext = beats(ival) + xout inext +endop + +/** Reset clock so that next tick starts at 0 */ +opcode reset_clock, 0, 0 + gk_clock_internal init 0 + gk_clock_tick init -1 + gk_now init -(ksmps / sr) +endop + +/** Adjust clock by iadjust number of beats. + Value may be positive or negative. */ +opcode adjust_clock, 0, i + iadjust xin + gk_now init i(gk_now) + iadjust +endop + + +instr Clock ;; our clock + ;; tick at 1/16th note + kfreq = (4 * gk_tempo) / 60 ;; frequency of 16th note + kdur = 1 / kfreq ;; duration of 16th note in seconds + kstep = (gk_tempo / 60) / kr ;; step size in quarter notes per buffer + kstep16th = kfreq / kr ;; step size in 16th notes per buffer + gk_now += kstep ;; advance beat clock + gk_clock_internal += kstep16th ;; advance 16th note clock + + // checks if next buffer will be one where clock will + // trigger. If so, then schedule event for time 0 + // which will get processed next buffer. + if(gk_clock_internal + kstep16th >= 1.0 ) then + gk_clock_internal -= 1.0 + gk_clock_tick += 1 + event("i", "Perform", 0, kdur, gk_clock_tick) + endif +endin + +;; Randomization + +/** Given a random chance value between 0 and 1, calculates a random value and +returns 1 if value is less than chance value. For example, giving a value of 0.7, +it can read as "70 percent of time, return 1; else 0" */ +opcode choose, i, i + iamount xin + ival = 0 + + if(random(0,1) < limit:i(iamount, 0, 1)) then + ival = 1 + endif + xout ival +endop + +;; Array Functions + +/** Cycles through karray using index. */ +opcode cycle, i, ik[] + indx, kvals[] xin + ival = i(kvals, indx % lenarray(kvals)) + xout ival +endop + + +/** Checks to see if item exists within array. Returns 1 if + true and 0 if false. */ +opcode contains, i, ii[] + ival, iarr[] xin + indx = 0 + iret = 0 + while (indx < lenarray:i(iarr)) do + if (iarr[indx] == ival) then + iret = 1 + igoto end + endif + indx += 1 + od +end: + xout iret +endop + +/** Checks to see if item exists within array. Returns 1 if + true and 0 if false. */ +opcode contains, i, ik[] + ival, karr[] xin + indx = 0 + iret = 0 + while (indx < lenarray:i(karr)) do + if (i(karr,indx) == ival) then + iret = 1 + igoto end + endif + indx += 1 + od +end: + xout iret +endop + +/** Create a new array by removing all instances of a +given number from an existing array. */ +opcode remove, k[], ik[] + ival, karr[] xin + + ifound = 0 + indx = 0 + while (indx < lenarray:i(karr)) do + if(i(karr, indx) == ival) then + ifound += 1 + endif + indx += 1 + od + + kout[] init (lenarray:i(karr) - ifound) + + indx = 0 + iwriteIndx = 0 + + while (indx < lenarray:i(karr)) do + iv = i(karr, indx) + if(iv != ival) then + kout[iwriteIndx] init iv + iwriteIndx += 1 + endif + indx += 1 + od + + xout kout +endop + +/** Returns random item from karray. */ +opcode rand, i, k[] + kvals[] xin + indx = int(random(0, lenarray(kvals))) + ival = i(kvals, indx) + xout ival +endop + +/** Returns random item from String array. */ +opcode rand, S, S[] + Svals[] xin + indx = int(random(0, lenarray(Svals))) + Sval = Svals[indx] + xout Sval +endop + +/** Returns random item from karray. */ +opcode randk, k, k[] + kvals[] xin + kndx = int(random:k(0, lenarray:k(kvals))) + kval = kvals[kndx] + xout kval +endop + +/** Returns random item from karray. */ +opcode randk, S, S[] + Svals[] xin + kndx = int(random:k(0, lenarray:k(Svals))) + Sval = Svals[kndx] + xout Sval +endop + + +;; Event + +/** Wrapper opcode that calls schedule only if iamp > 0 and ifreq > 0. */ +opcode cause, 0, Siiii + Sinstr, istart, idur, ifreq, iamp xin + if(ifreq > 0 && iamp > 0) then + schedule(Sinstr, istart, idur, ifreq, iamp) + endif +endop + +;; Beats + +/** Given a hexadecimal beat string pattern and optional +itick (defaults to current now_tick()), returns value 1 if +the given tick matches a hit in the hexadecimal beat, or +returns 0 otherwise. */ +opcode hexbeat, i, So + Spat, itick xin + + if(itick <= 0) then + itick = now_tick() + endif + + istrlen = strlen(Spat) + + iout = 0 + + if (istrlen > 0) then + ;; 4 bits/beats per hex value + ipatlen = strlen(Spat) * 4 + ;; get beat within pattern length + itick = itick % ipatlen + ;; figure which hex value to use from string + ipatidx = int(itick / 4) + ;; figure out which bit from hex to use + ibitidx = itick % 4 + + ;; convert individual hex from string to decimal/binary + ibeatPat = strtol(strcat("0x", strsub(Spat, ipatidx, ipatidx + 1))) + + ;; bit shift/mask to check onset from hex's bits + iout = (ibeatPat >> (3 - ibitidx)) & 1 + endif + + xout iout + +endop + + +/** Given hex beat pattern, use given itick to fire + events for given instrument, duration, frequency, and + amplitude */ +opcode hexplay, 0, SiSiip + Spat, itick, Sinstr, idur, ifreq, iamp xin + + if(ifreq > 0 && iamp > 0 && strlen(Sinstr) > 0 && hexbeat(Spat, itick) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp ) + endif +endop + +/** Given hex beat pattern, use global clock to fire + events for given instrument, duration, frequency, and + amplitude */ +opcode hexplay, 0, SSiip + Spat, Sinstr, idur, ifreq, iamp xin + + itick = i(gk_clock_tick) + + if(ifreq > 0 && iamp > 0 && strlen(Sinstr) > 0 && hexbeat(Spat, itick) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp ) + endif +endop + + +/** Given an octal beat string pattern and optional +itick (defaults to current now_tick()), returns value 1 if +the given tick matches a hit in the octal beat, or +returns 0 otherwise. */ +opcode octalbeat, i, Si + Spat, itick xin + + ;; 3 bits/beats per octal value + ipatlen = strlen(Spat) * 4 + ;; get beat within pattern length + itick = itick % ipatlen + ;; figure which octal value to use from string + ipatidx = int(itick / 3) + ;; figure out which bit from octal to use + ibitidx = itick % 3 + + ;; convert individual octal from string to decimal/binary + ibeatPat = strtol(strcat("0", strsub(Spat, ipatidx, ipatidx + 1))) + + ;; bit shift/mask to check onset from hex's bits + xout (ibeatPat >> (2 - ibitidx)) & 1 + +endop + +opcode octalplay, 0, SiSiip + Spat, ibeat, Sinstr, idur, ifreq, iamp xin + + if(octalbeat(Spat, ibeat) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp ) + endif +endop + +opcode octalplay, 0, SSiip + Spat, Sinstr, idur, ifreq, iamp xin + + itick = i(gk_clock_tick) + + if(octalbeat(Spat, itick) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp ) + endif +endop + +;; Phase Functions + +/** Given count and period, return phase value in range [0-1) */ +opcode phs, i, ii + icount, iperiod xin + xout (icount % iperiod) / iperiod +endop + +/** Given period in ticks, return current phase of global + clock in range [0-1) */ +opcode phs, i, i + iticks xin + xout (i(gk_clock_tick) % iticks) / iticks +endop + +/** Given period in beats, return current phase of global + clock in range [0-1) */ +opcode phsb, i, i + ibeats xin + iticks = ibeats * 4 + xout (i(gk_clock_tick) % iticks) / iticks +endop + +/** Given period in measures, return current phase of global + clock in range [0-1) */ +opcode phsm, i, i + imeasures xin + iticks = imeasures * 4 * 4 + xout (i(gk_clock_tick) % iticks) / iticks +endop + + +;; Iterative Euclidean Beat Generator +;; Returns string of 1 and 0's +opcode euclid_str, S, ii + ihits, isteps xin + + Sleft = "1" + Sright = "0" + + ileft = ihits + iright = isteps - ileft + + while iright > 1 do + if (iright > ileft) then + iright = iright - ileft + Sleft = strcat(Sleft, Sright) + else + itemp = iright + iright = ileft - iright + ileft = itemp + Stemp = Sleft + Sleft = strcat(Sleft, Sright) + Sright = Stemp + endif + od + + Sout = "" + indx = 0 + while (indx < ileft) do + Sout = strcat(Sout, Sleft) + indx += 1 + od + indx = 0 + while (indx < iright) do + Sout = strcat(Sout, Sright) + indx += 1 + od + + xout Sout +endop + + +/** Given number of ihits for a period of isteps and an optional +itick (defaults to current now_tick()), returns value 1 if +the given tick matches a hit in the euclidean rhythm, or +returns 0 otherwise. */ +opcode euclid, i, iio + ihits, isteps, itick xin + + if(itick <= 0) then + itick = now_tick() + endif + + Sval = euclid_str(ihits, isteps) + indx = itick % strlen(Sval) + xout strtol(strsub(Sval, indx, indx + 1)) +endop + +opcode euclidplay, 0, iiiSiip + ihits, isteps, itick, Sinstr, idur, ifreq, iamp xin + + if(euclid(ihits, isteps, itick) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp) + endif +endop + + +opcode euclidplay, 0, iiSiip + ihits, isteps, Sinstr, idur, ifreq, iamp xin + + itick = i(gk_clock_tick) + + if(euclid(ihits, isteps, itick) == 1) then + schedule(Sinstr, 0, idur, ifreq, iamp) + endif +endop + +;; Phase-based Oscillators + +/** Returns cosine of given phase (0-1.0) */ +opcode xcos, i,i + iphase xin + xout cos(2 * $M_PI * iphase) +endop + +/** Range version of xcos, similar to Impromptu's cosr */ +opcode xcos, i,iii + iphase, ioffset, irange xin + xout ioffset + (cos(2 * $M_PI * iphase) * irange) +endop + +/** Returns sine of given phase (0-1.0) */ +opcode xsin, i,i + iphase xin + xout sin(2 * $M_PI * iphase) +endop + +/** Range version of xsin, similar to Impromptu's sinr */ +opcode xsin, i,iii + iphase, ioffset, irange xin + xout ioffset + (sin(2 * $M_PI * iphase) * irange) +endop + +/** Non-interpolating oscillator. Given phase in range 0-1, +returns value within the give k-array table. */ +opcode xosc, i, ik[] + iphase, kvals[] xin + indx = int(lenarray:i(kvals) * (iphase % 1)) + xout i(kvals, indx) +endop + + +/** Non-interpolating oscillator. Given phase duration in beats, +returns value within the give k-array table. (shorthand for xosc(phsb(ibeats), karr) )*/ +opcode xoscb, i,ik[] + ibeats, kvals[] xin + xout xosc(phsb(ibeats), kvals) +endop + +/** Non-interpolating oscillator. Given phase duration in measures, +returns value within the give k-array table. (shorthand for xosc(phsm(ibeats), karr) )*/ +opcode xoscm, i, ik[] + ibeats, kvals[] xin + xout xosc(phsm(ibeats), kvals) +endop + + +/** Linearly-interpolating oscillator. Given phase in range 0-1, +returns value intepolated within the two closest points of phase within k-array +table. */ +opcode xosci, i, ik[] + iphase, kvals[] xin + ilen = lenarray:i(kvals) + indx = ilen * (iphase % 1) + ibase = int(indx) + ifrac = indx - ibase + + iv0 = i(kvals, ibase) + iv1 = i(kvals, (ibase + 1) % ilen) + xout iv0 + (iv1 - iv0) * ifrac +endop + + +/** Linearly-interpolating oscillator. Given phase duration in beats, +returns value intepolated within the two closest points of phase within k-array +table. (shorthand for xosci(phsb(ibeats), karr) )*/ +opcode xoscib, i,ik[] + ibeats, kvals[] xin + xout xosci(phsb(ibeats), kvals) +endop + +/** Linearly-interpolating oscillator. Given phase duration in measures, +returns value intepolated within the two closest points of phase within k-array +table. (shorthand for xosci(phsm(ibeats), karr) )*/ +opcode xoscim, i,ik[] + ibeats, kvals[] xin + xout xosci(phsm(ibeats), kvals) +endop + +/** Line (Ramp) oscillator. Given phase in range 0-1, return interpolated value between given istart and iend. */ +opcode xlin, i, iii + iphase, istart, iend xin + xout istart + (iend - istart) * iphase +endop + +;; Duration Sequences + +/** Given a tick value and array of durations, returns new duration value for tick. */ +opcode xoscd, i, ik[] + itick, kdurs[] xin + indx = 0 + isum = 0 + ilen = lenarray:i(kdurs) + ival = 0 + + while (indx < ilen) do + isum += i(kdurs, indx) + indx += 1 + od + + itick = itick % isum + indx = 0 + ival = 0 + icur = 0 + + while (indx < ilen) do + itemp = i(kdurs, indx) + + if(itick < icur + itemp) then + ival = itemp + indx += ilen + else + icur += abs(itemp) + endif + + indx += 1 + od + + xout ival + + endop + + +/** Given an array of durations, returns new duration value for current clock tick. Useful with mod division and cycle for additive/subtractive rhythms. */ +opcode xoscd, i, k[] + kdurs[] xin + xout xoscd(now_tick(), kdurs) +endop + + +/** Given a tick value and array of durations, returns new duration or 0 depending upon whether tick hits a new duration value. Values +may be positive or negative, but not zero. Negative values can be interpreted as rest durations. */ +opcode dur_seq, i, ik[] + itick, kdurs[] xin + ival = 0 + icur = 0 + ilen = lenarray:i(kdurs) + itotal = 0 + + indx = 0 + while (indx < ilen) do + itotal += abs:i(i(kdurs, indx)) + indx += 1 + od + + ;print itotal + + indx = 0 + itick = itick % itotal + + while (indx < ilen) do + itemp = i(kdurs, indx) + if(icur == itick) then + ival = itemp + indx += ilen + elseif (icur > itick) then + indx += ilen + else + icur += abs(itemp) + endif + + indx += 1 + od + xout ival +endop + + +/** Given an array of durations, returns new duration or 0 depending upon + * whether current clock tick hits a new duration value. Values +may be positive or negative, but not zero. Negative values can be interpreted +as rest durations. */ +opcode dur_seq, i, k[] + kdurs[] xin + xout dur_seq(now_tick(), kdurs) +endop + +/** Experimental opcode for generating melodic lines given array of durations, pitches, and amplitudes. Durations follow dur_seq practice that negative values are rests. Pitch and amp array indexing wraps according to their array lengths given index of non-rest duration value currently fired. */ +opcode melodic, iii, ik[]k[]k[] + itick, kdurs[], kpchs[], kamps[] xin + + idur = dur_seq(itick, kdurs) + ipch = 0 + iamp = 0 + + indx = 0 + itotal = 0 + ilen = lenarray:i(kdurs) + + while (indx < ilen) do + itotal += abs:i(i(kdurs, indx)) + indx += 1 + od + + itick = itick % itotal + + if(idur > 0) then + indx = 0 + icur = 0 + ivalindx = 0 + + while (indx < ilen) do + itemp = i(kdurs, indx) + + if(icur == itick) then + indx += ilen + elseif (icur > itick) then + indx += ilen + else + if (itemp > 0) then + ivalindx += 1 + endif + + icur += abs(itemp) + endif + + indx += 1 + od + + ipch = i(kpchs, ivalindx % lenarray:i(kpchs)) + iamp = i(kamps, ivalindx % lenarray:i(kamps)) + endif + + xout idur, ipch, iamp +endop + +/** Experimental opcode for generating melodic lines given array of durations, pitches, and amplitudes. Durations follow dur_seq practice that negative values are rests. Pitch and amp array indexing wraps according to their array lengths given index of non-rest duration value currently fired. */ +opcode melodic, iii, k[]k[]k[] + kdurs[], kpchs[], kamps[] xin + idur, ipch, iamp = melodic(now_tick(), kdurs, kpchs, kamps) + xout idur, ipch, iamp +endop + +;; String functions + +/** + rotate - Rotates string by irot number of values. + (Inspired by rotate from Charlie Roberts' Gibber.) +*/ +opcode rotate, S, Si + Sval, irot xin + + ilen = strlen(Sval) + irot = irot % ilen + Sout = strcat(strsub(Sval, irot, ilen), strsub(Sval, 0, irot)) + xout Sout +endop + + +/** Repeats a given String x number of times. For example, `Sval = strrep("ab6a", 2)` will produce the value of "ab6aab6a". Useful in working with Hex beat strings. */ +opcode strrep, S, Si + Sval, inum xin + + Sout = Sval + indx = 1 + while (indx < inum) do + Sout = strcat(Sout, Sval) + indx += 1 + od + + xout Sout +endop + + +;; Channel Helper + +/** Sets i-rate value into channel and sets initialization to true. Works together + with xchan */ +opcode xchnset, 0, Si + SchanName, ival xin + Sinit = sprintf("%s_initialized", SchanName) + chnset(1, Sinit) + chnset(ival, SchanName) +endop + +/** xchan + Initializes a channel with initial value if channel has default value of 0 and + then returns the current value from the channel. Useful in live coding to define + a dynamic point that will be automated or set outside of the instrument that is + using the channel. + + Opcode is overloaded to return i- or k- value. Be sure to use xchan:i or xchan:k + to specify which value to use. +*/ +opcode xchan, i,Si + SchanName, initVal xin + + Sinit = sprintf("%s_initialized", SchanName) + if(chnget:i(Sinit) == 0) then + chnset(1, Sinit) + chnset(initVal, SchanName) + endif + xout chnget:i(SchanName) +endop + +/** xchan + Initializes a channel with initial value if channel has default value of 0 and + then returns the current value from the channel. Useful in live coding to define + a dynamic point that will be automated or set outside of the instrument that is + using the channel. + + Opcode is overloaded to return i- or k- value. Be sure to use xchan:i or xchan:k + to specify which value to use. +*/ +opcode xchan, k,Si + SchanName, initVal xin + + Sinit = sprintf("%s_initialized", SchanName) + if(chnget:i(SchanName) == 0) then + chnset(1, Sinit) + chnset(initVal, SchanName) + endif + xout chnget:k(SchanName) +endop + +;; SCALE/HARMONY (experimental) + +gi_scale_major[] = array(0, 2, 4, 5, 7, 9, 11) +gi_scale_minor[] = array(0, 2, 3, 5, 7, 8, 10) + +gi_cur_scale[] = gi_scale_minor +gi_scale_base = 60 +gi_chord_offset = 0 + +/** Set root note of scale in MIDI note number. */ +opcode set_root, 0,i + iscale_root xin + gi_scale_base = iscale_root +endop + +/** Calculate frequency from root note of scale, using +octave and pitch class. */ +opcode from_root, i, ii + ioct, ipc xin + ival = gi_scale_base + (ioct * 12) + ipc + xout cpsmidinn(ival) +endop + +/** Set the global scale. Currently supports "maj" for major and "min" for minor scales. */ +opcode set_scale, 0,S + Scale xin + if(strcmp("maj", Scale) == 0) then + gi_cur_scale = gi_scale_major + else + gi_cur_scale = gi_scale_minor + endif +endop + +/** Calculate frequency from root note of scale, using +octave and scale degree. */ +opcode in_scale, i, ii + ioct, idegree xin + + ibase = gi_scale_base + (ioct * 12) + + idegrees = lenarray(gi_cur_scale) + + ioct = int(idegree / idegrees) + indx = idegree % idegrees + + if(indx < 0) then + ioct -= 1 + indx += idegrees + endif + + xout cpsmidinn(ibase + (ioct * 12) + gi_cur_scale[int(indx)]) +endop + +/** Calculate frequency from root note of scale, using +octave and scale degree. (k-rate version of opcode) */ +opcode in_scale, k, kk + koct, kdegree xin + + kbase = gi_scale_base + (koct * 12) + + idegrees = lenarray(gi_cur_scale) + + koct = int(kdegree / idegrees) + kndx = kdegree % idegrees + + if(kndx < 0) then + koct -= 1 + kndx += idegrees + endif + + xout cpsmidinn(kbase + (koct * 12) + gi_cur_scale[int(kndx)]) +endop + +/** Quantizes given MIDI note number to the given scale + (Base on pc:quantize from Extempore) */ +opcode pc_quantize, i, ii[] + ipitch_in, iscale[] xin + inotenum = round:i(ipitch_in) + ipc = inotenum % 12 + iout = inotenum + + + indx = 0 + while (indx < 7) do + if(contains(ipc + indx, iscale) == 1) then + iout = inotenum + indx + goto end + elseif (contains(ipc - indx, iscale) == 1) then + iout = inotenum - indx + goto end + endif + indx += 1 + od + end: + xout iout +endop + +/** Quantizes given MIDI note number to the current active scale + (Base on pc:quantize from Extempore) */ +opcode pc_quantize, i, i + ipitch_in xin + ival = pc_quantize(ipitch_in, gi_cur_scale) + xout ival +endop + +/* BELOW CHORD SYSTEM IS EXPERIMENTAL */ + +gi_chord_base = 0 +gi_chord_maj[] = array(0,4,7) +gi_chord_maj7[] = array(0,4,7,11) +gi_chord_min[] = array(0,3,7) +gi_chord_min7[] = array(0,3,7,10) +gi_chord_dim[] = array(0,3,6) +gi_chord_dim7[] = array(0,3,6,9) +gi_chord_aug[] = array(0,4,8) +gi_chord_current[] = gi_chord_maj + +opcode set_chord, 0, ii[] + ichord_root, ichord_intervals[] xin + gi_chord_base = ichord_root + gi_chord_current = ichord_intervals +endop + +opcode set_chord, 0, S + Schord xin +endop + +opcode in_chord, i, ii + ioct, idegree xin + + ibase = gi_scale_base + (ioct * 12) + gi_chord_base + + idegrees = lenarray(gi_chord_current) + + ioct = int(idegree / idegrees) + indx = idegree % idegrees + + if(indx < 0) then + ioct -= 1 + indx += idegrees + endif + + xout cpsmidinn(ibase + (ioct * 12) + gi_chord_current[indx]) +endop + +;; AUDIO + +/** Utility opcode for declicking an audio signal. Should only be used in instruments that have positive p3 duration. */ +opcode declick, a, a + ain xin + aenv = linseg:a(0, 0.01, 1, p3 - 0.02, 1, 0.01, 0, 0.01, 0) + xout ain * aenv +endop + +/** Custom non-interpolating oscil that takes in kfrequency and array to use as oscillator table +data. Outputs k-rate signal. */ +opcode oscil, k, kk[] + kfreq, kin[] xin + ilen = lenarray(kin) + kphs = phasor:k(kfreq) + kout = kin[int(kphs * ilen) % ilen] + xout kout +endop + + +;; KILLING INSTANCES + +instr KillImpl + Sinstr = p4 + if (nstrnum(Sinstr) > 0) then + turnoff2(Sinstr, 0, 0) + endif + turnoff +endin + +/** Turns off running instances of named instruments. Useful when livecoding + audio and control signal process instruments. May not be effective if for + temporal recursion instruments as they may be non-running but scheduled in the + event system. In those situations, try using clear_instr to overwrite the + instrument definition. */ +opcode kill, 0,S + Sinstr xin + schedule("KillImpl", 0, 0.01, Sinstr) +endop + +/** Redefines instr to empty body. Useful for killing + temporal recursion or clock callback functions */ +opcode clear_instr, 0,S + Sinstr xin + Sinstr_body = sprintf("instr %s\nendin\n", Sinstr) + ires = compilestr(Sinstr_body) + prints(sprintf("Cleared instrument definition: %s\n", + Sinstr)) +endop + +/** Starts running a named instrument for indefinite time using p2=0 and p3=-1. + Will first turnoff any instances of existing named instrument first. Useful + when livecoding always-on audio and control signal process instruments. */ +opcode start, 0,S + Sinstr xin + + if (nstrnum(Sinstr) > 0) then + kill(Sinstr) + schedule(Sinstr, ksmps / sr,-1) + endif +endop + +/** Stops a running named instrument, allowing for release segments to operate. */ +opcode stop, 0,S + Sinstr xin + + if (nstrnum(Sinstr) > 0) then + schedule(-nstrnum(Sinstr), 0, 0) + endif +endop + +instr CodeEval + Scode = p4 + ires = compilestr(Scode) +endin + +/** Evaluate code at a given time */ +opcode eval_at_time, 0, Si + Scode, istart xin + iblock init ksmps / sr + ;; adjust one block of time difference since this is + ;; will need to be added as an event back on to the scheduler + schedule("CodeEval", max:i(0, istart - iblock), 0, Scode) +endop + + +;; Fades + +gi_fade_range init -30 + + +/** Sets the range in db to fade over. By default, range is -30 (i.e., fades from -30dbfs to 0dbfs) */ +opcode set_fade_range, 0, i + irange xin + gi_fade_range init irange +endop + +/** Given a fade channel identifier (number) and number of ticks to fade over time, advances from current fade channel value towards 0dbfs (1.0) using the globally set fade range. (By default starts fading in from -30dBfs and stops at 0dbfs.) */ +opcode fade_in, i, ii + ident, inumticks xin + Schan = sprintf("fade_chan_%d", ident) + ival = chnget:i(Schan) + if(ival < 1.0) then + ival = limit:i(ival + (1 / inumticks), 0, 1.0) + chnset(ival, Schan) + iret = ampdbfs((1- ival) * gi_fade_range) + else + iret = ival + endif + + xout iret +endop + +/** Given a fade channel identifier (number) and number of ticks to fade over time, advances from current fade channel value towards 0 using the globally set fade range. (By default starts fading out from 0dBfs and stops at -30dbfs.) */ +opcode fade_out, i, ii + ident, inumticks xin + Schan = sprintf("fade_chan_%d", ident) + + ival = chnget:i(Schan) + iret init 0 + + if(ival > 0.0) then + ival = limit:i(ival - (1 / inumticks), 0, 1.0) + chnset(ival, Schan) + iret = ampdbfs((1- ival) * gi_fade_range) + else + iret = ival + endif + + xout iret +endop + +/** Read value from fade channel. Useful if copy/pasting then wanting to just read from fade and control in the original code. */ +opcode fade_read, i, i + ident xin + Schan = sprintf("fade_chan_%d", ident) + iret = chnget:i(Schan) + xout iret +endop + +/** Set value for fade channel to given value. Should be in range 0-1.0. (Typically one sets to either 0 or 1.) */ +opcode set_fade, 0,ii + ident, ival xin + Schan = sprintf("fade_chan_%d", ident) + ival = limit:i(ival, 0, 1.0) + chnset(ival, Schan) +endop + +;; Stereo Audio Bus + +ga_sbus[] init 16, 2 + +/** Write two audio signals into stereo bus at given index */ +opcode sbus_write, 0,iaa + ibus, al, ar xin + ga_sbus[ibus][0] = al + ga_sbus[ibus][1] = ar +endop + +/** Mix two audio signals into stereo bus at given index */ +opcode sbus_mix, 0,iaa + ibus, al, ar xin + ga_sbus[ibus][0] = ga_sbus[ibus][0] + al + ga_sbus[ibus][1] = ga_sbus[ibus][1] + ar +endop + +/** Clear audio signals from bus channel */ +opcode sbus_clear, 0, i + ibus xin + aclear init 0 + ga_sbus[ibus][0] = aclear + ga_sbus[ibus][1] = aclear +endop + +/** Read audio signals from bus channel */ +opcode sbus_read, aa, i + ibus xin + aclear init 0 + al = ga_sbus[ibus][0] + ar = ga_sbus[ibus][1] + xout al, ar +endop + +;; MIXER + +gi_reverb_mixer_on init 0 + +/** Always-on Mixer instrument with Reverb send channel. Use start("ReverbMixer") to run. Designed + for use with pan_verb_mix to simplify signal-based live coding. */ +instr ReverbMixer + + gi_reverb_mixer_on init 1 + + ;; dry and reverb send signals + a1, a2 sbus_read 0 + a3, a4 sbus_read 1 + + al, ar reverbsc a3, a4, xchan:k("Reverb.fb", 0.7), xchan:k("Reverb.cut", 12000) + + kamp = xchan:k("Mix.amp", 1.0) + + a1 = tanh(a1 + al) * kamp + a2 = tanh(a2 + ar) * kamp + + out(a1, a2) + + sbus_clear(0) + sbus_clear(1) +endin + + +/** Always-on Mixer instrument with Reverb send channel and feedback delay. Use start("FBReverbMixer") to run. Designed + for use with pan_verb_mix to simplify signal-based live coding. */ +instr FBReverbMixer + al, ar sbus_read 0 + + afb0 init 0 + afb1 init 0 + + gi_reverb_mixer_on init 1 + + ;; dry and reverb send signals + a1, a2 sbus_read 0 + a3, a4 sbus_read 1 + + al, ar reverbsc a3, a4, xchan:k("Reverb.fb", 0.7), xchan:k("Reverb.cut", 12000) + + a1 = tanh(a1 + al + afb0) + a2 = tanh(a2 + ar + afb1) + + kfb_amt = xchan:k("FB.amt", 0.9) + kfb_dur = xchan:k("FB.dur", 4.2) * 1000 ;; time in ms + + afb0 = vdelay(a1 * kfb_amt, kfb_dur, 10000) + afb1 = vdelay(a2 * kfb_amt, kfb_dur, 10000) + + kamp = xchan:k("Mix.amp", 1.0) + a1 *= kamp + a2 *= kamp + + out(a1, a2) + + sbus_clear(0) + sbus_clear(1) + +endin + +/** Utility opcode to pan signal, send dry to mixer, and send amount + of signal to reverb. If ReverbMixer is not on, will output just + panned signal using out opcode. */ +opcode pan_verb_mix, 0,akk + asig, kpan, krvb xin + ;; Panning and send to mixer + al, ar pan2 asig, kpan + + if(gi_reverb_mixer_on == 1) then + sbus_mix(0, al, ar) + sbus_mix(1, al * krvb, ar * krvb) + else + out(al, ar) + endif +endop + +/** Utility opcode to send dry stereo to mixer and send amount + of stereo signal to reverb. If ReverbMixer is not on, will output just + panned signal using out opcode. */ +opcode reverb_mix, 0, aak + al, ar, krvb xin + + if(gi_reverb_mixer_on == 1) then + sbus_mix(0, al, ar) + sbus_mix(1, al * krvb, ar * krvb) + else + out(al, ar) + endif +endop + +;; Automation + +/** Set a channel value at a given time. p4=ChannelName, p5=value*/ +instr ChnSet + Schan = p4 + ival = p5 + chnset(ival, Schan) +endin + +/** Automation instrument for channels. Takes in "ChannelName", start value, end value, and automation type (0=linear, else exponential). */ +instr Auto + Schan = p4 + istart = p5 + iend = p6 + itype = p7 + kauto init 0 + + if(itype == 0) then + kauto = line:k(istart, p3, iend) + else + kauto = expon:k(istart, p3, iend) + endif + + chnset(kauto, Schan) +endin + +/** Automate channel value over time. Takes in "ChannelName", duration, start value, end value, and automation type (0=linear, else exponential). For exponential, signs of istart and end must match and neither can be zero. */ +opcode automate, 0, Siiii + Schan, idur, istart, iend, itype xin + schedule("Auto", 0, idur, Schan, istart, iend, itype) +endop + +instr FadeOutMix + kauto = ampdbfs:k(line:k(0, p3, -60)) + chnset(kauto, "Mix.amp") +endin + +/** Utility opcode for end of performances to fade out Mixer over given idur time. idur defaults to 30 seconds. **/ +opcode fade_out_mix, 0, o + idur xin + idur = (idur <= 0 ? 30 : idur) + schedule("FadeOutMix", 0, idur) + schedule("ChnSet", idur + 0.1, 0, "Mix.amp", 0) +endop + +;; DSP + +/** Saturation using tanh */ +opcode saturate, a, ak + asig, ksat xin + xout tanh(asig * ksat) / tanh(ksat) +endop + +;; SYNTHS + +xchnset("rvb.default", 0.1) +xchnset("drums.rvb.default", 0.1) + +/** Substractive Synth, 3osc */ +instr Sub1 + asig = vco2(ampdbfs(-12), p4) + asig += vco2(ampdbfs(-12), p4 * 1.01, 10) + asig += vco2(ampdbfs(-12), p4 * 2, 10) + asig = zdf_ladder(asig, expon(10000, p3, 400), 5) + asig = declick(asig) * p5 + pan_verb_mix(asig, xchan:i("Sub1.pan", 0.5), xchan:i("Sub1.rvb", chnget:i("rvb.default"))) +endin + + +/** Subtractive Synth, two saws, fifth freq apart */ +instr Sub2 + icut = xchan:i("Sub2.cut", sr / 3) + asig = vco2(ampdbfs(-12), p4) + asig += vco2(ampdbfs(-12), p4 * 1.5) + asig = zdf_ladder(asig, expon(icut, p3, 400), 5) + asig = declick(asig) * p5 + pan_verb_mix(asig, xchan:i("Sub2.pan", 0.5), xchan:i("Sub2.rvb", chnget:i("rvb.default"))) +endin + + +/** Subtractive Synth, three detuned saws, swells in */ +instr Sub3 + asig = vco2(p5, p4) + asig += vco2(p5, p4 * 1.01) + asig += vco2(p5, p4 * 0.995) + asig *= 0.33 + asig = zdf_ladder(asig, expon(100, p3, 22000), 12) + asig = declick(asig) + pan_verb_mix(asig, xchan:i("Sub3.pan", 0.5), xchan:i("Sub3.rvb", chnget:i("rvb.default"))) +endin + +/** Subtractive Synth, detuned square/saw, stabby. + Nice as a lead in octave 2, nicely grungy in octave -2, -1 +*/ +instr Sub4 + asig = vco2(0.5, p4 * 2) + asig += vco2(0.5, p4 * 2.01, 10) + asig += vco2(1, p4, 10) + asig += vco2(1, p4 * 0.99) + itarget = p4 * 2 + asig = zdf_ladder(asig, expseg(20000, 0.15, itarget, 0.1, itarget), 5) + asig = declick(asig) * p5 * 0.15 + pan_verb_mix(asig, xchan:i("Sub4.pan", 0.5), xchan:i("Sub4.rvb", chnget:i("rvb.default"))) +endin + + +/** Subtractive Synth, detuned square/triangle */ +instr Sub5 + asig = vco2(0.5, p4, 10) + asig += vco2(0.25, p4 * 2.0001, 12) + asig = zdf_ladder(asig, expseg(10000, 0.1, 500, 0.1, 500), 2) + asig = declick(asig) * p5 * 0.75 + pan_verb_mix(asig, xchan:i("Sub5.pan", 0.5), xchan:i("Sub5.rvb", chnget:i("rvb.default"))) +endin + +/** Subtractive Synth, saw, K35 filters */ +instr Sub6 + asig = vco2(p5, p4) + + asig = K35_hpf(asig, limit:i(p4, 30, 16000), 1) + asig = K35_lpf(asig, expseg:k(12000, p3, limit:i(p4 * 8, 30, 12000)), 2.5) + + asig = saturate(asig, 4.5) + asig *= p5 * 0.5 + + asig = declick(asig) + + pan_verb_mix(asig, xchan:i("Sub6.pan", 0.5), xchan:i("Sub6.rvb", chnget:i("rvb.default"))) +endin + +/** Subtractive Synth, saw + tri, K35 filters */ +instr Sub7 + asig = vco2(p5, p4) + asig += vco2(p5, p4 * 2, 4, 0.5) + + asig = K35_hpf(asig, limit:i(p4, 30, 16000), 1) + asig = K35_lpf(asig, expseg:k(12000, p3, limit:i(p4 * 8, 30, 12000)), 2.5) + + asig = saturate(asig, 4.5) + asig *= p5 * 0.3 + + asig = declick(asig) + + pan_verb_mix(asig, xchan:i("Sub7.pan", 0.5), xchan:i("Sub7.rvb", chnget:i("rvb.default"))) +endin + +/** Subtractive Synth, square + saw + tri, diode ladder filter */ +instr Sub8 + asig = vco2(p5, p4, 10) + asig += vco2(p5 * 0.5, p4 * 2) + asig += vco2(p5 * 0.15, p4 * 3.5, 12) + + aenv = expon:a(1, 0.15, 0.001) + asig = saturate(asig, 10) + asig = diode_ladder(asig, 4000 + aenv * 4000, 12) + asig = zdf_2pole(asig, p5, 0.25, 1) + asig *= linen:a(1, 0, p3, .001) * 0.5 + pan_verb_mix(asig, xchan:i("Sub8.pan", 0.5), xchan:i("Sub8.rvb", chnget:i("rvb.default"))) +endin + +/** SynthBrass subtractive synth */ +instr SynBrass + ipch = p4 + + asig = vco2(0.25, ipch) + asig += vco2(0.25, ipch * 2.00) + asig = zdf_ladder(asig, expseg(12000, 0.25, 500, 0.05, 500), 4) + asig = declick(asig * p5) + + pan_verb_mix(asig, xchan:i("SynBrass.pan", 0.5), xchan:i("SynBrass.rvb", chnget:i("rvb.default"))) +endin + +/** Synth Harp subtracitve Synth */ +instr SynHarp + + asig = vco2(p5, p4) + asig += vco2(p5, p4 * 0.9993423423) + asig += vco2(p5, p4 * 1.00093029423048) + + ioct = octcps(p4) + + asig = zdf_ladder(asig, cpsoct(limit(linseg:a(ioct + 4, 0.015, ioct + 2, 0.2, ioct), 4.25, 14)), 0.5) + asig = zdf_2pole(asig, p4 * 0.5, 0.5, 1) + + asig *= linen:a(1, 0.012, p3, 0.01) + + pan_verb_mix(asig, xchan:i("SynHarp.pan", 0.5), xchan:i("SynHarp.rvb", chnget:i("rvb.default"))) +endin + +/** SuperSaw sound using 9 bandlimited saws (3 sets of detuned saws at octaves)*/ +instr SSaw + asig = vco2(1, p4) + asig += vco2(1, p4 * cent(9.04234)) + asig += vco2(1, p4 * cent(-7.214342)) + + asig += vco2(1, p4 * cent(1206.294143)) + asig += vco2(1, p4 * cent(1193.732)) + asig += vco2(1, p4 * cent(1200)) + + asig += vco2(1, p4 * cent(2406.294143)) + asig += vco2(1, p4 * cent(2393.732)) + asig += vco2(1, p4 * cent(2400)) + + asig *= 0.1 + icut = xchan:i("SSaw.cut", 16000) + asig = zdf_ladder(asig, expseg(icut, p3 - 0.05, icut, 0.05, 200), 0.5) + asig *= p5 + asig = declick(asig) + + pan_verb_mix(asig, xchan:i("SSaw.pan", 0.5), xchan:i("SSaw.rvb", chnget:i("rvb.default"))) +endin + +/** Modal Synthesis Instrument: Percussive/organ-y sound */ +instr Mode1 + asig = mpulse(p5, 0) + + asig1 = mode(asig, p4, p4 * 0.5) + asig1 += mode(asig, p4 * 2, p4 * 0.25) + asig1 += mode(asig, p4 * 4, p4 * 0.125) + + asig = declick(asig1) + + pan_verb_mix(asig, xchan:i("Mode1.pan", 0.5), xchan:i("Mode1.rvb", chnget:i("rvb.default"))) +endin + +/** Pluck sound using impulses, noise, and waveguides*/ +instr Plk + asig = mpulse(p5, 1 / p4) + asig += random:a(-0.1, 0.1) * expseg(p5, 0.02, 0.001, p3, 0.001) + + aout wguide1 asig, 1/ p4, 10000, 0.8 + aout += wguide1(asig, 1/ (2 * p4), 12000, 0.6) + + aout = K35_hpf(aout, p4, 0.5) + aout = zdf_ladder(aout, expon(10000, p3, 100), 3) + aout = dcblock2(aout) + + asig = declick(aout) + + pan_verb_mix(asig, xchan:i("Plk.pan", 0.5), xchan:i("Plk.rvb", chnget:i("rvb.default"))) +endin + +gi_organ1 = ftgen(0, 0, 65536, 10, 1, 0.5, 0.3, 0.2, 0.05, 0.015) +/** Wavetable Organ sound using additive synthesis */ +instr Organ1 + asig = oscili(p5, p4, gi_organ1) + asig *= 0.5 + asig = declick(asig) + + pan_verb_mix(asig, xchan:i("Organ1.pan", 0.5), xchan:i("Organ1.rvb", chnget:i("rvb.default"))) +endin + +/** Organ sound based on M1 Organ 2 patch */ +instr Organ2 + asig = vco2(1, p4, 4, 0.25) + asig += vco2(0.8, p4 * 2, 12) + asig += vco2(0.3, p4 * 3, 10) + + icutStart = limit:i(xchan:i("Organ2.cut", 2000), 40, sr * 1/2) + icutEnd = limit:i(xchan:i("Organ2.cutEnd", 500), 40, sr * 1/2) + asig = zdf_ladder(asig, expseg(icutStart, 0.08, icutEnd, p3, icutEnd), 2) + + asig *= p5 * 0.67 + asig = declick(asig) + + pan_verb_mix(asig, xchan:i("Organ2.pan", 0.5), xchan:i("Organ2.rvb", chnget:i("rvb.default"))) +endin + +giorgan_claribel_flute = ftgen(0, 0, 65536, 10, 1, ampdbfs(-30), ampdbfs(-35), ampdbfs(-40), ampdbfs(-32), ampdbfs(-40), ampdbfs(-42)) + +/** Wavetable Organ using Flute 8' and Flute 4', wavetable based on Claribel Flute + http://www.pykett.org.uk/the_tonal_structure_of_organ_flutes.htm */ +instr Organ3 + asig = oscili(p5, p4, giorgan_claribel_flute) + asig += oscili(p5, p4 * 2, giorgan_claribel_flute) + ;asig += oscili(p5, p4 * 0.5) + + asig *= linen:a(1, .02, p3, .01) + + pan_verb_mix(asig, xchan:i("Organ3.pan", 0.5), xchan:i("Organ3.rvb", chnget:i("rvb.default"))) +endin + +/** Subtractive Bass sound */ + +instr Bass + + asig = vco2(p5, p4, 10) + asig += vco2(p5 * 0.25, p4 * 0.9992342342, 10) + asig += vco2(p5 * 0.5, p4 * 2.000234234) + aenv = linseg:a(1, 0.2, 0.1, p3 - 0.2, 0) * 6 + asig = zdf_ladder(asig, cpsoct(5 + aenv), 4 ) + + asig *= linen:a(0.7, 0, p3, 0.01) + + pan_verb_mix(asig, xchan:i("Bass.pan", 0.5), xchan:i("Bass.rvb", chnget:i("rvb.default"))) + +endin + +/** MS20-style Bass Sound */ + +instr ms20_bass + ipch = p4 + iamp = p5 + aenv = expseg(1000, 0.1, ipch * 2, p3 - .05, ipch * 2) + + asig = vco2(1.0, ipch) + asig = K35_hpf(asig, ipch, 5, 0, 1) + asig = K35_lpf(asig, aenv, 8, 0, 1) + + asig *= expon:a(iamp, p3, 0.0001) + + pan_verb_mix(asig, xchan:i("ms20_bass.pan", 0.5), xchan:i("ms20_bass.rvb", chnget:i("rvb.default"))) +endin + + +/** VoxHumana Patch */ + +instr VoxHumana + ipch = p4 + iamp = p5 + aenv = transegr:a(0, 0.453, 1, 1.0, 2.242, -1, 0) + + klfo_pulse_width = lfo(0.125, 5.72, 1) + klfo_saw = lfo(0.021, 5.04, 1) + klfo_pulse = lfo(0.013, 3.5, 1) + + asaw = vco2(iamp, ipch * (1 + klfo_saw)) + apulse = vco2(iamp, ipch * (1.00004 + klfo_pulse), 2, 0.625 + klfo_pulse_width) + + aout = sum(asaw, apulse) * 0.0625 * aenv + + ikeyfollow = 1 + exp( (ipch - 50) / 10000) + + aout = butterlp(aout, 1986 * ikeyfollow) + + pan_verb_mix(aout, xchan:i("VoxHumana.pan", 0.5), xchan:i("VoxHumana.rvb", chnget:i("rvb.default"))) +endin + +/** FM 3:1 C:M ratio, 2->0.025 index, nice for bass */ +instr FM1 + icar = xchan("FM1.car", 1) + imod = xchan("FM1.mod", 3) + asig = foscili(p5, p4, icar, imod, expon(2, 0.2, 0.025)) + asig = declick(asig) * 0.5 + pan_verb_mix(asig, xchan:i("FM1.pan", 0.5), xchan:i("FM1.rvb", chnget:i("rvb.default"))) +endin + +/** Filtered noise, exponential envelope */ +instr Noi + p3 = max:i(p3, 0.4) + asig = pinker() * p5 * expon(1, p3, 0.001) * 0.1 + + a1 = mode(asig, p4, 80) + a2 = mode(asig, p4 * 2, 40) + a3 = mode(asig, p4 * 3, 30) + a4 = mode(asig, p4 * 4, 20) + + asig sum a1, a2, a3, a4 + + asig = declick(asig) * 0.25 + + pan_verb_mix(asig, xchan:i("Noi.pan", 0.5), xchan:i("Noi.rvb", chnget:i("rvb.default"))) +endin + + +/** Wobble patched based on Jacob Joaquin's "Tempo-Synced Wobble Bass" */ +instr Wobble + /*p3 = max:i(p3, 0.4) */ + + itri = chnget:i("Wobble.triangle") + if(itri == 0) then + ;; unipolar triangle + itri = ftgen(0, 0, 8192, -7, 0, 4096, 1, 4096, 0) + chnset(itri, "Wobble.triangle") + endif + + ;; dur in ticks (16ths) for wobble lfo + iticks = xchan("Wobble.ticks", 2) + ;; modulation max + imod = p4 * 8 + + klfo = oscili:k(1, 1 / ticks(iticks), itri) + + asig = vco2(p5, p4 * 2.018) + asig += vco2(p5, p4, 10) + asig = zdf_ladder(asig, min:k(p4 + (imod * klfo), 22000), 12) + asig *= expon(1, beats(16), 0.001) + asig = declick(asig) + pan_verb_mix(asig, xchan:i("Wobble.pan", 0.5), xchan:i("Wobble.rvb", chnget:i("rvb.default"))) + +endin + +/** Simple Sine-wave instrument with exponential envelope */ +instr Sine + asig = oscili(p5, p4) + asig *= expseg:a(0.1, 0.001, 1, 0.1, 0.001, p3, 0.001) + pan_verb_mix(asig, xchan:i("Sine.pan", 0.5), xchan:i("Sine.rvb", chnget:i("rvb.default"))) +endin + +/** Simple Square-wave instrument with exponential envelope */ +instr Square + asig = vco2(p5, p4, 10) + asig *= expseg:a(0.1, 0.005, 1, 0.1, 0.001, p3, 0.001) + pan_verb_mix(asig, xchan:i("Square.pan", 0.5), xchan:i("Square.rvb", chnget:i("rvb.default"))) +endin + +/** Simple Sawtooth-wave instrument with exponential envelope */ +instr Saw + asig = vco2(p5, p4) + asig *= expseg:a(0.1, 0.005, 1, 0.1, 0.001, p3, 0.001) + pan_verb_mix(asig, xchan:i("Saw.pan", 0.5), xchan:i("Saw.rvb", chnget:i("rvb.default"))) +endin + + +;; SQUINE WAVE SYNTHS + +/** Squinewave Synth, 2 osc */ +instr Squine1 + asig squinewave a(p4), expon:a(.8, p3, .1), expon:a(.9, p3, .5), 0, 4 + a2 squinewave a(p4 * 1.0019234234), expseg:a(.8, p3, .6), a(0), 0, 4 + + asig = (asig + a2 * 0.05) * p5 * 0.5 + asig = butterhp(asig, p4) + asig *= linen:a(1, .015, p3, .02) + asig = dcblock2(asig) + + pan_verb_mix(asig, xchan:i("Squine1.pan", 0.5), xchan:i("Squine1.rvb", chnget:i("rvb.default"))) + +endin + +gi_lc_sine = ftgen(0, 0, 65536, 10, 1) + +/** Formant Synth, buzz source, soprano ah formants */ +instr Form1 + iamp = p5 + ifreq = p4 + asig = buzz(1, ifreq * (1 + lfo(.003, 4)), (sr / 2) / ifreq, gi_lc_sine) + + a1 = butterbp(asig, 800, 80) + a2 = butterbp(asig * ampdbfs(-6), 1150, 90) + a3 = butterbp(asig * ampdbfs(-32), 2900 , 120) + a4 = butterbp(asig * ampdbfs(-20), 3900, 130) + a5 = butterbp(asig * ampdbfs(-50), 4950, 140) + + asig = a1 + a2 + a3 + a4 + a5 + asig *= 35 * iamp * adsr(0.05, 0, 1, 0.01) + + pan_verb_mix(asig, xchan:i("Form1.pan", 0.5), xchan:i("Form1.rvb", chnget:i("rvb.default"))) +endin + +;; MONOPHONIC SYNTHS + +/** Monophone synth using sawtooth wave and 4pole lpf. Use "start("Mono") to run the monosynth, then use MonoNote instrument to play the instrument. */ +instr Mono + asig = vco2(xchan:k("Mono.amp", 0.0), portk(xchan:k("Mono.freq", 60), xchan:k("Mono.glide", 0.02))) + asig = zdf_ladder(asig, xchan:k("Mono.cut", 4000), xchan:k("Mono.Q", 10)) + + kpan = xchan:k("Mono.pan", 0.5) + aL,aR pan2 asig,kpan + + pan_verb_mix(asig, xchan:k("Mono.pan", 0.5), xchan:k("Mono.rvb", chnget:i("rvb.default"))) +endin +maxalloc("Mono", 1) + +/** Note playing instrument for Mono synth. Be careful to use this +and not try to create multiple Mono instruments! */ +instr MonoNote + chnset(expon(p5, p3, 0.001), "Mono.amp") + chnset(p4, "Mono.freq") +endin + + +;; DRUMS + +/** Bandpass-filtered impulse glitchy click sound. p4 = center frequency (e.g., 3000, 6000) */ +instr Click + asig = mpulse(1, 0) + asig = zdf_2pole(asig, p4, 3, 3) + + asig *= p5 * 4 ;; adjust amp + asig *= linen:a(1, 0, p3, 0.01) + + pan_verb_mix(asig, xchan:i("Click.pan", 0.5), xchan:i("Click.rvb", chnget:i("rvb.default"))) +endin + +/** Highpass-filtered noise+saw sound. Use NoiSaw.cut channel to adjust cutoff. */ +instr NoiSaw + asig = random:a(-1, 1) + asig += vco2(1, 100) + asig = zdf_2pole(asig, xchan:i("NoiSaw.cut", 3000), 1, 3) + + asig *= p5 * 0.5 + asig *= expseg:a(1, 0.1, 0.001, p3, 0.0001) + + asig *= linen:a(1, 0, p3, 0.01) + + pan_verb_mix(asig, xchan:i("NoiSaw.pan", 0.5), xchan:i("NoiSaw.rvb", chnget:i("rvb.default"))) +endin + +/** Modified clap instrument by Istvan Varga (clap1.orc) */ +instr Clap + ifreq = p4 ;; ignore + iamp = p5 + + ibpfrq = 1046.5 /* bandpass filter frequency */ + kbpbwd = port:k(ibpfrq*0.25, 0.03, ibpfrq*4.0) /* bandpass filter bandwidth */ + idec = 0.5 /* decay time */ + + a1 = 1.0 + a1_ delay1 a1 + a1 = a1 - a1_ + a2 delay a1, 0.011 + a3 delay a1, 0.023 + a4 delay a1, 0.031 + + a1 tone a1, 60.0 + a2 tone a2, 60.0 + a3 tone a3, 60.0 + a4 tone a4, 1.0 / idec + + aenv1 = a1 + a2 + a3 + a4*60.0*idec + + a_ unirand 2.0 + a_ = aenv1 * (a_ - 1.0) + a_ butterbp a_, ibpfrq, kbpbwd + + aout = a_ * 80 * iamp ;; + pan_verb_mix(aout, xchan:k("Clap.pan", 0.7), xchan:k("Clap.rvb", chnget:i("drums.rvb.default"))) +endin + + + +gi_808_sine ftgen 0,0,1024,10,1 ;A SINE WAVE +gi_808_cos ftgen 0,0,65536,9,1,1,90 ;A COSINE WAVE + +/** Bass Drum - From Iain McCurdy's TR-808.csd */ +instr BD ;BASS DRUM + p3 = 2 * xchan("BD.decay", 0.5) ;NOTE DURATION. SCALED USING GUI 'Decay' KNOB + + ilevel = xchan("BD.level", 1) * 2 + itune = xchan("BD.tune", 0) + + ;SUSTAIN AND BODY OF THE SOUND + kmul = transeg(0.2,p3*0.5,-15,0.01, p3*0.5,0,0) ;PARTIAL STRENGTHS MULTIPLIER USED BY GBUZZ. DECAYS FROM A SOUND WITH OVERTONES TO A SINE TONE. + kbend = transeg(0.5,1.2,-4, 0,1,0,0) ;SLIGHT PITCH BEND AT THE START OF THE NOTE + asig = gbuzz(0.5,50*octave(itune)*semitone(kbend),20,1,kmul,gi_808_cos) ;GBUZZ TONE + aenv = transeg:a(1,p3-0.004,-6,0) ;AMPLITUDE ENVELOPE FOR SUSTAIN OF THE SOUND + aatt = linseg:a(0,0.004,1, .01, 1) ;SOFT ATTACK + asig= asig*aenv*aatt + + ;HARD, SHORT ATTACK OF THE SOUND + aenv = linseg:a(1,0.07,0, .01, 0) ;AMPLITUDE ENVELOPE (FAST DECAY) + acps = expsega(400,0.07,0.001,1,0.001) ;FREQUENCY OF THE ATTACK SOUND. QUICKLY GLISSES FROM 400 Hz TO SUB-AUDIO + aimp = oscili(aenv,acps*octave(itune*0.25),gi_808_sine) ;CREATE ATTACK SOUND + + amix = ((asig*0.5)+(aimp*0.35))*ilevel*p5 ;MIX SUSTAIN AND ATTACK SOUND ELEMENTS AND SCALE USING GUI 'Level' KNOB + + pan_verb_mix(amix, xchan:k("BD.pan", 0.5), xchan:k("BD.rvb", chnget:i("drums.rvb.default"))) +endin + + +/** Snare Drum - From Iain McCurdy's TR-808.csd */ +instr SD ;SNARE DRUM + + ;SOUND CONSISTS OF TWO SINE TONES, AN OCTAVE APART AND A NOISE SIGNAL + idur = xchan("SD.decay", 1.0) + ilevel = xchan("SD.level", 1) + itune = xchan("SD.tune", 0) + + ifrq = 342 ;FREQUENCY OF THE TONES + iNseDur = 0.3 * idur ;DURATION OF THE NOISE COMPONENT + iPchDur = 0.1 * idur ;DURATION OF THE SINE TONES COMPONENT + p3 = iNseDur ;p3 DURATION TAKEN FROM NOISE COMPONENT DURATION (ALWATS THE LONGEST COMPONENT) + + ;SINE TONES COMPONENT + aenv1 = expseg(1, iPchDur, 0.0001, p3-iPchDur, 0.0001) ;AMPLITUDE ENVELOPE + apitch1 = oscili(1, ifrq * octave(itune), gi_808_sine) ;SINE TONE 1 + apitch2 = oscili(0.25, ifrq * 0.5 * octave(itune), gi_808_sine) ;SINE TONE 2 (AN OCTAVE LOWER) + apitch = (apitch1+apitch2)*0.75 ;MIX THE TWO SINE TONES + + ;NOISE COMPONENT + aenv2 = expon(1,p3,0.0005) ;AMPLITUDE ENVELOPE + anoise = noise(0.75, 0) ;CREATE SOME NOISE + anoise = butbp(anoise, 10000*octave(itune), 10000) ;BANDPASS FILTER THE NOISE SIGNAL + anoise = buthp(anoise, 1000) ;HIGHPASS FILTER THE NOISE SIGNAL + kcf = expseg(5000, 0.1, 3000, p3-0.2, 3000) ;CUTOFF FREQUENCY FOR A LOWPASS FILTER + anoise = butlp(anoise,kcf) ;LOWPASS FILTER THE NOISE SIGNAL + amix = ((apitch*aenv1)+(anoise*aenv2))*ilevel*p5 ;MIX AUDIO SIGNALS AND SCALE ACCORDING TO GUI 'Level' CONTROL + + pan_verb_mix(amix, xchan:k("SD.pan", 0.5), xchan:k("SD.rvb", chnget:i("drums.rvb.default"))) +endin + + +/** Open High Hat - From Iain McCurdy's TR-808.csd */ +instr OHH ;OPEN HIGH HAT + + idur = xchan("OHH.decay", 1.0) + ilevel = xchan("OHH.level", 1) + itune = xchan("OHH.tune", 0) + ioct = octave:i(itune) + + + kFrq1 = 296*ioct ;FREQUENCIES OF THE 6 OSCILLATORS + kFrq2 = 285*ioct + kFrq3 = 365*ioct + kFrq4 = 348*ioct + kFrq5 = 420*ioct + kFrq6 = 835*ioct + p3 = 0.5*idur ;DURATION OF THE NOTE + + ;SOUND CONSISTS OF 6 PULSE OSCILLATORS MIXED WITH A NOISE COMPONENT + ;PITCHED ELEMENT + aenv linseg 1,p3-0.05,0.1,0.05,0 ;AMPLITUDE ENVELOPE FOR THE PULSE OSCILLATORS + ipw = 0.25 ;PULSE WIDTH + a1 vco2 0.5,kFrq1,2,ipw ;PULSE OSCILLATORS... + a2 vco2 0.5,kFrq2,2,ipw + a3 vco2 0.5,kFrq3,2,ipw + a4 vco2 0.5,kFrq4,2,ipw + a5 vco2 0.5,kFrq5,2,ipw + a6 vco2 0.5,kFrq6,2,ipw + amix sum a1,a2,a3,a4,a5,a6 ;MIX THE PULSE OSCILLATORS + amix reson amix,5000*ioct,5000,1 ;BANDPASS FILTER THE MIXTURE + amix buthp amix,5000 ;HIGHPASS FILTER THE SOUND... + amix buthp amix,5000 ;...AND AGAIN + amix = amix*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;NOISE ELEMENT + anoise noise 0.8,0 ;GENERATE SOME WHITE NOISE + aenv linseg 1,p3-0.05,0.1,0.05,0 ;CREATE AN AMPLITUDE ENVELOPE + kcf expseg 20000,0.7,9000,p3-0.1,9000 ;CREATE A CUTOFF FREQ. ENVELOPE + anoise butlp anoise,kcf ;LOWPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,8000 ;HIGHPASS FILTER THE NOISE SIGNAL + anoise = anoise*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;MIX PULSE OSCILLATOR AND NOISE COMPONENTS + amix = (amix+anoise)*ilevel*p5*0.55 + + pan_verb_mix(amix, xchan:k("OHH.pan", 0.5), xchan:k("OHH.rvb", chnget:i("drums.rvb.default"))) +endin + + +/** Closed High Hat - From Iain McCurdy's TR-808.csd */ +instr CHH ;CLOSED HIGH HAT + idur = xchan("CHH.decay", 1.0) + ilevel = xchan("CHH.level", 1) + itune = xchan("CHH.tune", 0) + ioct = octave:i(itune) + + kFrq1 = 296*ioct ;FREQUENCIES OF THE 6 OSCILLATORS + kFrq2 = 285*ioct + kFrq3 = 365*ioct + kFrq4 = 348*ioct + kFrq5 = 420*ioct + kFrq6 = 835*ioct + idur = 0.088*idur ;DURATION OF THE NOTE + p3 limit idur,0.1,10 ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + + iohh = nstrnum("OHH") + iactive = active(iohh) ;SENSE ACTIVITY OF PREVIOUS INSTRUMENT (OPEN HIGH HAT) + if iactive>0 then ;IF 'OPEN HIGH HAT' IS ACTIVE... + turnoff2 iohh,0,0 ;TURN IT OFF (CLOSED HIGH HAT TAKES PRESIDENCE) + endif + + ;PITCHED ELEMENT + aenv expsega 1,idur,0.001,1,0.001 ;AMPLITUDE ENVELOPE FOR THE PULSE OSCILLATORS + ipw = 0.25 ;PULSE WIDTH + a1 vco2 0.5,kFrq1,2,ipw ;PULSE OSCILLATORS... + a2 vco2 0.5,kFrq2,2,ipw + a3 vco2 0.5,kFrq3,2,ipw + a4 vco2 0.5,kFrq4,2,ipw + a5 vco2 0.5,kFrq5,2,ipw + a6 vco2 0.5,kFrq6,2,ipw + amix sum a1,a2,a3,a4,a5,a6 ;MIX THE PULSE OSCILLATORS + amix reson amix,5000*ioct,5000,1 ;BANDPASS FILTER THE MIXTURE + amix buthp amix,5000 ;HIGHPASS FILTER THE SOUND... + amix buthp amix,5000 ;...AND AGAIN + amix = amix*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;NOISE ELEMENT + anoise noise 0.8,0 ;GENERATE SOME WHITE NOISE + aenv expsega 1,idur,0.001,1,0.001 ;CREATE AN AMPLITUDE ENVELOPE + kcf expseg 20000,0.7,9000,idur-0.1,9000 ;CREATE A CUTOFF FREQ. ENVELOPE + anoise butlp anoise,kcf ;LOWPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,8000 ;HIGHPASS FILTER THE NOISE SIGNAL + anoise = anoise*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;MIX PULSE OSCILLATOR AND NOISE COMPONENTS + amix = (amix+anoise)*ilevel*p5*0.55 + + pan_verb_mix(amix, xchan:k("CHH.pan", 0.5), xchan:k("CHH.rvb", chnget:i("drums.rvb.default"))) +endin + +/** High Tom - From Iain McCurdy's TR-808.csd */ +instr HiTom ;HIGH TOM + idur = xchan("HiTom.decay", 1.0) + ilevel = xchan("HiTom.level", 1) + itune = xchan("HiTom.tune", 0) + ioct = octave:i(itune) + + ifrq = 200 * ioct ;FREQUENCY + p3 = 0.5 * idur ;DURATION OF THIS NOTE + + ;SINE TONE SIGNAL + aAmpEnv transeg 1,p3,-10,0.001 ;AMPLITUDE ENVELOPE FOR SINE TONE SIGNAL + afmod expsega 5,0.125/ifrq,1,1,1 ;FREQUENCY MODULATION ENVELOPE. GIVES THE TONE MORE OF AN ATTACK. + asig oscili -aAmpEnv*0.6,ifrq*afmod,gi_808_sine ;SINE TONE SIGNAL + + ;NOISE SIGNAL + aEnvNse transeg 1,p3,-6,0.001 ;AMPLITUDE ENVELOPE FOR NOISE SIGNAL + anoise dust2 0.4, 8000 ;GENERATE NOISE SIGNAL + anoise reson anoise,400*ioct,800,1 ;BANDPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,100*ioct ;HIGHPASS FILTER THE NOSIE SIGNAL + anoise butlp anoise,1000*ioct ;LOWPASS FILTER THE NOISE SIGNAL + anoise = anoise * aEnvNse ;SCALE NOISE SIGNAL WITH AMPLITUDE ENVELOPE + + ;MIX THE TWO SOUND COMPONENTS + amix = (asig + anoise)*ilevel*p5 + + pan_verb_mix(amix, xchan:k("HiTom.pan", 0.5), xchan:k("HiTom.rvb", chnget:i("drums.rvb.default"))) +endin + +/** Mid Tom - From Iain McCurdy's TR-808.csd */ +instr MidTom ;MID TOM + idur = xchan("MidTom.decay", 1.0) + ilevel = xchan("MidTom.level", 1) + itune = xchan("MidTom.tune", 0) + ioct = octave:i(itune) + + ifrq = 133*ioct ;FREQUENCY + p3 = 0.6 * idur ;DURATION OF THIS NOTE + + ;SINE TONE SIGNAL + aAmpEnv transeg 1,p3,-10,0.001 ;AMPLITUDE ENVELOPE FOR SINE TONE SIGNAL + afmod expsega 5,0.125/ifrq,1,1,1 ;FREQUENCY MODULATION ENVELOPE. GIVES THE TONE MORE OF AN ATTACK. + asig oscili -aAmpEnv*0.6,ifrq*afmod,gi_808_sine ;SINE TONE SIGNAL + + ;NOISE SIGNAL + aEnvNse transeg 1,p3,-6,0.001 ;AMPLITUDE ENVELOPE FOR NOISE SIGNAL + anoise dust2 0.4, 8000 ;GENERATE NOISE SIGNAL + anoise reson anoise, 400*ioct,800,1 ;BANDPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,100*ioct ;HIGHPASS FILTER THE NOSIE SIGNAL + anoise butlp anoise,600*ioct ;LOWPASS FILTER THE NOISE SIGNAL + anoise = anoise * aEnvNse ;SCALE NOISE SIGNAL WITH AMPLITUDE ENVELOPE + + ;MIX THE TWO SOUND COMPONENTS + amix = (asig + anoise)*ilevel*p5 + + pan_verb_mix(amix, xchan:k("MidTom.pan", 0.5), xchan:k("MidTom.rvb", chnget:i("drums.rvb.default"))) +endin + +/** Low Tom - From Iain McCurdy's TR-808.csd */ +instr LowTom ;LOW TOM + idur = xchan("LowTom.decay", 1.0) + ilevel = xchan("LowTom.level", 1) + itune = xchan("LowTom.tune", 0) + ioct = octave:i(itune) + + ifrq = 90 * ioct ;FREQUENCY + p3 = 0.7*idur ;DURATION OF THIS NOTE + + ;SINE TONE SIGNAL + aAmpEnv transeg 1,p3,-10,0.001 ;AMPLITUDE ENVELOPE FOR SINE TONE SIGNAL + afmod expsega 5,0.125/ifrq,1,1,1 ;FREQUENCY MODULATION ENVELOPE. GIVES THE TONE MORE OF AN ATTACK. + asig oscili -aAmpEnv*0.6,ifrq*afmod,gi_808_sine ;SINE TONE SIGNAL + + ;NOISE SIGNAL + aEnvNse transeg 1,p3,-6,0.001 ;AMPLITUDE ENVELOPE FOR NOISE SIGNAL + anoise dust2 0.4, 8000 ;GENERATE NOISE SIGNAL + anoise reson anoise,40*ioct,800,1 ;BANDPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,100*ioct ;HIGHPASS FILTER THE NOSIE SIGNAL + anoise butlp anoise,600*ioct ;LOWPASS FILTER THE NOISE SIGNAL + anoise = anoise * aEnvNse ;SCALE NOISE SIGNAL WITH AMPLITUDE ENVELOPE + + ;MIX THE TWO SOUND COMPONENTS + amix = (asig + anoise)*ilevel*p5 + + pan_verb_mix(amix, xchan:k("LowTom.pan", 0.5), xchan:k("LowTom.rvb", chnget:i("drums.rvb.default"))) +endin + + + +/** Cymbal - From Iain McCurdy's TR-808.csd */ +instr Cymbal ;CYMBAL + idur = xchan("Cymbal.decay", 1.0) + ilevel = xchan("Cymbal.level", 1) + itune = xchan("Cymbal.tune", 0) + ioct = octave:i(itune) + + iFrq1 = 296*ioct ;FREQUENCIES OF THE 6 OSCILLATORS + iFrq2 = 285*ioct + iFrq3 = 365*ioct + iFrq4 = 348*ioct + iFrq5 = 420*ioct + iFrq6 = 835*ioct + p3 = 2*idur ;DURATION OF THE NOTE + + ;SOUND CONSISTS OF 6 PULSE OSCILLATORS MIXED WITH A NOISE COMPONENT + ;PITCHED ELEMENT + aenv expon 1,p3,0.0001 ;AMPLITUDE ENVELOPE FOR THE PULSE OSCILLATORS + ipw = 0.25 ;PULSE WIDTH + a1 vco2 0.5,iFrq1,2,ipw ;PULSE OSCILLATORS... + a2 vco2 0.5,iFrq2,2,ipw + a3 vco2 0.5,iFrq3,2,ipw + a4 vco2 0.5,iFrq4,2,ipw + a5 vco2 0.5,iFrq5,2,ipw + a6 vco2 0.5,iFrq6,2,ipw + + amix sum a1,a2,a3,a4,a5,a6 ;MIX THE PULSE OSCILLATORS + amix reson amix,5000 * ioct,5000,1 ;BANDPASS FILTER THE MIXTURE + amix buthp amix,10000 ;HIGHPASS FILTER THE SOUND + amix butlp amix,12000 ;LOWPASS FILTER THE SOUND... + amix butlp amix,12000 ;AND AGAIN... + amix = amix*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;NOISE ELEMENT + anoise noise 0.8,0 ;GENERATE SOME WHITE NOISE + aenv expsega 1,0.3,0.07,p3-0.1,0.00001 ;CREATE AN AMPLITUDE ENVELOPE + kcf expseg 14000,0.7,7000,p3-0.1,5000 ;CREATE A CUTOFF FREQ. ENVELOPE + anoise butlp anoise,kcf ;LOWPASS FILTER THE NOISE SIGNAL + anoise buthp anoise,8000 ;HIGHPASS FILTER THE NOISE SIGNAL + anoise = anoise*aenv ;APPLY THE AMPLITUDE ENVELOPE + + ;MIX PULSE OSCILLATOR AND NOISE COMPONENTS + amix = (amix+anoise)*ilevel*p5*0.85 + + pan_verb_mix(amix, xchan:k("Cymbal.pan", 0.5), xchan:k("Cymbal.rvb", chnget:i("drums.rvb.default"))) +endin + +;WAVEFORM FOR TR808 RIMSHOT +giTR808RimShot ftgen 0,0,1024,10, 0.971,0.269,0.041,0.054,0.011,0.013,0.08,0.0065,0.005,0.004,0.003,0.003,0.002,0.002,0.002,0.002,0.002,0.001,0.001,0.001,0.001,0.001,0.002,0.001,0.001 + +/** Rimshot - From Iain McCurdy's TR-808.csd */ +instr Rimshot ;RIM SHOT + + idur = xchan("Rimshot.decay", 1.0) + ilevel = xchan("Rimshot.level", 1) + itune = xchan("Rimshot.tune", 0) + + idur = 0.027*idur ;NOTE DURATION + p3 limit idur,0.1,10 ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + + ;RING + aenv1 expsega 1,idur,0.001,1,0.001 ;AMPLITUDE ENVELOPE FOR SUSTAIN ELEMENT OF SOUND + ifrq1 = 1700*octave(itune) ;FREQUENCY OF SUSTAIN ELEMENT OF SOUND + aring oscili 1,ifrq1,giTR808RimShot,0 ;CREATE SUSTAIN ELEMENT OF SOUND + aring butbp aring,ifrq1,ifrq1*8 + aring = aring*(aenv1-0.001)*0.5 ;APPLY AMPLITUDE ENVELOPE + + ;NOISE + anoise noise 1,0 ;CREATE A NOISE SIGNAL + aenv2 expsega 1, 0.002, 0.8, 0.005, 0.5, idur-0.002-0.005, 0.0001, 1, 0.0001 ;CREATE AMPLITUDE ENVELOPE + anoise buthp anoise,800 ;HIGHPASS FILTER THE NOISE SOUND + kcf expseg 4000,idur,20 ;CUTOFF FREQUENCY FUNCTION FOR LOWPASS FILTER + anoise butlp anoise,kcf ;LOWPASS FILTER THE SOUND + anoise = anoise*(aenv2-0.001) ;APPLY ENVELOPE TO NOISE SIGNAL + + ;MIX + amix = (aring+anoise)*ilevel*p5*0.8 + + pan_verb_mix(amix, xchan:k("Rimshot.pan", 0.5), xchan:k("Rimshot.rvb", chnget:i("drums.rvb.default"))) +endin + + +/** Claves - From Iain McCurdy's TR-808.csd */ +instr Claves + idur = xchan("Claves.decay", 1.0) + ilevel = xchan("Claves.level", 1) + itune = xchan("Claves.tune", 0) + + ifrq = 2500*octave(itune) ;FREQUENCY OF OSCILLATOR + idur = 0.045 * idur ;DURATION OF THE NOTE + p3 limit idur,0.1,10 ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + aenv expsega 1,idur,0.001,1,0.001 ;AMPLITUDE ENVELOPE + afmod expsega 3,0.00005,1,1,1 ;FREQUENCY MODULATION ENVELOPE. GIVES THE SOUND A LITTLE MORE ATTACK. + asig oscili -(aenv-0.001),ifrq*afmod,gi_808_sine,0 ;AUDIO OSCILLATOR + asig = asig * 0.4 * ilevel * p5 ;RESCALE AMPLITUDE + + pan_verb_mix(asig, xchan:k("Claves.pan", 0.5), xchan:k("Claves.rvb", chnget:i("drums.rvb.default"))) +endin + + +/** Cowbell - From Iain McCurdy's TR-808.csd */ +instr Cowbell + idur = xchan("Cowbell.decay", 1.0) + ilevel = xchan("Cowbell.level", 1) + itune = xchan("Cowbell.tune", 0) + + ifrq1 = 562 * octave(itune) ;FREQUENCIES OF THE TWO OSCILLATORS + ifrq2 = 845 * octave(itune) ; + ipw = 0.5 ;PULSE WIDTH OF THE OSCILLATOR + ishp = -30 + idur = 0.7 ;NOTE DURATION + p3 = 0.7*idur ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + ishape = -30 ;SHAPE OF THE CURVES IN THE AMPLITUDE ENVELOPE + kenv1 transeg 1,p3*0.3,ishape,0.2, p3*0.7,ishape,0.2 ;FIRST AMPLITUDE ENVELOPE - PRINCIPALLY THE ATTACK OF THE NOTE + kenv2 expon 1,p3,0.0005 ;SECOND AMPLITUDE ENVELOPE - THE SUSTAIN PORTION OF THE NOTE + kenv = kenv1*kenv2 ;COMBINE THE TWO ENVELOPES + itype = 2 ;WAVEFORM FOR VCO2 (2=PULSE) + a1 vco2 0.65,ifrq1,itype,ipw ;CREATE THE TWO OSCILLATORS + a2 vco2 0.65,ifrq2,itype,ipw + amix = a1+a2 ;MIX THE TWO OSCILLATORS + iLPF2 = 10000 ;LOWPASS FILTER RESTING FREQUENCY + kcf expseg 12000,0.07,iLPF2,1,iLPF2 ;LOWPASS FILTER CUTOFF FREQUENCY ENVELOPE + alpf butlp amix,kcf ;LOWPASS FILTER THE MIX OF THE TWO OSCILLATORS (CREATE A NEW SIGNAL) + abpf reson amix, ifrq2, 25 ;BANDPASS FILTER THE MIX OF THE TWO OSCILLATORS (CREATE A NEW SIGNAL) + amix dcblock2 (abpf*0.06*kenv1)+(alpf*0.5)+(amix*0.9) ;MIX ALL SIGNALS AND BLOCK DC OFFSET + amix buthp amix,700 ;HIGHPASS FILTER THE MIX OF ALL SIGNALS + amix = amix * 0.07 * kenv * p5 * ilevel ;RESCALE AMPLITUDE + + pan_verb_mix(amix, xchan:k("Cowbell.pan", 0.5), xchan:k("Cowbell.rvb", chnget:i("drums.rvb.default"))) +endin + +/** Maraca - from Iain McCurdy's TR-808.csd */ +instr Maraca ;MARACA + idur = xchan("Maraca.decay", 1.0) + ilevel = xchan("Maraca.level", 1) + itune = xchan("Maraca.tune", 0) + ioct = octave:i(itune) + + idur = 0.07*idur ;DURATION 3 + p3 limit idur,0.1,10 ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + iHPF limit 6000*ioct,20,sr/2 ;HIGHPASS FILTER FREQUENCY + iLPF limit 12000*ioct,20,sr/3 ;LOWPASS FILTER FREQUENCY. (LIMIT MAXIMUM TO PREVENT OUT OF RANGE VALUES) + ;AMPLITUDE ENVELOPE + iBP1 = 0.4 ;BREAK-POINT 1 + iDur1 = 0.014*idur ;DURATION 1 + iBP2 = 1 ;BREAKPOINT 2 + iDur2 = 0.01 *idur ;DURATION 2 + iBP3 = 0.05 ;BREAKPOINT 3 + p3 limit idur,0.1,10 ;LIMIT THE MINIMUM DURATION OF THE NOTE (VERY SHORT NOTES CAN RESULT IN THE INDICATOR LIGHT ON-OFF NOTE BEING TO0 SHORT) + aenv expsega iBP1,iDur1,iBP2,iDur2,iBP3 ;CREATE AMPLITUDE ENVELOPE + anoise noise 0.75,0 ;CREATE A NOISE SIGNAL + anoise buthp anoise,iHPF ;HIGHPASS FILTER THE SOUND + anoise butlp anoise,iLPF ;LOWPASS FILTER THE SOUND + anoise = anoise*aenv*p5*ilevel ;SCALE THE AMPLITUDE + + pan_verb_mix(anoise, xchan:k("Maraca.pan", 0.5), xchan:k("Maraca.rvb", chnget:i("drums.rvb.default"))) +endin + +/** High Conga - From Iain McCurdy's TR-808.csd */ +instr HiConga ;HIGH CONGA + idur = xchan("HiConga.decay", 1.0) + ilevel = xchan("HiConga.level", 1) + itune = xchan("HiConga.tune", 0) + ioct = octave:i(itune) + + ifrq = 420*ioct ;FREQUENCY OF NOTE + p3 = 0.22*idur ;DURATION OF NOTE + aenv transeg 0.7,1/ifrq,1,1,p3,-6,0.001 ;AMPLITUDE ENVELOPE + afrq expsega ifrq*3,0.25/ifrq,ifrq,1,ifrq ;FREQUENCY ENVELOPE (CREATE A SHARPER ATTACK) + asig oscili -aenv*0.25,afrq,gi_808_sine ;CREATE THE AUDIO OSCILLATOR + asig = asig*p5*ilevel ;SCALE THE AMPLITUDE + + pan_verb_mix(asig, xchan:k("HiConga.pan", 0.5), xchan:k("HiConga.rvb", chnget:i("drums.rvb.default"))) +endin + +/** Mid Conga - From Iain McCurdy's TR-808.csd */ +instr MidConga ;MID CONGA + idur = xchan("MidConga.decay", 1.0) + ilevel = xchan("MidConga.level", 1) + itune = xchan("MidConga.tune", 0) + ioct = octave:i(itune) + + ifrq = 310*ioct ;FREQUENCY OF NOTE + p3 = 0.33*idur ;DURATION OF NOTE + aenv transeg 0.7,1/ifrq,1,1,p3,-6,0.001 ;AMPLITUDE ENVELOPE + afrq expsega ifrq*3,0.25/ifrq,ifrq,1,ifrq ;FREQUENCY ENVELOPE (CREATE A SHARPER ATTACK) + asig oscili -aenv*0.25,afrq,gi_808_sine ;CREATE THE AUDIO OSCILLATOR + asig = asig*p5*ilevel ;SCALE THE AMPLITUDE + + pan_verb_mix(asig, xchan:k("MidConga.pan", 0.5), xchan:k("MidConga.rvb", chnget:i("drums.rvb.default"))) +endin + +/** Low Conga - From Iain McCurdy's TR-808.csd */ +instr LowConga ;LOW CONGA + idur = xchan("LowConga.decay", 1.0) + ilevel = xchan("LowConga.level", 1) + itune = xchan("LowConga.tune", 0) + ioct = octave:i(itune) + + ifrq = 227*ioct ;FREQUENCY OF NOTE + p3 = 0.41*idur ;DURATION OF NOTE + aenv transeg 0.7,1/ifrq,1,1,p3,-6,0.001 ;AMPLITUDE ENVELOPE + afrq expsega ifrq*3,0.25/ifrq,ifrq,1,ifrq ;FREQUENCY ENVELOPE (CREATE A SHARPER ATTACK) + asig oscili -aenv*0.25,afrq,gi_808_sine ;CREATE THE AUDIO OSCILLATOR + asig = asig*p5*ilevel ;SCALE THE AMPLITUDE + + pan_verb_mix(asig, xchan:k("LowConga.pan", 0.5), xchan:k("LowConga.rvb", chnget:i("drums.rvb.default"))) +endin + +;; INITIALIZATION OF SYSTEM + +start("Clock") diff --git a/packages/csound/project.csd b/packages/csound/project.csd new file mode 100644 index 000000000..e1581d197 --- /dev/null +++ b/packages/csound/project.csd @@ -0,0 +1,10 @@ + + + +sr=48000 +ksmps=64 +nchnls=2 +0dbfs=1 + + + \ No newline at end of file diff --git a/packages/csound/sounds.csd b/packages/csound/sounds.orc similarity index 87% rename from packages/csound/sounds.csd rename to packages/csound/sounds.orc index aafea9a46..9bba7e017 100644 --- a/packages/csound/sounds.csd +++ b/packages/csound/sounds.orc @@ -1,10 +1,3 @@ - - -sr=48000 -ksmps=64 -nchnls=2 -0dbfs=1 - instr organ iduration = p3 ifreq = p4 @@ -44,6 +37,4 @@ instr triangle asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) out(asig, asig) -endin - - \ No newline at end of file +endin \ No newline at end of file From f599088cdf8edef08077bf7f7075b02d68c858d4 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 14:44:53 +0100 Subject: [PATCH 17/31] cleanup --- packages/csound/csound.mjs | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 21ad9c95e..657310e95 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -6,12 +6,12 @@ import orc from './livecode.orc?raw'; let csoundLoader, _csound; -// triggers given instrument name using csound. expects csound function to be called in advance `await csound()` +// triggers given instrument name using csound. Pattern.prototype._csound = function (instrument) { instrument = instrument || 'triangle'; init(); // not async to support csound inside other patterns + to be able to call pattern methods after it // TODO: find a alternative way to wait for csound to load (to wait with first time playback) - return this.onTrigger((time, hap, currentTime) => { + return this.onTrigger((time, hap) => { if (!_csound) { logger('[csound] not loaded yet', 'warning'); return; @@ -19,7 +19,6 @@ Pattern.prototype._csound = function (instrument) { let { gain = 0.8 } = hap.value; gain *= 0.2; - // const midi = toMidi(getPlayableNoteValue(hap)); const freq = getFrequency(hap); // TODO: find out how to send a precise ctx based time // http://www.csounds.com/manual/html/i.html @@ -29,7 +28,6 @@ Pattern.prototype._csound = function (instrument) { hap.duration + 0, // p3: duration in beats // instrument specific params: freq, //.toFixed(precision), // p4: frequency - // -48 + gain * 24, // p5: gain gain, // p5: gain ]; const msg = `i ${params.join(' ')}`; @@ -87,16 +85,3 @@ async function init() { csoundLoader = csoundLoader || load(); return csoundLoader; } - -// experimental: allows using jsx to eval csound -window.jsxPragma = function (fn, args, text) { - return fn(text); -}; - -// experimental: for use via JSX as ... -export function CsInstruments(text) { - if (Array.isArray(text)) { - text = text[0]; - } - return csound(text); -} From 5727c0dc8a1166a7dbc68c80e59fbb9ed2af3eba Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 14:56:50 +0100 Subject: [PATCH 18/31] clean up tunes + also load presets.orc --- packages/csound/csound.mjs | 7 +- packages/csound/{sounds.orc => presets.orc} | 21 +++++ .../test/__snapshots__/tunes.test.mjs.snap | 14 ++++ repl/src/tunes.mjs | 84 +------------------ 4 files changed, 41 insertions(+), 85 deletions(-) rename packages/csound/{sounds.orc => presets.orc} (66%) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 657310e95..3e698b551 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -1,8 +1,8 @@ import { getFrequency, logger, Pattern } from '@strudel.cycles/core'; import { getAudioContext } from '@strudel.cycles/webaudio'; import csd from './project.csd?raw'; -import orc from './livecode.orc?raw'; -// import orc from './sounds.orc?raw'; +import livecodeOrc from './livecode.orc?raw'; +import presetsOrc from './presets.orc?raw'; let csoundLoader, _csound; @@ -76,7 +76,8 @@ async function load() { await _csound.setOption('-m0'); // see -m flag https://csound.com/docs/manual/CommandFlags.html await _csound.setOption('--sample-accurate'); await _csound.compileCsdText(csd); - await _csound.compileOrc(orc); + await _csound.compileOrc(livecodeOrc); + await _csound.compileOrc(presetsOrc); await _csound.start(); return _csound; } diff --git a/packages/csound/sounds.orc b/packages/csound/presets.orc similarity index 66% rename from packages/csound/sounds.orc rename to packages/csound/presets.orc index 9bba7e017..b75122d52 100644 --- a/packages/csound/sounds.orc +++ b/packages/csound/presets.orc @@ -1,3 +1,4 @@ +; TODO add incredibly dope synths instr organ iduration = p3 ifreq = p4 @@ -37,4 +38,24 @@ instr triangle asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) out(asig, asig) +endin + +instr pad + iduration = p3 + ifreq = p4 + igain = p5 + ioct = octcps(ifreq) + + asig = vco2(igain, ifreq, 0) + + ; amp envelope + iattack = .5 + irelease = .1 + asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) + + idepth = 2 + acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) + asig = zdf_2pole(asig, 1000, 2) + + out(asig, asig) endin \ No newline at end of file diff --git a/repl/src/test/__snapshots__/tunes.test.mjs.snap b/repl/src/test/__snapshots__/tunes.test.mjs.snap index 864a9ba79..6f3cc2984 100644 --- a/repl/src/test/__snapshots__/tunes.test.mjs.snap +++ b/repl/src/test/__snapshots__/tunes.test.mjs.snap @@ -1409,6 +1409,20 @@ exports[`renders tunes > tune: chop 1`] = ` ] `; +exports[`renders tunes > tune: csoundDemo 1`] = ` +[ + "0/1 -> 1/1: {\\"note\\":\\"D3\\"}", + "-1/4 -> 1/4: {\\"note\\":\\"Bb3\\"}", + "1/4 -> 5/4: {\\"note\\":\\"F3\\"}", + "0/1 -> 1/2: {\\"note\\":\\"F4\\"}", + "1/2 -> 3/2: {\\"note\\":\\"C4\\"}", + "-1/4 -> 1/4: {\\"note\\":\\"A4\\"}", + "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", + "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", + "3/4 -> 7/4: {\\"note\\":\\"E4\\"}", +] +`; + exports[`renders tunes > tune: csoundMixed 1`] = ` [ "2/3 -> 3/4: {\\"note\\":58.95209612324834,\\"gain\\":1}", diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index c65224e85..cf839ead1 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -992,62 +992,7 @@ export const juxUndTollerei = `note("c3 eb3 g3 bb3").palindrome() .delay(.5).delaytime(.1).delayfeedback(.4) .pianoroll()`; -export const csoundTest = `await csound\` -instr sawtooth - iduration = p3 - ifreq = p4 - igain = p5 - ioct = octcps(ifreq) - - asig = vco2(igain, ifreq, 0) - - ; amp envelope - iattack = .5 - irelease = .1 - asig *= linsegr:a(0, iattack, 1, iduration, 1, irelease, 0) - - idepth = 2 - acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) - asig = zdf_2pole(asig, 1000, 2) - - out(asig, asig) -endin\` - -stack( - note("/2".voicings()).s('sawtooth'), - note("/2").s('sawtooth') -) -.csound('sawtooth')`; - -export const csoundTest2 = `await csound\` -instr organ - iduration = p3 - ifreq = p4 - igain = p5 - ioct = octcps(ifreq) - - kpwm = oscili(.5, 2) - asig = vco2(igain, ifreq, 4, .5 + kpwm) - asig += vco2(igain/4, ifreq * 2) - - iattack = .01 - irelease = .005 - asig *= linsegr:a(0, iattack, 1, iduration, 0, irelease, 0) - - out(asig, asig) -endin\` - -"<0 2 [4 6](3,4,1) 3*2>" -.off(1/4, add(2)) -.off(1/2, add(6)) -.scale('D minor') -.legato(perlin.range(.2,2).slow(8)) -// .echo(4, 1/8, .5) -.note() -.pianoroll() -.csound('organ');`; - -export const csoundTest3 = `await csound\` +export const csoundDemo = `await csound\` instr CoolSynth iduration = p3 ifreq = p4 @@ -1077,29 +1022,4 @@ endin\` .scale('D minor') .note() //.pianoroll() -.csound("/4")`; - -export const csoundTest4 = `await csound() - -stack( - note("/2".voicings()).csound('organ').gain(.5), - note("/2".superimpose(add(.1))).s('sawtooth').cutoff(800).resonance(10).shape(.3) -)`; - -export const csoundMixed = `await csound() - -stack( - "/2".voicings() - .add(rand.range(-.1,.1)).note() - .csound('organ').gain(1).struct("[~@2 x]*2").legato(.25) - , - "/2" - .superimpose(add(rand.range(-.1,.1))).note() - .s('sawtooth').cutoff(perlin.range(200,500)).resonance(10) - .struct("x(4,6,1) x(5,6,2)") - .decay(.1).sustain(0) - , - s("bd*2,hh:1(4,6),[~ sd]/2") - .room(.5) - .speed(perlin.range(.9,1.1).slow(4)) -).slow(2)`; +.csound("/4")`; From 8e531f400e4cdb81a73f9971f74326a993d6e614 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 15:00:16 +0100 Subject: [PATCH 19/31] allow defining csound on the window --- packages/csound/csound.mjs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 3e698b551..4e5ec3703 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -69,8 +69,13 @@ function eventLogger(type, args) { } async function load() { - const { Csound } = await import('@csound/browser'); - _csound = await Csound({ audioContext: getAudioContext() }); + if (window.__csound__) { + // allows using some other csound instance + _csound = window.__csound__; + } else { + const { Csound } = await import('@csound/browser'); + _csound = await Csound({ audioContext: getAudioContext() }); + } _csound.removeAllListeners('message'); ['message'].forEach((k) => _csound.on(k, (...args) => eventLogger(k, args))); await _csound.setOption('-m0'); // see -m flag https://csound.com/docs/manual/CommandFlags.html From e4ee4211c8507e7184116fdb73f97cbc312fc062 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 1 Dec 2022 15:10:22 +0100 Subject: [PATCH 20/31] delete strudel unrealted example --- packages/csound/example/.gitignore | 24 - packages/csound/example/README.md | 7 - packages/csound/example/counter.js | 9 - packages/csound/example/index.html | 13 - packages/csound/example/javascript.svg | 1 - packages/csound/example/main.js | 49 - packages/csound/example/package-lock.json | 3518 --------------------- packages/csound/example/package.json | 17 - packages/csound/example/public/vite.svg | 1 - packages/csound/example/style.css | 97 - packages/csound/example/test.orc | 1 - packages/csound/example/tutorial1.csd | 44 - packages/csound/example/tutorial2.csd | 68 - 13 files changed, 3849 deletions(-) delete mode 100644 packages/csound/example/.gitignore delete mode 100644 packages/csound/example/README.md delete mode 100644 packages/csound/example/counter.js delete mode 100644 packages/csound/example/index.html delete mode 100644 packages/csound/example/javascript.svg delete mode 100644 packages/csound/example/main.js delete mode 100644 packages/csound/example/package-lock.json delete mode 100644 packages/csound/example/package.json delete mode 100644 packages/csound/example/public/vite.svg delete mode 100644 packages/csound/example/style.css delete mode 100644 packages/csound/example/test.orc delete mode 100644 packages/csound/example/tutorial1.csd delete mode 100644 packages/csound/example/tutorial2.csd diff --git a/packages/csound/example/.gitignore b/packages/csound/example/.gitignore deleted file mode 100644 index a547bf36d..000000000 --- a/packages/csound/example/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/packages/csound/example/README.md b/packages/csound/example/README.md deleted file mode 100644 index 9a52f5f70..000000000 --- a/packages/csound/example/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# README - -this project is based on the webaudio csound tutorial: - - - -(currently came till step 4) diff --git a/packages/csound/example/counter.js b/packages/csound/example/counter.js deleted file mode 100644 index 881e2d7ad..000000000 --- a/packages/csound/example/counter.js +++ /dev/null @@ -1,9 +0,0 @@ -export function setupCounter(element) { - let counter = 0 - const setCounter = (count) => { - counter = count - element.innerHTML = `count is ${counter}` - } - element.addEventListener('click', () => setCounter(counter + 1)) - setCounter(0) -} diff --git a/packages/csound/example/index.html b/packages/csound/example/index.html deleted file mode 100644 index 2ad7b1ab9..000000000 --- a/packages/csound/example/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Vite App - - -
- - - diff --git a/packages/csound/example/javascript.svg b/packages/csound/example/javascript.svg deleted file mode 100644 index f9abb2b72..000000000 --- a/packages/csound/example/javascript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/csound/example/main.js b/packages/csound/example/main.js deleted file mode 100644 index e94d78820..000000000 --- a/packages/csound/example/main.js +++ /dev/null @@ -1,49 +0,0 @@ -import { Csound } from '@csound/browser'; -import './style.css'; -// import csd from './tutorial1.csd?raw'; -import csd from './tutorial2.csd?raw'; - -document.querySelector('#app').innerHTML = ` -
- -
-`; - -let csound = null; -const startCsound = async () => { - if (csound) { - return; - } - console.log('Starting Csound...'); - csound = await Csound(); - console.log(csound); - window.csound = csound; - await csound.setOption('-m0'); - await csound.compileCsdText(csd); - await csound.setControlChannel('main.note.amp', -12); - await csound.start(); - - document.querySelector('#startButton').remove(); - createPerformanceUI(csound); -}; -const createPerformanceUI = (csound) => { - document.querySelector('#app').innerHTML = ` -
- - -
- `; - - document.querySelector('#flourish').addEventListener('click', async () => { - console.log('flourish..'); - // await csound.readScore(`i "Flourish" 0 0 0`); - await csound.evalCode(` - schedule("Flourish", next_time(.25), 0, 0) - `); - }); - document.querySelector('#ampSlider').addEventListener('input', async (evt) => { - await csound.setControlChannel('main.note.amp', evt.target.value); - }); -}; - -document.querySelector('#startButton').addEventListener('click', startCsound); diff --git a/packages/csound/example/package-lock.json b/packages/csound/example/package-lock.json deleted file mode 100644 index a54dd865e..000000000 --- a/packages/csound/example/package-lock.json +++ /dev/null @@ -1,3518 +0,0 @@ -{ - "name": "example", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "example", - "version": "0.0.0", - "dependencies": { - "@csound/browser": "^6.18.3" - }, - "devDependencies": { - "vite": "^3.2.3" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csound/browser": { - "version": "6.18.3", - "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", - "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", - "dependencies": { - "comlink": "^4.3.1", - "eslint-plugin-n": "^15.5.1", - "eventemitter3": "^4.0.7", - "google-closure-compiler": "^20221102.0.1", - "google-closure-library": "^20221102.0.0", - "path-browserify": "^1.0.1", - "rambda": "^7.4.0", - "rimraf": "^3.0.2", - "standardized-audio-context": "^25.3.35", - "text-encoding-shim": "^1.0.5", - "unmute-ios-audio": "^3.3.0", - "web-midi-api": "^2.1.8" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.15.tgz", - "integrity": "sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.15.tgz", - "integrity": "sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "peer": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/webmidi": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", - "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": 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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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==", - "peer": true - }, - "node_modules/automation-events": { - "version": "4.0.24", - "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", - "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", - "dependencies": { - "@babel/runtime": "^7.20.1", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=12.20.1" - } - }, - "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==" - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "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==", - "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==" - }, - "node_modules/comlink": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", - "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "peer": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "peer": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/esbuild": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.15.tgz", - "integrity": "sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.15", - "@esbuild/linux-loong64": "0.15.15", - "esbuild-android-64": "0.15.15", - "esbuild-android-arm64": "0.15.15", - "esbuild-darwin-64": "0.15.15", - "esbuild-darwin-arm64": "0.15.15", - "esbuild-freebsd-64": "0.15.15", - "esbuild-freebsd-arm64": "0.15.15", - "esbuild-linux-32": "0.15.15", - "esbuild-linux-64": "0.15.15", - "esbuild-linux-arm": "0.15.15", - "esbuild-linux-arm64": "0.15.15", - "esbuild-linux-mips64le": "0.15.15", - "esbuild-linux-ppc64le": "0.15.15", - "esbuild-linux-riscv64": "0.15.15", - "esbuild-linux-s390x": "0.15.15", - "esbuild-netbsd-64": "0.15.15", - "esbuild-openbsd-64": "0.15.15", - "esbuild-sunos-64": "0.15.15", - "esbuild-windows-32": "0.15.15", - "esbuild-windows-64": "0.15.15", - "esbuild-windows-arm64": "0.15.15" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.15.tgz", - "integrity": "sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.15.tgz", - "integrity": "sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.15.tgz", - "integrity": "sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.15.tgz", - "integrity": "sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.15.tgz", - "integrity": "sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.15.tgz", - "integrity": "sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.15.tgz", - "integrity": "sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.15.tgz", - "integrity": "sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.15.tgz", - "integrity": "sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.15.tgz", - "integrity": "sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.15.tgz", - "integrity": "sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.15.tgz", - "integrity": "sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.15.tgz", - "integrity": "sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.15.tgz", - "integrity": "sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.15.tgz", - "integrity": "sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.15.tgz", - "integrity": "sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.15.tgz", - "integrity": "sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.15.tgz", - "integrity": "sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.15.tgz", - "integrity": "sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.15.tgz", - "integrity": "sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "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==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", - "peer": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-n": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", - "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", - "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "peer": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "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==", - "peer": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "peer": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "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==", - "peer": 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-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "peer": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "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==", - "peer": true - }, - "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==" - }, - "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==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/google-closure-compiler": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", - "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", - "dependencies": { - "chalk": "4.x", - "google-closure-compiler-java": "^20221102.0.1", - "minimist": "1.x", - "vinyl": "2.x", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "bin": { - "google-closure-compiler": "cli.js" - }, - "engines": { - "node": ">=10" - }, - "optionalDependencies": { - "google-closure-compiler-linux": "^20221102.0.1", - "google-closure-compiler-osx": "^20221102.0.1", - "google-closure-compiler-windows": "^20221102.0.1" - } - }, - "node_modules/google-closure-compiler-java": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", - "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" - }, - "node_modules/google-closure-compiler-linux": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", - "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", - "cpu": [ - "x32", - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/google-closure-compiler-osx": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", - "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", - "cpu": [ - "x32", - "x64", - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/google-closure-compiler-windows": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", - "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", - "cpu": [ - "x32", - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/google-closure-library": { - "version": "20221102.0.0", - "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", - "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "peer": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "peer": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "peer": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "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==" - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "peer": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "peer": true - }, - "node_modules/jazz-midi": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", - "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "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==", - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "peer": true - }, - "node_modules/jzz": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", - "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", - "dependencies": { - "@types/webmidi": "^2.0.6", - "jazz-midi": "^1.7.6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.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==", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "peer": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "peer": true - }, - "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==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "peer": 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==", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "peer": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "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==", - "peer": 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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "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==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/rambda": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", - "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "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/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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==" - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "peer": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standardized-audio-context": { - "version": "25.3.35", - "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", - "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", - "dependencies": { - "@babel/runtime": "^7.20.1", - "automation-events": "^4.0.24", - "tslib": "^2.4.1" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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==", - "peer": 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==", - "peer": 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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-encoding-shim": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", - "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unmute-ios-audio": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", - "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "dependencies": { - "source-map": "^0.5.1" - } - }, - "node_modules/vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/web-midi-api": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", - "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", - "dependencies": { - "jzz": "^1.5.4" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "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==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@csound/browser": { - "version": "6.18.3", - "resolved": "https://registry.npmjs.org/@csound/browser/-/browser-6.18.3.tgz", - "integrity": "sha512-udvedLjNZjEvrCFxMItirRh/gKFbY/dED4SKbUoinhImJzVTRtykiCZv9CHMCmD6ixWPo4BByVkV2NuYNsBQ+g==", - "requires": { - "comlink": "^4.3.1", - "eslint-plugin-n": "^15.5.1", - "eventemitter3": "^4.0.7", - "google-closure-compiler": "^20221102.0.1", - "google-closure-library": "^20221102.0.0", - "path-browserify": "^1.0.1", - "rambda": "^7.4.0", - "rimraf": "^3.0.2", - "standardized-audio-context": "^25.3.35", - "text-encoding-shim": "^1.0.5", - "unmute-ios-audio": "^3.3.0", - "web-midi-api": "^2.1.8" - } - }, - "@esbuild/android-arm": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.15.tgz", - "integrity": "sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.15.tgz", - "integrity": "sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==", - "dev": true, - "optional": true - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "peer": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "peer": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/webmidi": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/webmidi/-/webmidi-2.0.6.tgz", - "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==" - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "peer": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peer": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "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==", - "peer": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "peer": true - }, - "automation-events": { - "version": "4.0.24", - "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.24.tgz", - "integrity": "sha512-v/c//VCE1TGU3R56cyTFnebXFR3NOOx5Kiuaz7TXwLGpYMp9VgKCwelODRW3ZZ5TP2OFymfrWsvNVuPSi6vVPQ==", - "requires": { - "@babel/runtime": "^7.20.1", - "tslib": "^2.4.1" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "requires": { - "semver": "^7.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "peer": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "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==", - "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==" - }, - "comlink": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", - "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "peer": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "peer": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "esbuild": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.15.tgz", - "integrity": "sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.15", - "@esbuild/linux-loong64": "0.15.15", - "esbuild-android-64": "0.15.15", - "esbuild-android-arm64": "0.15.15", - "esbuild-darwin-64": "0.15.15", - "esbuild-darwin-arm64": "0.15.15", - "esbuild-freebsd-64": "0.15.15", - "esbuild-freebsd-arm64": "0.15.15", - "esbuild-linux-32": "0.15.15", - "esbuild-linux-64": "0.15.15", - "esbuild-linux-arm": "0.15.15", - "esbuild-linux-arm64": "0.15.15", - "esbuild-linux-mips64le": "0.15.15", - "esbuild-linux-ppc64le": "0.15.15", - "esbuild-linux-riscv64": "0.15.15", - "esbuild-linux-s390x": "0.15.15", - "esbuild-netbsd-64": "0.15.15", - "esbuild-openbsd-64": "0.15.15", - "esbuild-sunos-64": "0.15.15", - "esbuild-windows-32": "0.15.15", - "esbuild-windows-64": "0.15.15", - "esbuild-windows-arm64": "0.15.15" - } - }, - "esbuild-android-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.15.tgz", - "integrity": "sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.15.tgz", - "integrity": "sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.15.tgz", - "integrity": "sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.15.tgz", - "integrity": "sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.15.tgz", - "integrity": "sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.15.tgz", - "integrity": "sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.15.tgz", - "integrity": "sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.15.tgz", - "integrity": "sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.15.tgz", - "integrity": "sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.15.tgz", - "integrity": "sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.15.tgz", - "integrity": "sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.15.tgz", - "integrity": "sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.15.tgz", - "integrity": "sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.15.tgz", - "integrity": "sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.15.tgz", - "integrity": "sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.15.tgz", - "integrity": "sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.15.tgz", - "integrity": "sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.15.tgz", - "integrity": "sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.15.tgz", - "integrity": "sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.15.tgz", - "integrity": "sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==", - "dev": true, - "optional": 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==", - "peer": true - }, - "eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", - "peer": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - } - } - }, - "eslint-plugin-n": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", - "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", - "requires": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "peer": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "peer": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "peer": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "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==", - "peer": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "peer": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "peer": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "peer": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "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==", - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "peer": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "peer": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "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==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "peer": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "google-closure-compiler": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20221102.0.1.tgz", - "integrity": "sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==", - "requires": { - "chalk": "4.x", - "google-closure-compiler-java": "^20221102.0.1", - "google-closure-compiler-linux": "^20221102.0.1", - "google-closure-compiler-osx": "^20221102.0.1", - "google-closure-compiler-windows": "^20221102.0.1", - "minimist": "1.x", - "vinyl": "2.x", - "vinyl-sourcemaps-apply": "^0.2.0" - } - }, - "google-closure-compiler-java": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20221102.0.1.tgz", - "integrity": "sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==" - }, - "google-closure-compiler-linux": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20221102.0.1.tgz", - "integrity": "sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==", - "optional": true - }, - "google-closure-compiler-osx": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20221102.0.1.tgz", - "integrity": "sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==", - "optional": true - }, - "google-closure-compiler-windows": { - "version": "20221102.0.1", - "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20221102.0.1.tgz", - "integrity": "sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==", - "optional": true - }, - "google-closure-library": { - "version": "20221102.0.0", - "resolved": "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20221102.0.0.tgz", - "integrity": "sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "peer": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "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==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "peer": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "peer": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "peer": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "peer": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "peer": true - }, - "jazz-midi": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.6.tgz", - "integrity": "sha512-vKCmBpotb1y+kEbRlu43COar2LzV46uOTTzyM/zTx5LR7WUTWle7FFC8rphqBVdryW66QtOyUA2N/DWZToBang==" - }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "peer": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "peer": true - }, - "jzz": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/jzz/-/jzz-1.5.5.tgz", - "integrity": "sha512-+zaw42xTBFm5KlqykKpD0kFaTZbjYwIQjkfhXsLkPWsg4jDVmgme/WLgFqevHPHJEFlPlUdEYI3RrzN0PBAbCw==", - "requires": { - "@types/webmidi": "^2.0.6", - "jazz-midi": "^1.7.6" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "peer": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "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==", - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "peer": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "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==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "peer": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "peer": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": 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==", - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "peer": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "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==", - "peer": 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==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "peer": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "peer": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "peer": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "peer": true - }, - "rambda": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", - "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "peer": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "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" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "peer": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "peer": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "peer": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "standardized-audio-context": { - "version": "25.3.35", - "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.35.tgz", - "integrity": "sha512-61KBkor9fOsMEl3NZllnis8KDmTJzonuuW8h6JBmxXXcUDucypGCJp+hlbyKG+olav8wgA+VKlqFmiJEbh4CfA==", - "requires": { - "@babel/runtime": "^7.20.1", - "automation-events": "^4.0.24", - "tslib": "^2.4.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "peer": 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==", - "peer": 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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "text-encoding-shim": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", - "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "peer": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "peer": true - }, - "unmute-ios-audio": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/unmute-ios-audio/-/unmute-ios-audio-3.3.0.tgz", - "integrity": "sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "requires": { - "source-map": "^0.5.1" - } - }, - "vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - }, - "web-midi-api": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/web-midi-api/-/web-midi-api-2.1.8.tgz", - "integrity": "sha512-kk0SmjU3nufE29MWBpdf3D0J4HboA1ybz386KVsytGmNesKIDS7TgqyD1UGeRXYZs+cn3OnJ9Th9oEmsPcce5A==", - "requires": { - "jzz": "^1.5.4" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "peer": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "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==", - "peer": true - } - } -} diff --git a/packages/csound/example/package.json b/packages/csound/example/package.json deleted file mode 100644 index 87c2cb7a7..000000000 --- a/packages/csound/example/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "example", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "devDependencies": { - "vite": "^3.2.3" - }, - "dependencies": { - "@csound/browser": "^6.18.3" - } -} diff --git a/packages/csound/example/public/vite.svg b/packages/csound/example/public/vite.svg deleted file mode 100644 index e7b8dfb1b..000000000 --- a/packages/csound/example/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/csound/example/style.css b/packages/csound/example/style.css deleted file mode 100644 index 12320801d..000000000 --- a/packages/csound/example/style.css +++ /dev/null @@ -1,97 +0,0 @@ -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.vanilla:hover { - filter: drop-shadow(0 0 2em #f7df1eaa); -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/packages/csound/example/test.orc b/packages/csound/example/test.orc deleted file mode 100644 index eb51791b1..000000000 --- a/packages/csound/example/test.orc +++ /dev/null @@ -1 +0,0 @@ -schedule("Flourish", 0, 0, 0) \ No newline at end of file diff --git a/packages/csound/example/tutorial1.csd b/packages/csound/example/tutorial1.csd deleted file mode 100644 index df789053c..000000000 --- a/packages/csound/example/tutorial1.csd +++ /dev/null @@ -1,44 +0,0 @@ -;; Author: Steven Yi - - --o dac --port=10000 - - -sr=48000 -ksmps=64 -nchnls=2 -0dbfs=1 - -instr 1 - ioct = octcps(p4) - kpwm = oscili(.1, 5) - asig = vco2(p5, p4, 4, .5 + kpwm) - asig += vco2(p5, p4 * 2) - - idepth = 3 - acut = transegr:a(0, .002, 0, idepth, .5, -4.2, 0.001, .5, -4.2, 0) - asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.5) - - asig *= linsegr:a(1, p3, 1, .5, 0) - - out(asig, asig) - -endin - -instr Main - inotes[] fillarray 60, 67, 63, 65, 62 - ioct[] fillarray 0,1,0,0,1 - inote = inotes[p4 % 37 % 11 % 5] + 12 * ioct[p4 % 41 % 17 % 5] - schedule(1, 0, .25, cpsmidinn(inote), 0.25) - - if(p4 % 64 % 37 % 17 % 11 == 0 && inote != 74 && inote != 62) then - schedule(1, 0, .5, cpsmidinn(inote + 7), 0.125) - endif - - schedule(p1, .25, .25, p4 + 1) -endin - -schedule("Main", 0, 0, 0) - - - \ No newline at end of file diff --git a/packages/csound/example/tutorial2.csd b/packages/csound/example/tutorial2.csd deleted file mode 100644 index bb853da3f..000000000 --- a/packages/csound/example/tutorial2.csd +++ /dev/null @@ -1,68 +0,0 @@ -;; Author: Steven Yi - - --o dac --port=10000 - - -sr=48000 -ksmps=64 -nchnls=2 -0dbfs=1 - -instr 1 - ioct = octcps(p4) - kpwm = oscili(.1, 5) - asig = vco2(p5, p4, 4, .5 + kpwm) - asig += vco2(p5, p4 * 2) - - idepth = 3 - acut = transegr:a(0, .002, 0, idepth, .5, -4.2, 0.001, .5, -4.2, 0) - asig = zdf_2pole(asig, cpsoct(ioct + acut), 0.5) - - asig *= linsegr:a(1, p3, 1, .5, 0) - - out(asig, asig) - -endin - -opcode next_time, i, i - inext xin - - itime = times:i() - iticks = round(itime / inext) - iticks += 1 - - iout = (iticks * inext) - itime - xout iout -endop - -instr Flourish - inotes[] fillarray 72, 74, 75, 77, 79 - inote = inotes[floor(rnd(5))] - - schedule(1, 0, .25, cpsmidinn(inote), ampdbfs(-12 + p4 * .5)) - - if(p4 > -60) then - schedule(p1, next_time(.125), 0, p4 - 1) - endif -endin - -instr Main - iamp = ampdbfs(chnget:i("main.note.amp")) - inotes[] fillarray 60, 67, 63, 65, 62 - ioct[] fillarray 0,1,0,0,1 - inote = inotes[p4 % 37 % 11 % 5] + 12 * ioct[p4 % 41 % 17 % 5] - schedule(1, 0, .25, cpsmidinn(inote), iamp) - - if(p4 % 64 % 37 % 17 % 11 == 0 && inote != 74 && inote != 62) then - schedule(1, 0, .5, cpsmidinn(inote + 7), iamp / 2) - endif - - schedule(p1, next_time(.25), .25, p4 + 1) -endin - - -schedule("Main", 0, 0, 0) - - - \ No newline at end of file From e8fb7ee683cc089f474a7d88bf7ba82cba8610b6 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 11:38:47 +0100 Subject: [PATCH 21/31] now passing controls as string keymap --- packages/csound/csound.mjs | 20 +++++++++++++++----- packages/csound/presets.orc | 35 +++++++++++++++++++++++++++++++++++ repl/src/tunes.mjs | 16 ++++++++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 4e5ec3703..3df641891 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -16,10 +16,16 @@ Pattern.prototype._csound = function (instrument) { logger('[csound] not loaded yet', 'warning'); return; } + if (typeof hap.value !== 'object') { + throw new Error('csound only support objects as hap values'); + } let { gain = 0.8 } = hap.value; gain *= 0.2; - const freq = getFrequency(hap); + const freq = Math.round(getFrequency(hap)); + const controls = Object.entries({ ...hap.value, freq }) + .flat() + .join('/'); // TODO: find out how to send a precise ctx based time // http://www.csounds.com/manual/html/i.html const params = [ @@ -29,6 +35,7 @@ Pattern.prototype._csound = function (instrument) { // instrument specific params: freq, //.toFixed(precision), // p4: frequency gain, // p5: gain + `"${controls}"`, // p6 controls as string (like superdirt osc message) ]; const msg = `i ${params.join(' ')}`; _csound.inputMessage(msg); @@ -38,9 +45,12 @@ Pattern.prototype._csound = function (instrument) { // initializes csound + can be used to reevaluate given instrument code export async function csound(code = '') { await init(); - code && (await _csound?.evalCode(`${code}`)); - // ^ ^ - // wrapping in backticks makes sure it works when calling as templated function + if (code) { + code = `${code}`; + // ^ ^ + // wrapping in backticks makes sure it works when calling as templated function + await _csound?.evalCode(code); + } } Pattern.prototype.define('csound', (a, pat) => pat.csound(a), { composable: false, patternified: true }); @@ -78,7 +88,7 @@ async function load() { } _csound.removeAllListeners('message'); ['message'].forEach((k) => _csound.on(k, (...args) => eventLogger(k, args))); - await _csound.setOption('-m0'); // see -m flag https://csound.com/docs/manual/CommandFlags.html + await _csound.setOption('-m0d'); // see -m flag https://csound.com/docs/manual/CommandFlags.html await _csound.setOption('--sample-accurate'); await _csound.compileCsdText(csd); await _csound.compileOrc(livecodeOrc); diff --git a/packages/csound/presets.orc b/packages/csound/presets.orc index b75122d52..a6e2b4420 100644 --- a/packages/csound/presets.orc +++ b/packages/csound/presets.orc @@ -1,3 +1,15 @@ +; returns value of given key in given "string map" +; keymap("freq", "note/c3/freq/220/gain/0.5") +; yields "220" +opcode keymap, S, SS + Skey, Smap xin + idelimiter = strindex(Smap, strcat(Skey, "/")) + ifrom = idelimiter + strlen(Skey) + 1 + Svalue = strsub(Smap, ifrom, strlen(Smap)) + Svalue = strsub(Svalue, 0, strindex(Svalue, "/")) + xout Svalue +endop + ; TODO add incredibly dope synths instr organ iduration = p3 @@ -58,4 +70,27 @@ instr pad asig = zdf_2pole(asig, 1000, 2) out(asig, asig) +endin + + +gisine ftgen 0, 0, 4096, 10, 1 + +instr bow + kpres = 2 + krat = 0.16 + kvibf = 6.12723 + + kvib linseg 0, 0.5, 0, 1, 1, p3-0.5, 1 + kvamp = kvib * 0.01 + asig wgbow .7, p4, kpres, krat, kvibf, kvamp, gisine + asig = asig*p5 + outs asig, asig +endin + + +instr Meta + Smap = strget(p6) + Sinstrument = keymap("s", Smap) + schedule(Sinstrument, 0, p3, p4, p5) + ; TODO find a way to pipe Sinstrument through effects endin \ No newline at end of file diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index cf839ead1..ba7811e28 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -1023,3 +1023,19 @@ endin\` .note() //.pianoroll() .csound("/4")`; + +export const loungeSponge = `await csound() + +stack( + note("/2".voicings()) + .cutoff(sine.range(500,2000).round().slow(16)) + .euclidLegato(3,8).csound('FM1') + , + note("/2").ply(8).csound('Bass').gain("1 4 1 4") + , + note("0 7 [4 3] 2".fast(2/3).off(".25 .125",add("<2 4 -3 -1>")) + .slow(2).scale('A4 minor')) + .legato(.25).csound('SynHarp') + , + s("bd*2,[~ hh]*2,~ cp").bank('RolandTR909') + )`; From caea7bb39d174095531cb86080c3552735139137 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 2 Dec 2022 10:45:01 +0000 Subject: [PATCH 22/31] Support sending CRC16 bytes with serial messages (#276) Optionally add a crc16 checksum. Optionally support sending names in name/value pairs as single characters --- packages/serial/serial.mjs | 78 +++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/packages/serial/serial.mjs b/packages/serial/serial.mjs index 27f2bb589..e5e7c188a 100644 --- a/packages/serial/serial.mjs +++ b/packages/serial/serial.mjs @@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th import { Pattern, isPattern } from '@strudel.cycles/core'; -var serialWriter; +var writeMessage; var choosing = false; export async function getWriter(br = 38400) { @@ -14,18 +14,30 @@ export async function getWriter(br = 38400) { return; } choosing = true; - if (serialWriter) { - return serialWriter; + if (writeMessage) { + return writeMessage; } if ('serial' in navigator) { const port = await navigator.serial.requestPort(); await port.open({ baudRate: br }); - // eslint-disable-next-line no-undef - const textEncoder = new TextEncoderStream(); - const writableStreamClosed = textEncoder.readable.pipeTo(port.writable); - const writer = textEncoder.writable.getWriter(); - serialWriter = function (message) { - writer.write(message); + const encoder = new TextEncoder(); + const writer = port.writable.getWriter(); + writeMessage = function (message, chk) { + const encoded = encoder.encode(message) + if (!chk) { + writer.write(encoded); + } + else { + const bytes = new Uint8Array(4); + bytes[0] = 124; // | symbol + bytes[1] = (chk >> 8) & 0xFF; + bytes[2] = chk & 0xFF; + bytes[3] = 59; // semicolon + const withchk = new Uint8Array(encoded.length+4) + withchk.set(encoded); + withchk.set(bytes, encoded.length); + writer.write(withchk); + } }; } else { throw 'Webserial is not available in this browser.'; @@ -34,18 +46,41 @@ export async function getWriter(br = 38400) { const latency = 0.1; -Pattern.prototype.serial = function (...args) { - return this._withHap((hap) => { - if (!serialWriter) { - getWriter(...args); +// crc16 (CCITT-FALSE) https://gist.github.com/tijnkooijmans/10981093 +function crc16(data) { + const length = data.length + if (length == 0) { + return 0; + } + + var crc = 0xFFFF; + for (var i = 0; i < length; ++i) { + crc ^= data.charCodeAt(i) << 8; + for (var j = 0; j < 8; ++j) { + crc = (crc & 0x8000) > 0 ? (crc << 1) ^ 0x1021 : crc << 1; + } + } + + return crc & 0xffff; +} + +Pattern.prototype.serial = function (br=38400,sendcrc=false,singlecharids=false) { + return this.withHap((hap) => { + if (!writeMessage) { + getWriter(br); } const onTrigger = (time, hap, currentTime) => { var message = ''; + var chk = 0; if (typeof hap.value === 'object') { if ('action' in hap.value) { - message += hap.value['action'] + '('; + var action = hap.value['action']; + if (singlecharids) { + action = action.charAt(0); + } + message += action + '('; var first = true; - for (const [key, val] of Object.entries(hap.value)) { + for (var [key, val] of Object.entries(hap.value)) { if (key === 'action') { continue; } @@ -54,19 +89,26 @@ Pattern.prototype.serial = function (...args) { } else { message += ','; } - message += `${key}:${val}`; + if (singlecharids) { + key = key.charAt(0); + } + message += key + ':' + val; } message += ')'; + if (sendcrc) { + chk = crc16(message) + } } else { for (const [key, val] of Object.entries(hap.value)) { - message += `${key}:${val};`; + message += `${key}:${val}`; } } } else { message = hap.value; } const offset = (time - currentTime + latency) * 1000; - window.setTimeout(serialWriter, offset, message); + + window.setTimeout(function () {writeMessage(message, chk)}, offset); }; return hap.setContext({ ...hap.context, onTrigger, dominantTrigger: true }); }); From 486cd003845971032ea64fce10948ef9a7a81276 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 12:09:21 +0100 Subject: [PATCH 23/31] added loadOrc + removed livecode.orc by default --- packages/csound/csound.mjs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 3df641891..0d9c6d05c 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -1,7 +1,7 @@ import { getFrequency, logger, Pattern } from '@strudel.cycles/core'; import { getAudioContext } from '@strudel.cycles/webaudio'; import csd from './project.csd?raw'; -import livecodeOrc from './livecode.orc?raw'; +// import livecodeOrc from './livecode.orc?raw'; import presetsOrc from './presets.orc?raw'; let csoundLoader, _csound; @@ -91,7 +91,7 @@ async function load() { await _csound.setOption('-m0d'); // see -m flag https://csound.com/docs/manual/CommandFlags.html await _csound.setOption('--sample-accurate'); await _csound.compileCsdText(csd); - await _csound.compileOrc(livecodeOrc); + // await _csound.compileOrc(livecodeOrc); await _csound.compileOrc(presetsOrc); await _csound.start(); return _csound; @@ -101,3 +101,19 @@ async function init() { csoundLoader = csoundLoader || load(); return csoundLoader; } + +let orcCache = {}; +export async function loadOrc(url) { + await init(); + if (typeof url !== 'string') { + throw new Error('loadOrc: expected url string'); + } + if (url.startsWith('github:')) { + const [_, path] = url.split('github:'); + url = `https://raw.githubusercontent.com/${path}`; + } + if (!orcCache[url]) { + orcCache[url] = await fetch(url).then((res) => res.text()); + } + await _csound.compileOrc(orcCache[url]); +} From c67b02b7b02fe1a9c780e3180bc6ed196a0a48b5 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 12:09:58 +0100 Subject: [PATCH 24/31] update tunes --- repl/src/tunes.mjs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index ba7811e28..4f2689010 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -992,7 +992,9 @@ export const juxUndTollerei = `note("c3 eb3 g3 bb3").palindrome() .delay(.5).delaytime(.1).delayfeedback(.4) .pianoroll()`; -export const csoundDemo = `await csound\` +export const csoundDemo = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +await csound\` instr CoolSynth iduration = p3 ifreq = p4 @@ -1022,9 +1024,13 @@ endin\` .scale('D minor') .note() //.pianoroll() -.csound("/4")`; +.csound('CoolSynth')`; -export const loungeSponge = `await csound() +export const loungeSponge = ` +// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +// livecode.orc by Steven Yi +await loadOrc('github:kunstmusik/csound-live-code/master/livecode.orc') stack( note("/2".voicings()) @@ -1038,4 +1044,4 @@ stack( .legato(.25).csound('SynHarp') , s("bd*2,[~ hh]*2,~ cp").bank('RolandTR909') - )`; +)`; From 72a8e4bc22c5c85afb0d5dc2aa9b34dde3b023fb Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 12:11:28 +0100 Subject: [PATCH 25/31] add licenses / credits to all tunes + remove some --- repl/src/testtunes.mjs | 287 ++++++++++++++++++++++++++++++ repl/src/tunes.mjs | 391 +++++++++-------------------------------- 2 files changed, 369 insertions(+), 309 deletions(-) diff --git a/repl/src/testtunes.mjs b/repl/src/testtunes.mjs index e62e51f22..fe5d8358e 100644 --- a/repl/src/testtunes.mjs +++ b/repl/src/testtunes.mjs @@ -162,3 +162,290 @@ stack( drums.fast(2), synths ).slow(2)`; */ + +export const tetrisMini = `note(\`[[e5 [b4 c5] d5 [c5 b4]] +[a4 [a4 c5] e5 [d5 c5]] +[b4 [~ c5] d5 e5] +[c5 a4 a4 ~] +[[~ d5] [~ f5] a5 [g5 f5]] +[e5 [~ c5] e5 [d5 c5]] +[b4 [b4 c5] d5 e5] +[c5 a4 a4 ~]], +[[e2 e3]*4] +[[a2 a3]*4] +[[g#2 g#3]*2 [e2 e3]*2] +[a2 a3 a2 a3 a2 a3 b1 c2] +[[d2 d3]*4] +[[c2 c3]*4] +[[b1 b2]*2 [e2 e3]*2] +[[a1 a2]*4]\`).slow(16) +`; + +export const giantStepsReggae = `stack( + // melody + seq( + "[F#5 D5] [B4 G4] Bb4 [B4 A4]", + "[D5 Bb4] [G4 Eb4] F#4 [G4 F4]", + "Bb4 [B4 A4] D5 [D#5 C#5]", + "F#5 [G5 F5] Bb5 [F#5 [F#5 ~@3]]", + ), + // chords + seq( + "[B^7 D7] [G^7 Bb7] Eb^7 [Am7 D7]", + "[G^7 Bb7] [Eb^7 F#7] B^7 [Fm7 Bb7]", + "Eb^7 [Am7 D7] G^7 [C#m7 F#7]", + "B^7 [Fm7 Bb7] Eb^7 [C#m7 F#7]" + ) + .struct("~ [x ~]".fast(4*8)) + .voicings(['E3', 'G4']), + // bass + seq( + "[B2 D2] [G2 D2] [Eb2 Bb2] [A2 D2]", + "[G2 Bb2] [Eb2 F#2] [B2 F#2] [F2 Bb2]", + "[Eb2 Bb2] [A2 D2] [G2 D2] [C#2 F#2]", + "[B2 F#2] [F2 Bb2] [Eb2 Bb2] [C#2 F#2]" + ) + .struct("x ~".fast(4*8)) +).slow(25).note()`; + +// TODO: +/* +export const xylophoneCalling = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const t = x => x.scaleTranspose("<0 2 4 3>/4").transpose(-2) +const s = x => x.scale(cat('C3 minor pentatonic','G3 minor pentatonic').slow(4)) +const delay = new FeedbackDelay(1/8, .6).chain(vol(0.1), out()); +const chorus = new Chorus(1,2.5,0.5).start(); +stack( + // melody + "<<10 7> <8 3>>/4".struct("x*3").apply(s) + .scaleTranspose("<0 3 2> <1 4 3>") + .superimpose(scaleTranspose(2).early(1/8)) + .apply(t).tone(polysynth().set({ + ...osc('triangle4'), + ...adsr(0,.08,0) + }).chain(vol(0.2).connect(delay),chorus,out())).mask("<~@3 x>/16".early(1/8)), + // pad + "[1,3]/4".scale('G3 minor pentatonic').apply(t).tone(polysynth().set({ + ...osc('square2'), + ...adsr(0.1,.4,0.8) + }).chain(vol(0.2),chorus,out())).mask("<~ x>/32"), + // xylophone + "c3,g3,c4".struct("").fast("<1 <2!3 [4 8]>>").apply(s).scaleTranspose("<0 <1 [2 [3 <4 5>]]>>").apply(t).tone(polysynth().set({ + ...osc('sawtooth4'), + ...adsr(0,.1,0) + }).chain(vol(0.4).connect(delay),out())).mask("/16".early(1/8)), + // bass + "c2 [c2 ~]*2".scale('C hirajoshi').apply(t).tone(synth({ + ...osc('sawtooth6'), + ...adsr(0,.03,.4,.1) + }).chain(vol(0.4),out())), + // kick + "*2".tone(membrane().chain(vol(0.8),out())), + // snare + "~ ".tone(noise().chain(vol(0.8),out())), + // hihat + "c3*4".transpose("[-24 0]*2").tone(metal(adsr(0,.02)).chain(vol(0.5).connect(delay),out())) +).slow(1) +// strudel disable-highlighting`; +*/ + +// TODO: +/* +export const sowhatelse = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +// mixer +const mix = (key) => vol({ + chords: .2, + lead: 0.8, + bass: .4, + snare: .95, + kick: .9, + hihat: .35, +}[key]||0); +const delay = new FeedbackDelay(1/6, .3).chain(vol(.7), out()); +const delay2 = new FeedbackDelay(1/6, .2).chain(vol(.15), out()); +const chorus = new Chorus(1,2.5,0.5).start(); +// instruments +const instr = (instrument) => ({ + organ: polysynth().set({...osc('sawtooth4'), ...adsr(.01,.2,0)}).chain(mix('chords').connect(delay),out()), + lead: polysynth().set({...osc('triangle4'),...adsr(0.01,.05,0)}).chain(mix('lead').connect(delay2), out()), + bass: polysynth().set({...osc('sawtooth8'),...adsr(.02,.05,.3,.2)}).chain(mix('bass'),lowpass(3000), out()), + pad: polysynth().set({...osc('square2'),...adsr(0.1,.4,0.8)}).chain(vol(0.15),chorus,out()), + hihat: metal(adsr(0, .02, 0)).chain(mix('hihat'), out()), + snare: noise(adsr(0, .15, 0.01)).chain(mix('snare'), lowpass(5000), out()), + kick: membrane().chain(mix('kick'), out()) +}[instrument]); +// harmony +const t = transpose("<0 0 1 0>/8"); +const sowhat = scaleTranspose("0,3,6,9,11"); +// track +stack( + "[<0 4 [3 [2 1]]>]/4".struct("[x]*3").mask("[~ x ~]").scale('D5 dorian').off(1/6, scaleTranspose(-7)).off(1/3, scaleTranspose(-5)).apply(t).tone(instr('lead')).mask("<~ ~ x x>/8"), + "< <[d3 ~] [c3 f3] g3>>".scale('D dorian').apply(sowhat).apply(t).tone(instr('organ')).mask("/8"), + "<[d2 [d2 ~]*3]!3 >".apply(t).tone(instr('bass')), + "c1*6".tone(instr('hihat')), + "~ c3".tone(instr('snare')), + "<[c1@5 c1] >".tone(instr('kick')), + "[2,4]/4".scale('D dorian').apply(t).tone(instr('pad')).mask("/8") +).fast(6/8) +// strudel disable-highlighting`; +*/ + +// TODO: rework tune to use freq +/* +export const jemblung = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const delay = new FeedbackDelay(1/8, .6).chain(vol(0.15), out()); +const snare = noise({type:'white',...adsr(0,0.2,0)}).chain(lowpass(5000),vol(1.8),out()); +const s = polysynth().set({...osc('sawtooth4'),...adsr(0.01,.2,.6,0.2)}).chain(vol(.23).connect(delay),out()); +stack( + stack( + "0 1 4 [3!2 5]".layer( + // chords + x=>x.add("0,3").duration("0.05!3 0.02"), + // bass + x=>x.add("-8").struct("x*8").duration(0.1) + ), + // melody + "12 11*3 12 ~".duration(0.005) + ) + .add("<0 1>") + .tune("jemblung2") + //.mul(22/5).round().xen("22edo") + //.mul(12/5).round().xen("12edo") + .tone(s), + // kick + "[c2 ~]*2".duration(0.05).tone(membrane().chain(out())), + // snare + "[~ c1]*2".early(0.001).tone(snare), + // hihat + "c2*8".tone(noise().chain(highpass(6000),vol(0.5).connect(delay),out())), +).slow(3)`; +*/ + +/* +// TODO: does not work on linux (at least for me..) +export const speakerman = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +backgroundImage('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXR0rKqW3VwY%2Fmaxresdefault.jpg&f=1&nofb=1', +{ className:'darken', style:'background-size:cover'}) +stack( + "[g3,bb3,d4] [f3,a3,c4] [c3,e3,g3]@2".slow(2).late(.1), + cat( + 'Baker man', + 'is baking bread', + 'Baker man', + 'is baking bread', + 'Sagabona', + 'kunjani wena', + 'Sagabona', + 'kunjani wena', + 'The night train, is coming', + 'got to keep on running', + 'The night train, is coming', + 'got to keep on running', + ).speak("en zu en".slow(12), "<0 2 3 4 5 6>".slow(2)), +).slow(4)`; +*/ + +export const bossa = `const scales = sequence('C minor', ['D locrian', 'G phrygian'], 'Bb2 minor', ['C locrian','F phrygian']).slow(4) +stack( + "".fast(2).struct("x ~ x@3 x ~ x ~ ~ ~ x ~ x@3".late(1/8)).early(1/8).slow(2).voicings(), + "[~ [0 ~]] 0 [~ [4 ~]] 4".sub(7).restart(scales).scale(scales).early(.25) +).note().piano().slow(2)`; + +/* +export const customTrigger = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +stack( + freq("55 [110,165] 110 [220,275]".mul("<1 <3/4 2/3>>").struct("x(3,8)").layer(x=>x.mul("1.006,.995"))), + freq("440(5,8)".legato(.18).mul("<1 3/4 2 2/3>")).gain(perlin.range(.2,.8)) +).s("/2") + .onTrigger((t,hap,ct)=>{ + const ac = Tone.getContext().rawContext; + t = ac.currentTime + t - ct; + const { freq, s, gain = 1 } = hap.value; + const master = ac.createGain(); + master.gain.value = 0.1 * gain; + master.connect(ac.destination); + const o = ac.createOscillator(); + o.type = s || 'triangle'; + o.frequency.value = Number(freq); + o.connect(master); + o.start(t); + o.stop(t + hap.duration); +}).stack(s("bd(3,8),hh*4,~ sd").webdirt())`; */ + +export const swimmingWithSoundfonts = `// Koji Kondo - Swimming (Super Mario World) +stack( + n( + "~", + "~", + "~", + "A5 [F5@2 C5] [D5@2 F5] F5", + "[C5@2 F5] [F5@2 C6] A5 G5", + "A5 [F5@2 C5] [D5@2 F5] F5", + "[C5@2 F5] [Bb5 A5 G5] F5@2", + "A5 [F5@2 C5] [D5@2 F5] F5", + "[C5@2 F5] [F5@2 C6] A5 G5", + "A5 [F5@2 C5] [D5@2 F5] F5", + "[C5@2 F5] [Bb5 A5 G5] F5@2", + "A5 [F5@2 C5] A5 F5", + "Ab5 [F5@2 Ab5] G5@2", + "A5 [F5@2 C5] A5 F5", + "Ab5 [F5@2 C5] C6@2", + "A5 [F5@2 C5] [D5@2 F5] F5", + "[C5@2 F5] [Bb5 A5 G5] F5@2" + ).s('Sitar: Ethnic'), + n( + "[F4,Bb4,D5] [[D4,G4,Bb4]@2 [Bb3,D4,F4]] [[G3,C4,E4]@2 [[Ab3,F4] [A3,Gb4]]] [Bb3,E4,G4]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, Bb3, Db3] [F3, Bb3, Db3]]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", + "[~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", + "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", + "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", + "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", + "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", + "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", + "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]" + ).s('Kalimba: Ethnic'), + n( + "[G3 G3 C3 E3]", + "[F2 D2 G2 C2]", + "[F2 D2 G2 C2]", + "[F2 A2 Bb2 B2]", + "[A2 Ab2 G2 C2]", + "[F2 A2 Bb2 B2]", + "[G2 C2 F2 F2]", + "[F2 A2 Bb2 B2]", + "[A2 Ab2 G2 C2]", + "[F2 A2 Bb2 B2]", + "[G2 C2 F2 F2]", + "[Bb2 Bb2 A2 A2]", + "[Ab2 Ab2 G2 [C2 D2 E2]]", + "[Bb2 Bb2 A2 A2]", + "[Ab2 Ab2 G2 [C2 D2 E2]]", + "[F2 A2 Bb2 B2]", + "[G2 C2 F2 F2]" + ).s('Acoustic Bass: Bass') + ).slow(51) + `; + +export const bossaRandom = `const chords = "" +const roots = chords.rootNotes(2) + +stack( + chords.voicings(['F4', 'A5']).struct( + \` x@2 ~ x ~ ~ ~ x | + x? ~ ~ x@3 ~ x | + x? ~ ~ x ~ x@3\`), + roots.struct("x [~ x?0.2] x [~ x?] | x!4 | x@2 ~ ~ ~ x x x").transpose("0 7") +).slow(2).pianoroll().note().piano()`; diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index c9224d7a1..033751215 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -4,25 +4,8 @@ Copyright (C) 2022 Strudel contributors - see . */ -export const tetrisMini = `note(\`[[e5 [b4 c5] d5 [c5 b4]] -[a4 [a4 c5] e5 [d5 c5]] -[b4 [~ c5] d5 e5] -[c5 a4 a4 ~] -[[~ d5] [~ f5] a5 [g5 f5]] -[e5 [~ c5] e5 [d5 c5]] -[b4 [b4 c5] d5 e5] -[c5 a4 a4 ~]], -[[e2 e3]*4] -[[a2 a3]*4] -[[g#2 g#3]*2 [e2 e3]*2] -[a2 a3 a2 a3 a2 a3 b1 c2] -[[d2 d3]*4] -[[c2 c3]*4] -[[b1 b2]*2 [e2 e3]*2] -[[a1 a2]*4]\`).slow(16) -`; - -export const swimming = `stack( +export const swimming = `// Koji Kondo - Swimming (Super Mario World) +stack( seq( "~", "~", @@ -83,7 +66,8 @@ export const swimming = `stack( ).note().slow(51); `; -export const giantSteps = `stack( +export const giantSteps = `// John Coltrane - Giant Steps +stack( // melody seq( "[F#5 D5] [B4 G4] Bb4 [B4 A4]", @@ -107,34 +91,8 @@ export const giantSteps = `stack( ) ).slow(20).note()`; -export const giantStepsReggae = `stack( - // melody - seq( - "[F#5 D5] [B4 G4] Bb4 [B4 A4]", - "[D5 Bb4] [G4 Eb4] F#4 [G4 F4]", - "Bb4 [B4 A4] D5 [D#5 C#5]", - "F#5 [G5 F5] Bb5 [F#5 [F#5 ~@3]]", - ), - // chords - seq( - "[B^7 D7] [G^7 Bb7] Eb^7 [Am7 D7]", - "[G^7 Bb7] [Eb^7 F#7] B^7 [Fm7 Bb7]", - "Eb^7 [Am7 D7] G^7 [C#m7 F#7]", - "B^7 [Fm7 Bb7] Eb^7 [C#m7 F#7]" - ) - .struct("~ [x ~]".fast(4*8)) - .voicings(['E3', 'G4']), - // bass - seq( - "[B2 D2] [G2 D2] [Eb2 Bb2] [A2 D2]", - "[G2 Bb2] [Eb2 F#2] [B2 F#2] [F2 Bb2]", - "[Eb2 Bb2] [A2 D2] [G2 D2] [C#2 F#2]", - "[B2 F#2] [F2 Bb2] [Eb2 Bb2] [C#2 F#2]" - ) - .struct("x ~".fast(4*8)) -).slow(25).note()`; - -export const zeldasRescue = `stack( +export const zeldasRescue = `// Koji Kondo - Princess Zelda's Rescue +stack( // melody \`[B3@2 D4] [A3@2 [G3 A3]] [B3@2 D4] [A3] [B3@2 D4] [A4@2 G4] [D4@2 [C4 B3]] [A3] @@ -157,7 +115,9 @@ export const zeldasRescue = `stack( .room(1) `; -export const caverave = `const keys = x => x.s('sawtooth').cutoff(1200).gain(.5).attack(0).decay(.16).sustain(.3).release(.1); +export const caverave = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const keys = x => x.s('sawtooth').cutoff(1200).gain(.5).attack(0).decay(.16).sustain(.3).release(.1); const drums = stack( s("bd*2").mask("/8").gain(.8), @@ -201,90 +161,7 @@ stack( ).s() `; -// TODO: -/* -export const xylophoneCalling = `const t = x => x.scaleTranspose("<0 2 4 3>/4").transpose(-2) -const s = x => x.scale(cat('C3 minor pentatonic','G3 minor pentatonic').slow(4)) -const delay = new FeedbackDelay(1/8, .6).chain(vol(0.1), out()); -const chorus = new Chorus(1,2.5,0.5).start(); -stack( - // melody - "<<10 7> <8 3>>/4".struct("x*3").apply(s) - .scaleTranspose("<0 3 2> <1 4 3>") - .superimpose(scaleTranspose(2).early(1/8)) - .apply(t).tone(polysynth().set({ - ...osc('triangle4'), - ...adsr(0,.08,0) - }).chain(vol(0.2).connect(delay),chorus,out())).mask("<~@3 x>/16".early(1/8)), - // pad - "[1,3]/4".scale('G3 minor pentatonic').apply(t).tone(polysynth().set({ - ...osc('square2'), - ...adsr(0.1,.4,0.8) - }).chain(vol(0.2),chorus,out())).mask("<~ x>/32"), - // xylophone - "c3,g3,c4".struct("").fast("<1 <2!3 [4 8]>>").apply(s).scaleTranspose("<0 <1 [2 [3 <4 5>]]>>").apply(t).tone(polysynth().set({ - ...osc('sawtooth4'), - ...adsr(0,.1,0) - }).chain(vol(0.4).connect(delay),out())).mask("/16".early(1/8)), - // bass - "c2 [c2 ~]*2".scale('C hirajoshi').apply(t).tone(synth({ - ...osc('sawtooth6'), - ...adsr(0,.03,.4,.1) - }).chain(vol(0.4),out())), - // kick - "*2".tone(membrane().chain(vol(0.8),out())), - // snare - "~ ".tone(noise().chain(vol(0.8),out())), - // hihat - "c3*4".transpose("[-24 0]*2").tone(metal(adsr(0,.02)).chain(vol(0.5).connect(delay),out())) -).slow(1) -// strudel disable-highlighting`; -*/ - -// TODO: -/* -export const sowhatelse = `// mixer -const mix = (key) => vol({ - chords: .2, - lead: 0.8, - bass: .4, - snare: .95, - kick: .9, - hihat: .35, -}[key]||0); -const delay = new FeedbackDelay(1/6, .3).chain(vol(.7), out()); -const delay2 = new FeedbackDelay(1/6, .2).chain(vol(.15), out()); -const chorus = new Chorus(1,2.5,0.5).start(); -// instruments -const instr = (instrument) => ({ - organ: polysynth().set({...osc('sawtooth4'), ...adsr(.01,.2,0)}).chain(mix('chords').connect(delay),out()), - lead: polysynth().set({...osc('triangle4'),...adsr(0.01,.05,0)}).chain(mix('lead').connect(delay2), out()), - bass: polysynth().set({...osc('sawtooth8'),...adsr(.02,.05,.3,.2)}).chain(mix('bass'),lowpass(3000), out()), - pad: polysynth().set({...osc('square2'),...adsr(0.1,.4,0.8)}).chain(vol(0.15),chorus,out()), - hihat: metal(adsr(0, .02, 0)).chain(mix('hihat'), out()), - snare: noise(adsr(0, .15, 0.01)).chain(mix('snare'), lowpass(5000), out()), - kick: membrane().chain(mix('kick'), out()) -}[instrument]); -// harmony -const t = transpose("<0 0 1 0>/8"); -const sowhat = scaleTranspose("0,3,6,9,11"); -// track -stack( - "[<0 4 [3 [2 1]]>]/4".struct("[x]*3").mask("[~ x ~]").scale('D5 dorian').off(1/6, scaleTranspose(-7)).off(1/3, scaleTranspose(-5)).apply(t).tone(instr('lead')).mask("<~ ~ x x>/8"), - "< <[d3 ~] [c3 f3] g3>>".scale('D dorian').apply(sowhat).apply(t).tone(instr('organ')).mask("/8"), - "<[d2 [d2 ~]*3]!3 >".apply(t).tone(instr('bass')), - "c1*6".tone(instr('hihat')), - "~ c3".tone(instr('snare')), - "<[c1@5 c1] >".tone(instr('kick')), - "[2,4]/4".scale('D dorian').apply(t).tone(instr('pad')).mask("/8") -).fast(6/8) -// strudel disable-highlighting`; -*/ - -export const barryHarris = `backgroundImage( - 'https://media.npr.org/assets/img/2017/02/03/barryharris_600dpi_wide-7eb49998aa1af377d62bb098041624c0a0d1a454.jpg', - {style:'background-size:cover'}) - +export const barryHarris = `// adapted from a Barry Harris excercise "0,2,[7 6]" .add("<0 1 2 3 4 5 7 8>") .scale('C bebop major') @@ -293,7 +170,9 @@ export const barryHarris = `backgroundImage( .note().piano() `; -export const blippyRhodes = `samples({ +export const blippyRhodes = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ bd: 'samples/tidal/bd/BT0A0D0.wav', sn: 'samples/tidal/sn/ST0T0S3.wav', hh: 'samples/tidal/hh/000_hh3closedhh.wav', @@ -332,7 +211,9 @@ stack( .s('sawtooth').cutoff(600), ).fast(3/2)`; -export const wavyKalimba = `samples({ +export const wavyKalimba = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ 'kalimba': { c5:'https://freesound.org/data/previews/536/536549_11935698-lq.mp3' } }) const scales = cat('C major', 'C mixolydian', 'F lydian', ['F minor', 'Db major']) @@ -360,37 +241,9 @@ stack( .delay(.2) `; -// TODO: rework tune to use freq -/* -export const jemblung = `const delay = new FeedbackDelay(1/8, .6).chain(vol(0.15), out()); -const snare = noise({type:'white',...adsr(0,0.2,0)}).chain(lowpass(5000),vol(1.8),out()); -const s = polysynth().set({...osc('sawtooth4'),...adsr(0.01,.2,.6,0.2)}).chain(vol(.23).connect(delay),out()); -stack( - stack( - "0 1 4 [3!2 5]".layer( - // chords - x=>x.add("0,3").duration("0.05!3 0.02"), - // bass - x=>x.add("-8").struct("x*8").duration(0.1) - ), - // melody - "12 11*3 12 ~".duration(0.005) - ) - .add("<0 1>") - .tune("jemblung2") - //.mul(22/5).round().xen("22edo") - //.mul(12/5).round().xen("12edo") - .tone(s), - // kick - "[c2 ~]*2".duration(0.05).tone(membrane().chain(out())), - // snare - "[~ c1]*2".early(0.001).tone(snare), - // hihat - "c2*8".tone(noise().chain(highpass(6000),vol(0.5).connect(delay),out())), -).slow(3)`; -*/ - -export const festivalOfFingers = `const chords = ""; +export const festivalOfFingers = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const chords = ""; stack( chords.voicings().struct("x(3,8,-1)").velocity(.5).off(1/7,x=>x.transpose(12).velocity(.2)), chords.rootNotes(2).struct("x(4,8,-2)"), @@ -403,7 +256,8 @@ stack( .note().piano()`; // iter, echo, echoWith -export const undergroundPlumber = `backgroundImage('https://images.nintendolife.com/news/2016/08/video_exploring_the_funky_inspiration_for_the_super_mario_bros_underground_theme/large.jpg',{ className:'darken' }) +export const undergroundPlumber = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos, inspired by Friendship - Let's not talk about it (1979) :) samples({ bd: 'bd/BT0A0D0.wav', sn: 'sn/ST0T0S3.wav', hh: 'hh/000_hh3closedhh.wav', cp: 'cp/HANDCLP0.wav', }, 'https://loophole-letters.vercel.app/samples/tidal/') @@ -428,7 +282,9 @@ stack( .fast(2/3) .pianoroll({})`; -export const bridgeIsOver = `samples({mad:'https://freesound.org/data/previews/22/22274_109943-lq.mp3'}) +export const bridgeIsOver = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos, bassline by BDP - The Bridge Is Over +samples({mad:'https://freesound.org/data/previews/22/22274_109943-lq.mp3'}) stack( stack( "c3*2 [[c3@1.4 bb2] ab2] gb2*2 <[[gb2@1.4 ab2] bb2] gb2>".legato(".5 1".fast(2)).velocity(.8), @@ -447,7 +303,9 @@ stack( .pianoroll() `; -export const goodTimes = `const scale = cat('C3 dorian','Bb2 major').slow(4); +export const goodTimes = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const scale = cat('C3 dorian','Bb2 major').slow(4); stack( "2*4".add(12).scale(scale) .off(1/8,x=>x.scaleTranspose("2")).fast(2) @@ -467,7 +325,9 @@ stack( .slow(2) .pianoroll({maxMidi:100,minMidi:20})`; -export const echoPiano = `"<0 2 [4 6](3,4,1) 3*2>" +export const echoPiano = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +"<0 2 [4 6](3,4,1) 3*2>" .scale('D minor') .color('salmon') .off(1/4, x=>x.scaleTranspose(2).color('green')) @@ -477,7 +337,7 @@ export const echoPiano = `"<0 2 [4 6](3,4,1) 3*2>" .note().piano() .pianoroll()`; -export const sml1 = ` +export const sml1 = `// Hirokazu Tanaka - World 1-1 stack( // melody \`< @@ -512,30 +372,9 @@ stack( .legato(.5) ).fast(2).note()`; -/* -// TODO: does not work on linux (at least for me..) -export const speakerman = `backgroundImage('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXR0rKqW3VwY%2Fmaxresdefault.jpg&f=1&nofb=1', -{ className:'darken', style:'background-size:cover'}) -stack( - "[g3,bb3,d4] [f3,a3,c4] [c3,e3,g3]@2".slow(2).late(.1), - cat( - 'Baker man', - 'is baking bread', - 'Baker man', - 'is baking bread', - 'Sagabona', - 'kunjani wena', - 'Sagabona', - 'kunjani wena', - 'The night train, is coming', - 'got to keep on running', - 'The night train, is coming', - 'got to keep on running', - ).speak("en zu en".slow(12), "<0 2 3 4 5 6>".slow(2)), -).slow(4)`; -*/ - -export const randomBells = `samples({ +export const randomBells = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ bell: { c6: 'https://freesound.org/data/previews/411/411089_5121236-lq.mp3' }, bass: { d2: 'https://freesound.org/data/previews/608/608286_13074022-lq.mp3' } }) @@ -556,7 +395,9 @@ stack( .pianoroll({minMidi:20,maxMidi:120,background:'transparent'}) `; -export const waa2 = `n( +export const waa2 = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +n( "a4 [a3 c3] a3 c3" .sub("<7 12 5 12>".slow(2)) .off(1/4,x=>x.add(7)) @@ -570,7 +411,9 @@ export const waa2 = `n( .room(.5) `; -export const hyperpop = `const lfo = cosine.slow(15); +export const hyperpop = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +const lfo = cosine.slow(15); const lfo2 = sine.slow(16); const filter1 = x=>x.cutoff(lfo2.range(300,3000)); const filter2 = x=>x.hcutoff(lfo.range(1000,6000)).cutoff(4000) @@ -619,7 +462,9 @@ stack( ).slow(2) // strudel disable-highlighting`; -export const festivalOfFingers3 = `"[-7*3],0,2,6,[8 7]" +export const festivalOfFingers3 = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +"[-7*3],0,2,6,[8 7]" .echoWith(4,1/4, (x,n)=>x .add(n*7) .velocity(1/(n+1)) @@ -635,33 +480,9 @@ export const festivalOfFingers3 = `"[-7*3],0,2,6,[8 7]" .note().piano() //.pianoroll({maxMidi:160})`; -export const bossa = ` -const scales = sequence('C minor', ['D locrian', 'G phrygian'], 'Bb2 minor', ['C locrian','F phrygian']).slow(4) -stack( - "".fast(2).struct("x ~ x@3 x ~ x ~ ~ ~ x ~ x@3".late(1/8)).early(1/8).slow(2).voicings(), - "[~ [0 ~]] 0 [~ [4 ~]] 4".sub(7).restart(scales).scale(scales).early(.25) -).note().piano().slow(2)`; -/* -export const customTrigger = `stack( - freq("55 [110,165] 110 [220,275]".mul("<1 <3/4 2/3>>").struct("x(3,8)").layer(x=>x.mul("1.006,.995"))), - freq("440(5,8)".legato(.18).mul("<1 3/4 2 2/3>")).gain(perlin.range(.2,.8)) -).s("/2") - .onTrigger((t,hap,ct)=>{ - const ac = Tone.getContext().rawContext; - t = ac.currentTime + t - ct; - const { freq, s, gain = 1 } = hap.value; - const master = ac.createGain(); - master.gain.value = 0.1 * gain; - master.connect(ac.destination); - const o = ac.createOscillator(); - o.type = s || 'triangle'; - o.frequency.value = Number(freq); - o.connect(master); - o.start(t); - o.stop(t + hap.duration); -}).stack(s("bd(3,8),hh*4,~ sd").webdirt())`; */ - -export const meltingsubmarine = `samples({ +export const meltingsubmarine = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], @@ -701,68 +522,9 @@ stack( ) .slow(3/2)`; -export const swimmingWithSoundfonts = `stack( - n( - "~", - "~", - "~", - "A5 [F5@2 C5] [D5@2 F5] F5", - "[C5@2 F5] [F5@2 C6] A5 G5", - "A5 [F5@2 C5] [D5@2 F5] F5", - "[C5@2 F5] [Bb5 A5 G5] F5@2", - "A5 [F5@2 C5] [D5@2 F5] F5", - "[C5@2 F5] [F5@2 C6] A5 G5", - "A5 [F5@2 C5] [D5@2 F5] F5", - "[C5@2 F5] [Bb5 A5 G5] F5@2", - "A5 [F5@2 C5] A5 F5", - "Ab5 [F5@2 Ab5] G5@2", - "A5 [F5@2 C5] A5 F5", - "Ab5 [F5@2 C5] C6@2", - "A5 [F5@2 C5] [D5@2 F5] F5", - "[C5@2 F5] [Bb5 A5 G5] F5@2" - ).s('Sitar: Ethnic'), - n( - "[F4,Bb4,D5] [[D4,G4,Bb4]@2 [Bb3,D4,F4]] [[G3,C4,E4]@2 [[Ab3,F4] [A3,Gb4]]] [Bb3,E4,G4]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, Bb3, Db3] [F3, Bb3, Db3]]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", - "[~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", - "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", - "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", - "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", - "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", - "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", - "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]" - ).s('Kalimba: Ethnic'), - n( - "[G3 G3 C3 E3]", - "[F2 D2 G2 C2]", - "[F2 D2 G2 C2]", - "[F2 A2 Bb2 B2]", - "[A2 Ab2 G2 C2]", - "[F2 A2 Bb2 B2]", - "[G2 C2 F2 F2]", - "[F2 A2 Bb2 B2]", - "[A2 Ab2 G2 C2]", - "[F2 A2 Bb2 B2]", - "[G2 C2 F2 F2]", - "[Bb2 Bb2 A2 A2]", - "[Ab2 Ab2 G2 [C2 D2 E2]]", - "[Bb2 Bb2 A2 A2]", - "[Ab2 Ab2 G2 [C2 D2 E2]]", - "[F2 A2 Bb2 B2]", - "[G2 C2 F2 F2]" - ).s('Acoustic Bass: Bass') - ).slow(51) - `; - -export const outroMusic = `samples({ +export const outroMusic = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], @@ -789,7 +551,9 @@ export const outroMusic = `samples({ //.pianoroll({autorange:1,vertical:1,fold:0}) `; -export const bassFuge = `samples({ flbass: ['00_c2_finger_long_neck.wav','01_c2_finger_short_neck.wav','02_c2_finger_long_bridge.wav','03_c2_finger_short_bridge.wav','04_c2_pick_long.wav','05_c2_pick_short.wav','06_c2_palm_mute.wav'] }, +export const bassFuge = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ flbass: ['00_c2_finger_long_neck.wav','01_c2_finger_short_neck.wav','02_c2_finger_long_bridge.wav','03_c2_finger_short_bridge.wav','04_c2_pick_long.wav','05_c2_pick_short.wav','06_c2_palm_mute.wav'] }, 'github:cleary/samples-flbass/main/') samples({ bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], @@ -813,18 +577,9 @@ x=>x.add(7).color('steelblue') .stack(s("bd:1*2,~ sd:0,[~ hh:0]*2")) .pianoroll({vertical:1})`; -export const bossaRandom = `const chords = "" -const roots = chords.rootNotes(2) - -stack( - chords.voicings(['F4', 'A5']).struct( - \` x@2 ~ x ~ ~ ~ x | - x? ~ ~ x@3 ~ x | - x? ~ ~ x ~ x@3\`), - roots.struct("x [~ x?0.2] x [~ x?] | x!4 | x@2 ~ ~ ~ x x x").transpose("0 7") -).slow(2).pianoroll().note().piano()`; - -export const chop = `samples({ p: 'https://cdn.freesound.org/previews/648/648433_11943129-lq.mp3' }) +export const chop = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ p: 'https://cdn.freesound.org/previews/648/648433_11943129-lq.mp3' }) s("p") .loopAt(32,1) @@ -835,14 +590,18 @@ s("p") .sustain(.6) `; -export const delay = `stack( +export const delay = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +stack( s("bd ") .delay("<0 .5>") .delaytime(".16 | .33") .delayfeedback(".6 | .8") ).sometimes(x=>x.speed("-1"))`; -export const orbit = `stack( +export const orbit = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +stack( s("bd ") .delay(.5) .delaytime(.33) @@ -854,7 +613,9 @@ export const orbit = `stack( .orbit(2) ).sometimes(x=>x.speed("-1"))`; -export const belldub = `samples({ bell: {b4:'https://cdn.freesound.org/previews/339/339809_5121236-lq.mp3'}}) +export const belldub = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({ bell: {b4:'https://cdn.freesound.org/previews/339/339809_5121236-lq.mp3'}}) // "Hand Bells, B, Single.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org stack( // bass @@ -885,7 +646,9 @@ stack( .mask("<1 0>/8") ).slow(5)`; -export const dinofunk = `samples({bass:'https://cdn.freesound.org/previews/614/614637_2434927-hq.mp3', +export const dinofunk = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +samples({bass:'https://cdn.freesound.org/previews/614/614637_2434927-hq.mp3', dino:{b4:'https://cdn.freesound.org/previews/316/316403_5123851-hq.mp3'}}) stack( @@ -903,7 +666,9 @@ note("Abm7".voicings(['c3','a4']).struct("x(3,8,1)".slow(2))), note("").s('dino').delay(.8).slow(8).room(.5) )`; -export const sampleDemo = `stack( +export const sampleDemo = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +stack( // percussion s("[woodblock:1 woodblock:2*2] snare_rim:0,gong/8,brakedrum:1(3,8),~@3 cowbell:3") .sometimes(x=>x.speed(2)), @@ -917,7 +682,9 @@ export const sampleDemo = `stack( .release(.1).room(.5) )`; -export const holyflute = `"c3 eb3(3,8) c4/2 g3*2" +export const holyflute = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +"c3 eb3(3,8) c4/2 g3*2" .superimpose( x=>x.slow(2).add(12), x=>x.slow(4).sub(5) @@ -928,7 +695,9 @@ export const holyflute = `"c3 eb3(3,8) c4/2 g3*2" .pianoroll({fold:0,autorange:0,vertical:0,cycles:12,smear:0,minMidi:40}) `; -export const flatrave = `stack( +export const flatrave = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +stack( s("bd*2,~ [cp,sd]").bank('RolandTR909'), s("hh:1*4").sometimes(fast("2")) @@ -949,7 +718,9 @@ export const flatrave = `stack( .decay(.05).sustain(0).delay(.2).degradeBy(.5).mask("<0 1>/16") )`; -export const amensister = `await samples('github:tidalcycles/Dirt-Samples/master') +export const amensister = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +await samples('github:tidalcycles/Dirt-Samples/master') stack( // amen @@ -981,7 +752,9 @@ stack( n("0 1").s("east").delay(.5).degradeBy(.8).speed(rand.range(.5,1.5)) ).reset("")`; -export const juxUndTollerei = `note("c3 eb3 g3 bb3").palindrome() +export const juxUndTollerei = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// by Felix Roos +note("c3 eb3 g3 bb3").palindrome() .s('sawtooth') .jux(x=>x.rev().color('green').s('sawtooth')) .off(1/4, x=>x.add(note("<7 12>/2")).slow(2).late(.005).s('triangle')) From 33b6579b5d4a37ab381191e2e16e8b41efd7b17d Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 12:17:15 +0100 Subject: [PATCH 26/31] update snapshots --- .../test/__snapshots__/tunes.test.mjs.snap | 402 +----------------- .../test/__snapshots__/examples.test.mjs.snap | 59 --- 2 files changed, 1 insertion(+), 460 deletions(-) diff --git a/repl/src/test/__snapshots__/tunes.test.mjs.snap b/repl/src/test/__snapshots__/tunes.test.mjs.snap index a1598d3f2..4ea3e2b7a 100644 --- a/repl/src/test/__snapshots__/tunes.test.mjs.snap +++ b/repl/src/test/__snapshots__/tunes.test.mjs.snap @@ -7,7 +7,7 @@ exports[`renders tunes > tune: amensister 1`] = ` "3/8 -> 1/2: {\\"n\\":1,\\"s\\":\\"amencutup\\",\\"room\\":0.5}", "3/4 -> 7/8: {\\"n\\":3,\\"s\\":\\"amencutup\\",\\"room\\":0.5}", "7/8 -> 1/1: {\\"n\\":3,\\"s\\":\\"amencutup\\",\\"room\\":0.5}", - "1/4 -> 3/8: {\\"n\\":1,\\"speed\\":-2,\\"delay\\":0.5,\\"s\\":\\"amencutup\\",\\"room\\":0.5}", + "1/4 -> 3/8: {\\"n\\":1,\\"speed\\":2,\\"delay\\":0.5,\\"s\\":\\"amencutup\\",\\"room\\":0.5}", "0/1 -> 1/8: {\\"note\\":\\"Eb1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0,\\"gain\\":0.4,\\"cutoff\\":300.0066107586751,\\"resonance\\":10}", "0/1 -> 1/8: {\\"note\\":\\"F1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0,\\"gain\\":0.4,\\"cutoff\\":300.0066107586751,\\"resonance\\":10}", "1/4 -> 3/8: {\\"note\\":\\"A1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0,\\"gain\\":0.4,\\"cutoff\\":300.7878869297153,\\"resonance\\":10}", @@ -318,36 +318,6 @@ exports[`renders tunes > tune: blippyRhodes 1`] = ` ] `; -exports[`renders tunes > tune: bossa 1`] = ` -[ - "0/1 -> 1/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}", - "0/1 -> 1/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}", - "0/1 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}", - "0/1 -> 1/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}", - "1/2 -> 5/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}", - "1/2 -> 5/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}", - "1/2 -> 5/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}", - "1/2 -> 5/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}", - "0/1 -> 1/2: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}", - "3/4 -> 7/8: {\\"note\\":\\"G2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.44907407407407407}", -] -`; - -exports[`renders tunes > tune: bossaRandom 1`] = ` -[ - "0/1 -> 1/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}", - "0/1 -> 1/4: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}", - "0/1 -> 1/4: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}", - "0/1 -> 1/4: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}", - "3/4 -> 1/1: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}", - "3/4 -> 1/1: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}", - "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}", - "3/4 -> 1/1: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}", - "0/1 -> 1/2: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}", - "1/2 -> 1/1: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}", -] -`; - exports[`renders tunes > tune: bridgeIsOver 1`] = ` [ "0/1 -> 5/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}", @@ -7244,257 +7214,6 @@ exports[`renders tunes > tune: giantSteps 1`] = ` ] `; -exports[`renders tunes > tune: giantStepsReggae 1`] = ` -[ - "0/1 -> 25/32: {\\"note\\":\\"F#5\\"}", - "25/32 -> 25/16: {\\"note\\":\\"D5\\"}", - "25/64 -> 75/128: {\\"note\\":\\"A#3\\"}", - "25/64 -> 75/128: {\\"note\\":\\"C#4\\"}", - "25/64 -> 75/128: {\\"note\\":\\"D#4\\"}", - "25/64 -> 75/128: {\\"note\\":\\"F#4\\"}", - "0/1 -> 25/64: {\\"note\\":\\"B2\\"}", - "25/32 -> 75/64: {\\"note\\":\\"D2\\"}", - "25/32 -> 25/16: {\\"note\\":\\"D5\\"}", - "25/16 -> 75/32: {\\"note\\":\\"B4\\"}", - "75/64 -> 175/128: {\\"note\\":\\"F#3\\"}", - "75/64 -> 175/128: {\\"note\\":\\"B3\\"}", - "75/64 -> 175/128: {\\"note\\":\\"C4\\"}", - "75/64 -> 175/128: {\\"note\\":\\"E4\\"}", - "125/64 -> 275/128: {\\"note\\":\\"F#3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"A3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"B3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"D4\\"}", - "25/32 -> 75/64: {\\"note\\":\\"D2\\"}", - "25/16 -> 125/64: {\\"note\\":\\"G2\\"}", - "25/16 -> 75/32: {\\"note\\":\\"B4\\"}", - "75/32 -> 25/8: {\\"note\\":\\"G4\\"}", - "125/64 -> 275/128: {\\"note\\":\\"F#3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"A3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"B3\\"}", - "125/64 -> 275/128: {\\"note\\":\\"D4\\"}", - "175/64 -> 375/128: {\\"note\\":\\"Ab3\\"}", - "175/64 -> 375/128: {\\"note\\":\\"C4\\"}", - "175/64 -> 375/128: {\\"note\\":\\"D4\\"}", - "175/64 -> 375/128: {\\"note\\":\\"G4\\"}", - "75/32 -> 175/64: {\\"note\\":\\"D2\\"}", - "75/32 -> 25/8: {\\"note\\":\\"G4\\"}", - "25/8 -> 75/16: {\\"note\\":\\"Bb4\\"}", - "225/64 -> 475/128: {\\"note\\":\\"G3\\"}", - "225/64 -> 475/128: {\\"note\\":\\"Bb3\\"}", - "225/64 -> 475/128: {\\"note\\":\\"D4\\"}", - "225/64 -> 475/128: {\\"note\\":\\"F4\\"}", - "25/8 -> 225/64: {\\"note\\":\\"Eb2\\"}", - "125/32 -> 275/64: {\\"note\\":\\"Bb2\\"}", - "25/8 -> 75/16: {\\"note\\":\\"Bb4\\"}", - "75/16 -> 175/32: {\\"note\\":\\"B4\\"}", - "275/64 -> 575/128: {\\"note\\":\\"G3\\"}", - "275/64 -> 575/128: {\\"note\\":\\"Bb3\\"}", - "275/64 -> 575/128: {\\"note\\":\\"D4\\"}", - "275/64 -> 575/128: {\\"note\\":\\"F4\\"}", - "125/32 -> 275/64: {\\"note\\":\\"Bb2\\"}", - "75/16 -> 325/64: {\\"note\\":\\"A2\\"}", - "75/16 -> 175/32: {\\"note\\":\\"B4\\"}", - "175/32 -> 25/4: {\\"note\\":\\"A4\\"}", - "325/64 -> 675/128: {\\"note\\":\\"G3\\"}", - "325/64 -> 675/128: {\\"note\\":\\"B3\\"}", - "325/64 -> 675/128: {\\"note\\":\\"C4\\"}", - "325/64 -> 675/128: {\\"note\\":\\"E4\\"}", - "375/64 -> 775/128: {\\"note\\":\\"F#3\\"}", - "375/64 -> 775/128: {\\"note\\":\\"B3\\"}", - "375/64 -> 775/128: {\\"note\\":\\"C4\\"}", - "375/64 -> 775/128: {\\"note\\":\\"E4\\"}", - "75/16 -> 325/64: {\\"note\\":\\"A2\\"}", - "175/32 -> 375/64: {\\"note\\":\\"D2\\"}", - "175/32 -> 25/4: {\\"note\\":\\"A4\\"}", - "25/4 -> 225/32: {\\"note\\":\\"D5\\"}", - "375/64 -> 775/128: {\\"note\\":\\"F#3\\"}", - "375/64 -> 775/128: {\\"note\\":\\"B3\\"}", - "375/64 -> 775/128: {\\"note\\":\\"C4\\"}", - "375/64 -> 775/128: {\\"note\\":\\"E4\\"}", - "425/64 -> 875/128: {\\"note\\":\\"F#3\\"}", - "425/64 -> 875/128: {\\"note\\":\\"A3\\"}", - "425/64 -> 875/128: {\\"note\\":\\"B3\\"}", - "425/64 -> 875/128: {\\"note\\":\\"D4\\"}", - "25/4 -> 425/64: {\\"note\\":\\"G2\\"}", - "25/4 -> 225/32: {\\"note\\":\\"D5\\"}", - "225/32 -> 125/16: {\\"note\\":\\"Bb4\\"}", - "125/16 -> 275/32: {\\"note\\":\\"G4\\"}", - "475/64 -> 975/128: {\\"note\\":\\"Ab3\\"}", - "475/64 -> 975/128: {\\"note\\":\\"C4\\"}", - "475/64 -> 975/128: {\\"note\\":\\"D4\\"}", - "475/64 -> 975/128: {\\"note\\":\\"G4\\"}", - "225/32 -> 475/64: {\\"note\\":\\"Bb2\\"}", - "125/16 -> 525/64: {\\"note\\":\\"Eb2\\"}", - "125/16 -> 275/32: {\\"note\\":\\"G4\\"}", - "275/32 -> 75/8: {\\"note\\":\\"Eb4\\"}", - "525/64 -> 1075/128: {\\"note\\":\\"G3\\"}", - "525/64 -> 1075/128: {\\"note\\":\\"Bb3\\"}", - "525/64 -> 1075/128: {\\"note\\":\\"D4\\"}", - "525/64 -> 1075/128: {\\"note\\":\\"F4\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"E3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"G#3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"A#3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"D#4\\"}", - "125/16 -> 525/64: {\\"note\\":\\"Eb2\\"}", - "275/32 -> 575/64: {\\"note\\":\\"F#2\\"}", - "275/32 -> 75/8: {\\"note\\":\\"Eb4\\"}", - "75/8 -> 175/16: {\\"note\\":\\"F#4\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"E3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"G#3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"A#3\\"}", - "575/64 -> 1175/128: {\\"note\\":\\"D#4\\"}", - "625/64 -> 1275/128: {\\"note\\":\\"A#3\\"}", - "625/64 -> 1275/128: {\\"note\\":\\"C#4\\"}", - "625/64 -> 1275/128: {\\"note\\":\\"D#4\\"}", - "625/64 -> 1275/128: {\\"note\\":\\"F#4\\"}", - "75/8 -> 625/64: {\\"note\\":\\"B2\\"}", - "75/8 -> 175/16: {\\"note\\":\\"F#4\\"}", - "175/16 -> 375/32: {\\"note\\":\\"G4\\"}", - "675/64 -> 1375/128: {\\"note\\":\\"A#3\\"}", - "675/64 -> 1375/128: {\\"note\\":\\"C#4\\"}", - "675/64 -> 1375/128: {\\"note\\":\\"D#4\\"}", - "675/64 -> 1375/128: {\\"note\\":\\"F#4\\"}", - "325/32 -> 675/64: {\\"note\\":\\"F#2\\"}", - "175/16 -> 725/64: {\\"note\\":\\"F2\\"}", - "175/16 -> 375/32: {\\"note\\":\\"G4\\"}", - "375/32 -> 25/2: {\\"note\\":\\"F4\\"}", - "725/64 -> 1475/128: {\\"note\\":\\"Ab3\\"}", - "725/64 -> 1475/128: {\\"note\\":\\"C4\\"}", - "725/64 -> 1475/128: {\\"note\\":\\"Eb4\\"}", - "725/64 -> 1475/128: {\\"note\\":\\"G4\\"}", - "175/16 -> 725/64: {\\"note\\":\\"F2\\"}", - "375/32 -> 775/64: {\\"note\\":\\"Bb2\\"}", - "375/32 -> 25/2: {\\"note\\":\\"F4\\"}", - "25/2 -> 225/16: {\\"note\\":\\"Bb4\\"}", - "775/64 -> 1575/128: {\\"note\\":\\"Ab3\\"}", - "775/64 -> 1575/128: {\\"note\\":\\"C4\\"}", - "775/64 -> 1575/128: {\\"note\\":\\"D4\\"}", - "775/64 -> 1575/128: {\\"note\\":\\"G4\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"G3\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"Bb3\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"D4\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"F4\\"}", - "375/32 -> 775/64: {\\"note\\":\\"Bb2\\"}", - "25/2 -> 825/64: {\\"note\\":\\"Eb2\\"}", - "25/2 -> 225/16: {\\"note\\":\\"Bb4\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"G3\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"Bb3\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"D4\\"}", - "825/64 -> 1675/128: {\\"note\\":\\"F4\\"}", - "875/64 -> 1775/128: {\\"note\\":\\"G3\\"}", - "875/64 -> 1775/128: {\\"note\\":\\"Bb3\\"}", - "875/64 -> 1775/128: {\\"note\\":\\"D4\\"}", - "875/64 -> 1775/128: {\\"note\\":\\"F4\\"}", - "425/32 -> 875/64: {\\"note\\":\\"Bb2\\"}", - "25/2 -> 225/16: {\\"note\\":\\"Bb4\\"}", - "225/16 -> 475/32: {\\"note\\":\\"B4\\"}", - "475/32 -> 125/8: {\\"note\\":\\"A4\\"}", - "925/64 -> 1875/128: {\\"note\\":\\"G3\\"}", - "925/64 -> 1875/128: {\\"note\\":\\"B3\\"}", - "925/64 -> 1875/128: {\\"note\\":\\"C4\\"}", - "925/64 -> 1875/128: {\\"note\\":\\"E4\\"}", - "225/16 -> 925/64: {\\"note\\":\\"A2\\"}", - "475/32 -> 975/64: {\\"note\\":\\"D2\\"}", - "475/32 -> 125/8: {\\"note\\":\\"A4\\"}", - "125/8 -> 275/16: {\\"note\\":\\"D5\\"}", - "975/64 -> 1975/128: {\\"note\\":\\"F#3\\"}", - "975/64 -> 1975/128: {\\"note\\":\\"B3\\"}", - "975/64 -> 1975/128: {\\"note\\":\\"C4\\"}", - "975/64 -> 1975/128: {\\"note\\":\\"E4\\"}", - "475/32 -> 975/64: {\\"note\\":\\"D2\\"}", - "125/8 -> 1025/64: {\\"note\\":\\"G2\\"}", - "125/8 -> 275/16: {\\"note\\":\\"D5\\"}", - "1025/64 -> 2075/128: {\\"note\\":\\"F#3\\"}", - "1025/64 -> 2075/128: {\\"note\\":\\"A3\\"}", - "1025/64 -> 2075/128: {\\"note\\":\\"B3\\"}", - "1025/64 -> 2075/128: {\\"note\\":\\"D4\\"}", - "1075/64 -> 2175/128: {\\"note\\":\\"F#3\\"}", - "1075/64 -> 2175/128: {\\"note\\":\\"A3\\"}", - "1075/64 -> 2175/128: {\\"note\\":\\"B3\\"}", - "1075/64 -> 2175/128: {\\"note\\":\\"D4\\"}", - "125/8 -> 1025/64: {\\"note\\":\\"G2\\"}", - "525/32 -> 1075/64: {\\"note\\":\\"D2\\"}", - "125/8 -> 275/16: {\\"note\\":\\"D5\\"}", - "275/16 -> 575/32: {\\"note\\":\\"D#5\\"}", - "575/32 -> 75/4: {\\"note\\":\\"C#5\\"}", - "1125/64 -> 2275/128: {\\"note\\":\\"E3\\"}", - "1125/64 -> 2275/128: {\\"note\\":\\"G#3\\"}", - "1125/64 -> 2275/128: {\\"note\\":\\"B3\\"}", - "1125/64 -> 2275/128: {\\"note\\":\\"D#4\\"}", - "275/16 -> 1125/64: {\\"note\\":\\"C#2\\"}", - "575/32 -> 1175/64: {\\"note\\":\\"F#2\\"}", - "575/32 -> 75/4: {\\"note\\":\\"C#5\\"}", - "75/4 -> 325/16: {\\"note\\":\\"F#5\\"}", - "1175/64 -> 2375/128: {\\"note\\":\\"E3\\"}", - "1175/64 -> 2375/128: {\\"note\\":\\"G#3\\"}", - "1175/64 -> 2375/128: {\\"note\\":\\"A#3\\"}", - "1175/64 -> 2375/128: {\\"note\\":\\"D#4\\"}", - "575/32 -> 1175/64: {\\"note\\":\\"F#2\\"}", - "75/4 -> 1225/64: {\\"note\\":\\"B2\\"}", - "75/4 -> 325/16: {\\"note\\":\\"F#5\\"}", - "1225/64 -> 2475/128: {\\"note\\":\\"A#3\\"}", - "1225/64 -> 2475/128: {\\"note\\":\\"C#4\\"}", - "1225/64 -> 2475/128: {\\"note\\":\\"D#4\\"}", - "1225/64 -> 2475/128: {\\"note\\":\\"F#4\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"A#3\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"C#4\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"D#4\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"F#4\\"}", - "75/4 -> 1225/64: {\\"note\\":\\"B2\\"}", - "625/32 -> 1275/64: {\\"note\\":\\"F#2\\"}", - "75/4 -> 325/16: {\\"note\\":\\"F#5\\"}", - "325/16 -> 675/32: {\\"note\\":\\"G5\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"A#3\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"C#4\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"D#4\\"}", - "1275/64 -> 2575/128: {\\"note\\":\\"F#4\\"}", - "1325/64 -> 2675/128: {\\"note\\":\\"Ab3\\"}", - "1325/64 -> 2675/128: {\\"note\\":\\"C4\\"}", - "1325/64 -> 2675/128: {\\"note\\":\\"Eb4\\"}", - "1325/64 -> 2675/128: {\\"note\\":\\"G4\\"}", - "325/16 -> 1325/64: {\\"note\\":\\"F2\\"}", - "325/16 -> 675/32: {\\"note\\":\\"G5\\"}", - "675/32 -> 175/8: {\\"note\\":\\"F5\\"}", - "175/8 -> 375/16: {\\"note\\":\\"Bb5\\"}", - "1375/64 -> 2775/128: {\\"note\\":\\"Ab3\\"}", - "1375/64 -> 2775/128: {\\"note\\":\\"C4\\"}", - "1375/64 -> 2775/128: {\\"note\\":\\"D4\\"}", - "1375/64 -> 2775/128: {\\"note\\":\\"G4\\"}", - "675/32 -> 1375/64: {\\"note\\":\\"Bb2\\"}", - "175/8 -> 1425/64: {\\"note\\":\\"Eb2\\"}", - "175/8 -> 375/16: {\\"note\\":\\"Bb5\\"}", - "1425/64 -> 2875/128: {\\"note\\":\\"G3\\"}", - "1425/64 -> 2875/128: {\\"note\\":\\"Bb3\\"}", - "1425/64 -> 2875/128: {\\"note\\":\\"D4\\"}", - "1425/64 -> 2875/128: {\\"note\\":\\"F4\\"}", - "175/8 -> 1425/64: {\\"note\\":\\"Eb2\\"}", - "725/32 -> 1475/64: {\\"note\\":\\"Bb2\\"}", - "175/8 -> 375/16: {\\"note\\":\\"Bb5\\"}", - "375/16 -> 775/32: {\\"note\\":\\"F#5\\"}", - "1475/64 -> 2975/128: {\\"note\\":\\"G3\\"}", - "1475/64 -> 2975/128: {\\"note\\":\\"Bb3\\"}", - "1475/64 -> 2975/128: {\\"note\\":\\"D4\\"}", - "1475/64 -> 2975/128: {\\"note\\":\\"F4\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"E3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"G#3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"B3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"D#4\\"}", - "725/32 -> 1475/64: {\\"note\\":\\"Bb2\\"}", - "375/16 -> 1525/64: {\\"note\\":\\"C#2\\"}", - "375/16 -> 775/32: {\\"note\\":\\"F#5\\"}", - "775/32 -> 3125/128: {\\"note\\":\\"F#5\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"E3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"G#3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"B3\\"}", - "1525/64 -> 3075/128: {\\"note\\":\\"D#4\\"}", - "1575/64 -> 3175/128: {\\"note\\":\\"E3\\"}", - "1575/64 -> 3175/128: {\\"note\\":\\"G#3\\"}", - "1575/64 -> 3175/128: {\\"note\\":\\"A#3\\"}", - "1575/64 -> 3175/128: {\\"note\\":\\"D#4\\"}", - "775/32 -> 1575/64: {\\"note\\":\\"F#2\\"}", -] -`; - exports[`renders tunes > tune: goodTimes 1`] = ` [ "0/1 -> 1/2: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}", @@ -9570,125 +9289,6 @@ exports[`renders tunes > tune: swimming 1`] = ` ] `; -exports[`renders tunes > tune: swimmingWithSoundfonts 1`] = ` -[ - "0/1 -> 3/4: {\\"n\\":\\"F4\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "0/1 -> 3/4: {\\"n\\":\\"Bb4\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "0/1 -> 3/4: {\\"n\\":\\"D5\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "3/4 -> 5/4: {\\"n\\":\\"D4\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "3/4 -> 5/4: {\\"n\\":\\"G4\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "3/4 -> 5/4: {\\"n\\":\\"Bb4\\",\\"s\\":\\"Kalimba: Ethnic\\"}", - "0/1 -> 3/4: {\\"n\\":\\"G3\\",\\"s\\":\\"Acoustic Bass: Bass\\"}", - "3/4 -> 3/2: {\\"n\\":\\"G3\\",\\"s\\":\\"Acoustic Bass: Bass\\"}", -] -`; - -exports[`renders tunes > tune: tetrisMini 1`] = ` -[ - "0/1 -> 1/2: {\\"note\\":\\"e5\\"}", - "1/2 -> 3/4: {\\"note\\":\\"b4\\"}", - "3/4 -> 1/1: {\\"note\\":\\"c5\\"}", - "0/1 -> 1/4: {\\"note\\":\\"e2\\"}", - "1/4 -> 1/2: {\\"note\\":\\"e3\\"}", - "1/2 -> 3/4: {\\"note\\":\\"e2\\"}", - "3/4 -> 1/1: {\\"note\\":\\"e3\\"}", - "1/1 -> 3/2: {\\"note\\":\\"d5\\"}", - "3/2 -> 7/4: {\\"note\\":\\"c5\\"}", - "7/4 -> 2/1: {\\"note\\":\\"b4\\"}", - "1/1 -> 5/4: {\\"note\\":\\"e2\\"}", - "5/4 -> 3/2: {\\"note\\":\\"e3\\"}", - "3/2 -> 7/4: {\\"note\\":\\"e2\\"}", - "7/4 -> 2/1: {\\"note\\":\\"e3\\"}", - "2/1 -> 5/2: {\\"note\\":\\"a4\\"}", - "5/2 -> 11/4: {\\"note\\":\\"a4\\"}", - "11/4 -> 3/1: {\\"note\\":\\"c5\\"}", - "2/1 -> 9/4: {\\"note\\":\\"a2\\"}", - "9/4 -> 5/2: {\\"note\\":\\"a3\\"}", - "5/2 -> 11/4: {\\"note\\":\\"a2\\"}", - "11/4 -> 3/1: {\\"note\\":\\"a3\\"}", - "3/1 -> 7/2: {\\"note\\":\\"e5\\"}", - "7/2 -> 15/4: {\\"note\\":\\"d5\\"}", - "15/4 -> 4/1: {\\"note\\":\\"c5\\"}", - "3/1 -> 13/4: {\\"note\\":\\"a2\\"}", - "13/4 -> 7/2: {\\"note\\":\\"a3\\"}", - "7/2 -> 15/4: {\\"note\\":\\"a2\\"}", - "15/4 -> 4/1: {\\"note\\":\\"a3\\"}", - "4/1 -> 9/2: {\\"note\\":\\"b4\\"}", - "19/4 -> 5/1: {\\"note\\":\\"c5\\"}", - "4/1 -> 17/4: {\\"note\\":\\"g#2\\"}", - "17/4 -> 9/2: {\\"note\\":\\"g#3\\"}", - "9/2 -> 19/4: {\\"note\\":\\"g#2\\"}", - "19/4 -> 5/1: {\\"note\\":\\"g#3\\"}", - "5/1 -> 11/2: {\\"note\\":\\"d5\\"}", - "11/2 -> 6/1: {\\"note\\":\\"e5\\"}", - "5/1 -> 21/4: {\\"note\\":\\"e2\\"}", - "21/4 -> 11/2: {\\"note\\":\\"e3\\"}", - "11/2 -> 23/4: {\\"note\\":\\"e2\\"}", - "23/4 -> 6/1: {\\"note\\":\\"e3\\"}", - "6/1 -> 13/2: {\\"note\\":\\"c5\\"}", - "13/2 -> 7/1: {\\"note\\":\\"a4\\"}", - "6/1 -> 25/4: {\\"note\\":\\"a2\\"}", - "25/4 -> 13/2: {\\"note\\":\\"a3\\"}", - "13/2 -> 27/4: {\\"note\\":\\"a2\\"}", - "27/4 -> 7/1: {\\"note\\":\\"a3\\"}", - "7/1 -> 15/2: {\\"note\\":\\"a4\\"}", - "7/1 -> 29/4: {\\"note\\":\\"a2\\"}", - "29/4 -> 15/2: {\\"note\\":\\"a3\\"}", - "15/2 -> 31/4: {\\"note\\":\\"b1\\"}", - "31/4 -> 8/1: {\\"note\\":\\"c2\\"}", - "33/4 -> 17/2: {\\"note\\":\\"d5\\"}", - "35/4 -> 9/1: {\\"note\\":\\"f5\\"}", - "8/1 -> 33/4: {\\"note\\":\\"d2\\"}", - "33/4 -> 17/2: {\\"note\\":\\"d3\\"}", - "17/2 -> 35/4: {\\"note\\":\\"d2\\"}", - "35/4 -> 9/1: {\\"note\\":\\"d3\\"}", - "9/1 -> 19/2: {\\"note\\":\\"a5\\"}", - "19/2 -> 39/4: {\\"note\\":\\"g5\\"}", - "39/4 -> 10/1: {\\"note\\":\\"f5\\"}", - "9/1 -> 37/4: {\\"note\\":\\"d2\\"}", - "37/4 -> 19/2: {\\"note\\":\\"d3\\"}", - "19/2 -> 39/4: {\\"note\\":\\"d2\\"}", - "39/4 -> 10/1: {\\"note\\":\\"d3\\"}", - "10/1 -> 21/2: {\\"note\\":\\"e5\\"}", - "43/4 -> 11/1: {\\"note\\":\\"c5\\"}", - "10/1 -> 41/4: {\\"note\\":\\"c2\\"}", - "41/4 -> 21/2: {\\"note\\":\\"c3\\"}", - "21/2 -> 43/4: {\\"note\\":\\"c2\\"}", - "43/4 -> 11/1: {\\"note\\":\\"c3\\"}", - "11/1 -> 23/2: {\\"note\\":\\"e5\\"}", - "23/2 -> 47/4: {\\"note\\":\\"d5\\"}", - "47/4 -> 12/1: {\\"note\\":\\"c5\\"}", - "11/1 -> 45/4: {\\"note\\":\\"c2\\"}", - "45/4 -> 23/2: {\\"note\\":\\"c3\\"}", - "23/2 -> 47/4: {\\"note\\":\\"c2\\"}", - "47/4 -> 12/1: {\\"note\\":\\"c3\\"}", - "12/1 -> 25/2: {\\"note\\":\\"b4\\"}", - "25/2 -> 51/4: {\\"note\\":\\"b4\\"}", - "51/4 -> 13/1: {\\"note\\":\\"c5\\"}", - "12/1 -> 49/4: {\\"note\\":\\"b1\\"}", - "49/4 -> 25/2: {\\"note\\":\\"b2\\"}", - "25/2 -> 51/4: {\\"note\\":\\"b1\\"}", - "51/4 -> 13/1: {\\"note\\":\\"b2\\"}", - "13/1 -> 27/2: {\\"note\\":\\"d5\\"}", - "27/2 -> 14/1: {\\"note\\":\\"e5\\"}", - "13/1 -> 53/4: {\\"note\\":\\"e2\\"}", - "53/4 -> 27/2: {\\"note\\":\\"e3\\"}", - "27/2 -> 55/4: {\\"note\\":\\"e2\\"}", - "55/4 -> 14/1: {\\"note\\":\\"e3\\"}", - "14/1 -> 29/2: {\\"note\\":\\"c5\\"}", - "29/2 -> 15/1: {\\"note\\":\\"a4\\"}", - "14/1 -> 57/4: {\\"note\\":\\"a1\\"}", - "57/4 -> 29/2: {\\"note\\":\\"a2\\"}", - "29/2 -> 59/4: {\\"note\\":\\"a1\\"}", - "59/4 -> 15/1: {\\"note\\":\\"a2\\"}", - "15/1 -> 31/2: {\\"note\\":\\"a4\\"}", - "15/1 -> 61/4: {\\"note\\":\\"a1\\"}", - "61/4 -> 31/2: {\\"note\\":\\"a2\\"}", - "31/2 -> 63/4: {\\"note\\":\\"a1\\"}", - "63/4 -> 16/1: {\\"note\\":\\"a2\\"}", -] -`; - exports[`renders tunes > tune: undergroundPlumber 1`] = ` [ "0/1 -> 3/16: {\\"s\\":\\"bd\\",\\"gain\\":0.7}", diff --git a/tutorial/test/__snapshots__/examples.test.mjs.snap b/tutorial/test/__snapshots__/examples.test.mjs.snap index 38c60282a..b9c47da4b 100644 --- a/tutorial/test/__snapshots__/examples.test.mjs.snap +++ b/tutorial/test/__snapshots__/examples.test.mjs.snap @@ -232,23 +232,6 @@ exports[`runs examples > example "amp" example index 0 1`] = ` ] `; -exports[`runs examples > example "apply" example index 0 1`] = ` -[ - "0/1 -> 1/1: {\\"note\\":\\"C3\\"}", - "0/1 -> 1/1: {\\"note\\":\\"Eb3\\"}", - "0/1 -> 1/1: {\\"note\\":\\"G3\\"}", - "1/1 -> 2/1: {\\"note\\":\\"Eb3\\"}", - "1/1 -> 2/1: {\\"note\\":\\"G3\\"}", - "1/1 -> 2/1: {\\"note\\":\\"Bb3\\"}", - "2/1 -> 3/1: {\\"note\\":\\"G3\\"}", - "2/1 -> 3/1: {\\"note\\":\\"Bb3\\"}", - "2/1 -> 3/1: {\\"note\\":\\"D4\\"}", - "3/1 -> 4/1: {\\"note\\":\\"C3\\"}", - "3/1 -> 4/1: {\\"note\\":\\"Eb3\\"}", - "3/1 -> 4/1: {\\"note\\":\\"G3\\"}", -] -`; - exports[`runs examples > example "bandf" example index 0 1`] = ` [ "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"bandf\\":1000}", @@ -782,27 +765,6 @@ exports[`runs examples > example "dry" example index 0 1`] = ` ] `; -exports[`runs examples > example "each" example index 0 1`] = ` -[ - "0/1 -> 1/4: {\\"note\\":\\"c3\\"}", - "1/4 -> 1/2: {\\"note\\":\\"d3\\"}", - "1/2 -> 3/4: {\\"note\\":\\"e3\\"}", - "3/4 -> 1/1: {\\"note\\":\\"g3\\"}", - "1/1 -> 5/4: {\\"note\\":\\"c3\\"}", - "5/4 -> 3/2: {\\"note\\":\\"d3\\"}", - "3/2 -> 7/4: {\\"note\\":\\"e3\\"}", - "7/4 -> 2/1: {\\"note\\":\\"g3\\"}", - "2/1 -> 9/4: {\\"note\\":\\"c3\\"}", - "9/4 -> 5/2: {\\"note\\":\\"d3\\"}", - "5/2 -> 11/4: {\\"note\\":\\"e3\\"}", - "11/4 -> 3/1: {\\"note\\":\\"g3\\"}", - "15/4 -> 4/1: {\\"note\\":\\"c3\\"}", - "7/2 -> 15/4: {\\"note\\":\\"d3\\"}", - "13/4 -> 7/2: {\\"note\\":\\"e3\\"}", - "3/1 -> 13/4: {\\"note\\":\\"g3\\"}", -] -`; - exports[`runs examples > example "early" example index 0 1`] = ` [ "0/1 -> 1/2: {\\"s\\":\\"bd\\"}", @@ -1547,27 +1509,6 @@ exports[`runs examples > example "every" example index 0 1`] = ` ] `; -exports[`runs examples > example "every" example index 0 2`] = ` -[ - "3/4 -> 1/1: {\\"note\\":\\"c3\\"}", - "1/2 -> 3/4: {\\"note\\":\\"d3\\"}", - "1/4 -> 1/2: {\\"note\\":\\"e3\\"}", - "0/1 -> 1/4: {\\"note\\":\\"g3\\"}", - "1/1 -> 5/4: {\\"note\\":\\"c3\\"}", - "5/4 -> 3/2: {\\"note\\":\\"d3\\"}", - "3/2 -> 7/4: {\\"note\\":\\"e3\\"}", - "7/4 -> 2/1: {\\"note\\":\\"g3\\"}", - "2/1 -> 9/4: {\\"note\\":\\"c3\\"}", - "9/4 -> 5/2: {\\"note\\":\\"d3\\"}", - "5/2 -> 11/4: {\\"note\\":\\"e3\\"}", - "11/4 -> 3/1: {\\"note\\":\\"g3\\"}", - "3/1 -> 13/4: {\\"note\\":\\"c3\\"}", - "13/4 -> 7/2: {\\"note\\":\\"d3\\"}", - "7/2 -> 15/4: {\\"note\\":\\"e3\\"}", - "15/4 -> 4/1: {\\"note\\":\\"g3\\"}", -] -`; - exports[`runs examples > example "fast" example index 0 1`] = ` [ "0/1 -> 1/4: {\\"s\\":\\"bd\\"}", From f491d0c0c429e3a2cfe822452bd2e9c450643b4f Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 12:22:32 +0100 Subject: [PATCH 27/31] fix loadOrc in tests --- repl/src/runtime.mjs | 1 + .../test/__snapshots__/tunes.test.mjs.snap | 99 ++++++------------- 2 files changed, 31 insertions(+), 69 deletions(-) diff --git a/repl/src/runtime.mjs b/repl/src/runtime.mjs index d0c96c451..ada99cbaa 100644 --- a/repl/src/runtime.mjs +++ b/repl/src/runtime.mjs @@ -174,6 +174,7 @@ evalScope( // gist, // euclid, csound: id, + loadOrc: id, mini, getDrawContext, getAudioContext, diff --git a/repl/src/test/__snapshots__/tunes.test.mjs.snap b/repl/src/test/__snapshots__/tunes.test.mjs.snap index d4d3ef3b5..1de13d998 100644 --- a/repl/src/test/__snapshots__/tunes.test.mjs.snap +++ b/repl/src/test/__snapshots__/tunes.test.mjs.snap @@ -1393,75 +1393,6 @@ exports[`renders tunes > tune: csoundDemo 1`] = ` ] `; -exports[`renders tunes > tune: csoundMixed 1`] = ` -[ - "2/3 -> 3/4: {\\"note\\":58.95209612324834,\\"gain\\":1}", - "2/3 -> 3/4: {\\"note\\":61.95209612324834,\\"gain\\":1}", - "2/3 -> 3/4: {\\"note\\":63.95209612324834,\\"gain\\":1}", - "2/3 -> 3/4: {\\"note\\":66.95209612324834,\\"gain\\":1}", - "0/1 -> 1/6: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "0/1 -> 1/6: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "1/3 -> 1/2: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "1/3 -> 1/2: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "1/2 -> 2/3: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "1/2 -> 2/3: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "5/6 -> 1/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "5/6 -> 1/1: {\\"note\\":35.95209612324834,\\"s\\":\\"sawtooth\\",\\"cutoff\\":277.9313247650862,\\"resonance\\":10,\\"decay\\":0.1,\\"sustain\\":0}", - "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"room\\":0.5,\\"speed\\":0.900230494513707}", - "1/3 -> 2/3: {\\"s\\":\\"hh:1\\",\\"room\\":0.5,\\"speed\\":0.900230494513707}", - "2/3 -> 1/1: {\\"s\\":\\"hh:1\\",\\"room\\":0.5,\\"speed\\":0.9009985942422922}", -] -`; - -exports[`renders tunes > tune: csoundTest 1`] = ` -[ - "0/1 -> 2/1: {\\"note\\":\\"B3\\",\\"s\\":\\"sawtooth\\"}", - "0/1 -> 2/1: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\"}", - "0/1 -> 2/1: {\\"note\\":\\"E4\\",\\"s\\":\\"sawtooth\\"}", - "0/1 -> 2/1: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\"}", - "0/1 -> 2/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\"}", -] -`; - -exports[`renders tunes > tune: csoundTest2 1`] = ` -[ - "0/1 -> 511525/2531369: {\\"note\\":\\"D3\\"}", - "-1/4 -> -1508319/10125476: {\\"note\\":\\"Bb3\\"}", - "1/4 -> 4577469/10125476: {\\"note\\":\\"F3\\"}", - "0/1 -> 511525/5062738: {\\"note\\":\\"F4\\"}", - "1/2 -> 3554419/5062738: {\\"note\\":\\"C4\\"}", - "-1/4 -> -1508319/10125476: {\\"note\\":\\"A4\\"}", - "1/4 -> 3554419/10125476: {\\"note\\":\\"A4\\"}", - "1/4 -> 3554419/10125476: {\\"note\\":\\"A4\\"}", - "3/4 -> 9640207/10125476: {\\"note\\":\\"E4\\"}", -] -`; - -exports[`renders tunes > tune: csoundTest3 1`] = ` -[ - "0/1 -> 1/1: {\\"note\\":\\"D3\\"}", - "-1/4 -> 1/4: {\\"note\\":\\"Bb3\\"}", - "1/4 -> 5/4: {\\"note\\":\\"F3\\"}", - "0/1 -> 1/2: {\\"note\\":\\"F4\\"}", - "1/2 -> 3/2: {\\"note\\":\\"C4\\"}", - "-1/4 -> 1/4: {\\"note\\":\\"A4\\"}", - "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", - "1/4 -> 3/4: {\\"note\\":\\"A4\\"}", - "3/4 -> 7/4: {\\"note\\":\\"E4\\"}", -] -`; - -exports[`renders tunes > tune: csoundTest4 1`] = ` -[ - "0/1 -> 2/1: {\\"note\\":\\"B3\\",\\"gain\\":0.5}", - "0/1 -> 2/1: {\\"note\\":\\"D4\\",\\"gain\\":0.5}", - "0/1 -> 2/1: {\\"note\\":\\"E4\\",\\"gain\\":0.5}", - "0/1 -> 2/1: {\\"note\\":\\"G4\\",\\"gain\\":0.5}", - "0/1 -> 2/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":800,\\"resonance\\":10,\\"shape\\":0.3}", - "0/1 -> 2/1: {\\"note\\":36.1,\\"s\\":\\"sawtooth\\",\\"cutoff\\":800,\\"resonance\\":10,\\"shape\\":0.3}", -] -`; - exports[`renders tunes > tune: delay 1`] = ` [ "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0,\\"delaytime\\":0.16,\\"delayfeedback\\":0.8,\\"speed\\":-1}", @@ -8137,6 +8068,36 @@ exports[`renders tunes > tune: juxUndTollerei 1`] = ` ] `; +exports[`renders tunes > tune: loungeSponge 1`] = ` +[ + "0/1 -> 3/8: {\\"note\\":\\"B3\\",\\"cutoff\\":1396}", + "0/1 -> 3/8: {\\"note\\":\\"D4\\",\\"cutoff\\":1396}", + "0/1 -> 3/8: {\\"note\\":\\"E4\\",\\"cutoff\\":1396}", + "0/1 -> 3/8: {\\"note\\":\\"G4\\",\\"cutoff\\":1396}", + "3/8 -> 3/4: {\\"note\\":\\"B3\\",\\"cutoff\\":1396}", + "3/8 -> 3/4: {\\"note\\":\\"D4\\",\\"cutoff\\":1396}", + "3/8 -> 3/4: {\\"note\\":\\"E4\\",\\"cutoff\\":1396}", + "3/8 -> 3/4: {\\"note\\":\\"G4\\",\\"cutoff\\":1396}", + "3/4 -> 1/1: {\\"note\\":\\"B3\\",\\"cutoff\\":1396}", + "3/4 -> 1/1: {\\"note\\":\\"D4\\",\\"cutoff\\":1396}", + "3/4 -> 1/1: {\\"note\\":\\"E4\\",\\"cutoff\\":1396}", + "3/4 -> 1/1: {\\"note\\":\\"G4\\",\\"cutoff\\":1396}", + "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"gain\\":1}", + "1/4 -> 1/2: {\\"note\\":\\"C2\\",\\"gain\\":4}", + "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"gain\\":1}", + "3/4 -> 1/1: {\\"note\\":\\"C2\\",\\"gain\\":4}", + "0/1 -> 3/16: {\\"note\\":\\"A4\\"}", + "3/4 -> 15/16: {\\"note\\":\\"A5\\"}", + "-1/4 -> -1/16: {\\"note\\":\\"E5\\"}", + "1/2 -> 11/16: {\\"note\\":\\"C5\\"}", + "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\"}", + "1/2 -> 1/1: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\"}", + "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"bank\\":\\"RolandTR909\\"}", + "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"bank\\":\\"RolandTR909\\"}", + "1/2 -> 1/1: {\\"s\\":\\"cp\\",\\"bank\\":\\"RolandTR909\\"}", +] +`; + exports[`renders tunes > tune: meltingsubmarine 1`] = ` [ "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}", From 7a79995727ff44ba2c371147af873efe064bd471 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 2 Dec 2022 13:34:05 +0100 Subject: [PATCH 28/31] do not recompile orc --- packages/csound/csound.mjs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/csound/csound.mjs b/packages/csound/csound.mjs index 0d9c6d05c..cc453a5e5 100644 --- a/packages/csound/csound.mjs +++ b/packages/csound/csound.mjs @@ -113,7 +113,9 @@ export async function loadOrc(url) { url = `https://raw.githubusercontent.com/${path}`; } if (!orcCache[url]) { - orcCache[url] = await fetch(url).then((res) => res.text()); + orcCache[url] = fetch(url) + .then((res) => res.text()) + .then((code) => _csound.compileOrc(code)); } - await _csound.compileOrc(orcCache[url]); + await orcCache[url]; } From 4dd08268dcfdf7c2552499d1e9ff1af7022b194d Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 4 Dec 2022 11:38:11 +0100 Subject: [PATCH 29/31] implement collect + arp function --- packages/core/pattern.mjs | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 154253974..c5f7a6be9 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1361,6 +1361,49 @@ export class Pattern { } } +////////////////////////////////////////////////////////////////////// +// functions relating to chords/patterns of lists + +// returns Array where each list of haps satisfies eq +function groupHapsBy(eq, haps) { + let groups = []; + haps.forEach((hap) => { + const match = groups.findIndex(([other]) => eq(hap, other)); + if (match === -1) { + groups.push([hap]); + } else { + groups[match].push(hap); + } + }); + return groups; +} + +// congruent haps = haps with equal spans +const congruent = (a, b) => a.spanEquals(b); +// Pattern> -> Pattern> +// returned pattern contains arrays of congruent haps +Pattern.prototype.collect = function () { + return this.withHaps((haps) => + groupHapsBy(congruent, haps).map((_haps) => new Hap(_haps[0].whole, _haps[0].part, _haps, {})), + ); +}; + +// applies func to each array of congruent haps +Pattern.prototype.arpWith = function (func) { + return this.collect() + .fmap((v) => reify(func(v))) + .squeezeJoin() + .withHap((h) => new Hap(h.whole, h.part, h.value.value, h.combineContext(h.value))); +}; + +// applies pattern of indices to each array of congruent haps +Pattern.prototype.arp = function (pat) { + return this.arpWith((haps) => pat.fmap((i) => haps[i % haps.length])); +}; + +////////////////////////////////////////////////////////////////////// +// compose matrix functions + // TODO - adopt value.mjs fully.. function _composeOp(a, b, func) { function _nonFunctionObject(x) { From ff987f14d71c4ec35f25f16ad2ec25672e01623c Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 4 Dec 2022 11:57:40 +0100 Subject: [PATCH 30/31] add arp example tune --- repl/src/tunes.mjs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index 1b09a9778..fcb7b4db6 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -818,3 +818,21 @@ stack( , s("bd*2,[~ hh]*2,~ cp").bank('RolandTR909') )`; + +export const arpoon = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ +// "Arpoon" by Felix Roos +await samples('github:tidalcycles/Dirt-Samples/master') + +"< C7 F^7 [Fm7 E7b9]>".voicings() + .arp("[0,3] 2 [1,3] 2".fast(3)).legato(2) + .add(perlin.range(0,0.2)).sub("<0 -12>/8") + .note().cutoff(perlin.range(500,4000)).resonance(12) + .gain("<.5 .8>*16") + .decay(.16).sustain(0.5) + .delay(.2) + .room(.5).pan(sine.range(.3,.6)) + .s('piano').clip(1) + .stack("<!2 F2 [F2 E2]>".add.out("0 -5".fast(2)).add("0,.12").note().s('sawtooth').clip(1).cutoff(300)) + .slow(4) + .stack(s("bd*4, [~ [hh hh? hh?]]*2,~ [sd ~ [sd:2? bd?]]").arp("0|1").bank('RolandTR909').gain(.5).slow(2)) +`; From 98a104f731cd2555dc3cb7508dd7ef9ec6de4ce2 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 4 Dec 2022 11:58:19 +0100 Subject: [PATCH 31/31] update snapshot --- .../test/__snapshots__/tunes.test.mjs.snap | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/repl/src/test/__snapshots__/tunes.test.mjs.snap b/repl/src/test/__snapshots__/tunes.test.mjs.snap index 1de13d998..4097dc7a1 100644 --- a/repl/src/test/__snapshots__/tunes.test.mjs.snap +++ b/repl/src/test/__snapshots__/tunes.test.mjs.snap @@ -39,6 +39,35 @@ exports[`renders tunes > tune: amensister 1`] = ` ] `; +exports[`renders tunes > tune: arpoon 1`] = ` +[ + "0/1 -> 2/3: {\\"note\\":55.000528662214684,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 2/3: {\\"note\\":55.000528662214684,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 2/3: {\\"note\\":55.000528662214684,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 2/3: {\\"note\\":64.00052866221468,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 2/3: {\\"note\\":64.00052866221468,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 2/3: {\\"note\\":64.00052866221468,\\"cutoff\\":509.2515887569149,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5249999999999999,\\"s\\":\\"piano\\",\\"clip\\":1}", + "1/3 -> 1/1: {\\"note\\":60.003688107962134,\\"cutoff\\":564.5418893373399,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5799038105676657,\\"s\\":\\"piano\\",\\"clip\\":1}", + "1/3 -> 1/1: {\\"note\\":60.003688107962134,\\"cutoff\\":564.5418893373399,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5799038105676657,\\"s\\":\\"piano\\",\\"clip\\":1}", + "1/3 -> 1/1: {\\"note\\":60.003688107962134,\\"cutoff\\":564.5418893373399,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.5799038105676657,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":59.010756146386846,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":59.010756146386846,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":59.010756146386846,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":59.010756146386846,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":64.01075614638685,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":64.01075614638685,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":64.01075614638685,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.5,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "2/3 -> 4/3: {\\"note\\":64.01075614638685,\\"cutoff\\":688.232561769837,\\"resonance\\":12,\\"gain\\":0.8,\\"decay\\":0.16,\\"sustain\\":0.5,\\"delay\\":0.2,\\"room\\":0.5,\\"pan\\":0.6,\\"s\\":\\"piano\\",\\"clip\\":1}", + "0/1 -> 1/1: {\\"note\\":33,\\"s\\":\\"sawtooth\\",\\"clip\\":1,\\"cutoff\\":300}", + "0/1 -> 1/1: {\\"note\\":33.12,\\"s\\":\\"sawtooth\\",\\"clip\\":1,\\"cutoff\\":300}", + "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\",\\"gain\\":0.5}", + "1/2 -> 1/1: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\",\\"gain\\":0.5}", + "1/2 -> 2/3: {\\"s\\":\\"hh\\",\\"bank\\":\\"RolandTR909\\",\\"gain\\":0.5}", + "2/3 -> 5/6: {\\"s\\":\\"hh\\",\\"bank\\":\\"RolandTR909\\",\\"gain\\":0.5}", + "5/6 -> 1/1: {\\"s\\":\\"hh\\",\\"bank\\":\\"RolandTR909\\",\\"gain\\":0.5}", +] +`; + exports[`renders tunes > tune: barryHarris 1`] = ` [ "0/1 -> 2/1: {\\"note\\":\\"C3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4722222222222222}",