mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-24 20:18:34 +00:00
Merge pull request #249 from tidalcycles/use-acorn
new transpiler based on acorn
This commit is contained in:
commit
314c739c3a
172
package-lock.json
generated
172
package-lock.json
generated
@ -2133,6 +2133,10 @@
|
|||||||
"resolved": "packages/tone",
|
"resolved": "packages/tone",
|
||||||
"link": true
|
"link": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@strudel.cycles/transpiler": {
|
||||||
|
"resolved": "packages/transpiler",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@strudel.cycles/webaudio": {
|
"node_modules/@strudel.cycles/webaudio": {
|
||||||
"resolved": "packages/webaudio",
|
"resolved": "packages/webaudio",
|
||||||
"link": true
|
"link": true
|
||||||
@ -4207,10 +4211,7 @@
|
|||||||
"node_modules/deep-is": {
|
"node_modules/deep-is": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
|
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/defaults": {
|
"node_modules/defaults": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
@ -4948,9 +4949,6 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
||||||
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"estraverse": "^5.2.0",
|
"estraverse": "^5.2.0",
|
||||||
@ -4972,9 +4970,6 @@
|
|||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"esparse": "bin/esparse.js",
|
"esparse": "bin/esparse.js",
|
||||||
"esvalidate": "bin/esvalidate.js"
|
"esvalidate": "bin/esvalidate.js"
|
||||||
@ -4991,6 +4986,11 @@
|
|||||||
"node": ">=4.0"
|
"node": ">=4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/estree-walker": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g=="
|
||||||
|
},
|
||||||
"node_modules/esutils": {
|
"node_modules/esutils": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||||
@ -5109,10 +5109,7 @@
|
|||||||
"node_modules/fast-levenshtein": {
|
"node_modules/fast-levenshtein": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
|
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/fastq": {
|
"node_modules/fastq": {
|
||||||
"version": "1.13.0",
|
"version": "1.13.0",
|
||||||
@ -7221,9 +7218,6 @@
|
|||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
"integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
|
"integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"prelude-ls": "~1.1.2",
|
"prelude-ls": "~1.1.2",
|
||||||
"type-check": "~0.3.2"
|
"type-check": "~0.3.2"
|
||||||
@ -8782,9 +8776,6 @@
|
|||||||
"version": "0.8.3",
|
"version": "0.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||||
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"deep-is": "~0.1.3",
|
"deep-is": "~0.1.3",
|
||||||
"fast-levenshtein": "~2.0.6",
|
"fast-levenshtein": "~2.0.6",
|
||||||
@ -9525,9 +9516,6 @@
|
|||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
"integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
|
"integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
@ -10764,7 +10752,7 @@
|
|||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@ -11576,9 +11564,6 @@
|
|||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
"integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
|
"integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"prelude-ls": "~1.1.2"
|
"prelude-ls": "~1.1.2"
|
||||||
},
|
},
|
||||||
@ -12151,9 +12136,6 @@
|
|||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@ -12486,7 +12468,7 @@
|
|||||||
},
|
},
|
||||||
"packages/eval": {
|
"packages/eval": {
|
||||||
"name": "@strudel.cycles/eval",
|
"name": "@strudel.cycles/eval",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
@ -12513,10 +12495,10 @@
|
|||||||
},
|
},
|
||||||
"packages/midi": {
|
"packages/midi": {
|
||||||
"name": "@strudel.cycles/midi",
|
"name": "@strudel.cycles/midi",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"tone": "^14.7.77",
|
"tone": "^14.7.77",
|
||||||
"webmidi": "^3.0.21"
|
"webmidi": "^3.0.21"
|
||||||
}
|
}
|
||||||
@ -12537,12 +12519,12 @@
|
|||||||
},
|
},
|
||||||
"packages/mini": {
|
"packages/mini": {
|
||||||
"name": "@strudel.cycles/mini",
|
"name": "@strudel.cycles/mini",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/eval": "^0.3.0",
|
"@strudel.cycles/eval": "^0.3.1",
|
||||||
"@strudel.cycles/tone": "^0.3.0"
|
"@strudel.cycles/tone": "^0.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"peggy": "^2.0.1"
|
"peggy": "^2.0.1"
|
||||||
@ -12558,13 +12540,13 @@
|
|||||||
},
|
},
|
||||||
"packages/react": {
|
"packages/react": {
|
||||||
"name": "@strudel.cycles/react",
|
"name": "@strudel.cycles/react",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/lang-javascript": "^6.1.1",
|
"@codemirror/lang-javascript": "^6.1.1",
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/eval": "^0.3.0",
|
"@strudel.cycles/eval": "^0.3.1",
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"@uiw/codemirror-themes": "^4.12.4",
|
"@uiw/codemirror-themes": "^4.12.4",
|
||||||
"@uiw/react-codemirror": "^4.12.4",
|
"@uiw/react-codemirror": "^4.12.4",
|
||||||
"react-hook-inview": "^4.5.0"
|
"react-hook-inview": "^4.5.0"
|
||||||
@ -12639,11 +12621,11 @@
|
|||||||
},
|
},
|
||||||
"packages/soundfonts": {
|
"packages/soundfonts": {
|
||||||
"name": "@strudel.cycles/soundfonts",
|
"name": "@strudel.cycles/soundfonts",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/webaudio": "^0.3.0",
|
"@strudel.cycles/webaudio": "^0.3.1",
|
||||||
"sfumato": "^0.1.2",
|
"sfumato": "^0.1.2",
|
||||||
"soundfont2": "^0.4.0"
|
"soundfont2": "^0.4.0"
|
||||||
},
|
},
|
||||||
@ -12671,7 +12653,7 @@
|
|||||||
},
|
},
|
||||||
"packages/tonal": {
|
"packages/tonal": {
|
||||||
"name": "@strudel.cycles/tonal",
|
"name": "@strudel.cycles/tonal",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
@ -12695,7 +12677,7 @@
|
|||||||
},
|
},
|
||||||
"packages/tone": {
|
"packages/tone": {
|
||||||
"name": "@strudel.cycles/tone",
|
"name": "@strudel.cycles/tone",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
@ -12703,9 +12685,31 @@
|
|||||||
"tone": "^14.7.77"
|
"tone": "^14.7.77"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/transpiler": {
|
||||||
|
"name": "@strudel.cycles/transpiler",
|
||||||
|
"version": "0.3.1",
|
||||||
|
"license": "AGPL-3.0-or-later",
|
||||||
|
"dependencies": {
|
||||||
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
|
"acorn": "^8.8.1",
|
||||||
|
"escodegen": "^2.0.0",
|
||||||
|
"estree-walker": "^3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/transpiler/node_modules/acorn": {
|
||||||
|
"version": "8.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
|
||||||
|
"integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
|
||||||
|
"bin": {
|
||||||
|
"acorn": "bin/acorn"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"packages/webaudio": {
|
"packages/webaudio": {
|
||||||
"name": "@strudel.cycles/webaudio",
|
"name": "@strudel.cycles/webaudio",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1"
|
"@strudel.cycles/core": "^0.3.1"
|
||||||
@ -12713,7 +12717,7 @@
|
|||||||
},
|
},
|
||||||
"packages/webdirt": {
|
"packages/webdirt": {
|
||||||
"name": "@strudel.cycles/webdirt",
|
"name": "@strudel.cycles/webdirt",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
@ -12722,7 +12726,7 @@
|
|||||||
},
|
},
|
||||||
"packages/xen": {
|
"packages/xen": {
|
||||||
"name": "@strudel.cycles/xen",
|
"name": "@strudel.cycles/xen",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@strudel.cycles/core": "^0.3.1"
|
"@strudel.cycles/core": "^0.3.1"
|
||||||
@ -14423,7 +14427,7 @@
|
|||||||
"@strudel.cycles/midi": {
|
"@strudel.cycles/midi": {
|
||||||
"version": "file:packages/midi",
|
"version": "file:packages/midi",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"tone": "^14.7.77",
|
"tone": "^14.7.77",
|
||||||
"webmidi": "^3.0.21"
|
"webmidi": "^3.0.21"
|
||||||
},
|
},
|
||||||
@ -14443,8 +14447,8 @@
|
|||||||
"version": "file:packages/mini",
|
"version": "file:packages/mini",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/eval": "^0.3.0",
|
"@strudel.cycles/eval": "^0.3.1",
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"peggy": "^2.0.1"
|
"peggy": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -14459,8 +14463,8 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"@codemirror/lang-javascript": "^6.1.1",
|
"@codemirror/lang-javascript": "^6.1.1",
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/eval": "^0.3.0",
|
"@strudel.cycles/eval": "^0.3.1",
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"@types/react": "^17.0.2",
|
"@types/react": "^17.0.2",
|
||||||
"@types/react-dom": "^17.0.2",
|
"@types/react-dom": "^17.0.2",
|
||||||
"@uiw/codemirror-themes": "^4.12.4",
|
"@uiw/codemirror-themes": "^4.12.4",
|
||||||
@ -14516,7 +14520,7 @@
|
|||||||
"version": "file:packages/soundfonts",
|
"version": "file:packages/soundfonts",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/webaudio": "^0.3.0",
|
"@strudel.cycles/webaudio": "^0.3.1",
|
||||||
"node-fetch": "^3.2.6",
|
"node-fetch": "^3.2.6",
|
||||||
"sfumato": "^0.1.2",
|
"sfumato": "^0.1.2",
|
||||||
"soundfont2": "^0.4.0"
|
"soundfont2": "^0.4.0"
|
||||||
@ -14562,6 +14566,22 @@
|
|||||||
"tone": "^14.7.77"
|
"tone": "^14.7.77"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@strudel.cycles/transpiler": {
|
||||||
|
"version": "file:packages/transpiler",
|
||||||
|
"requires": {
|
||||||
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
|
"acorn": "^8.8.1",
|
||||||
|
"escodegen": "^2.0.0",
|
||||||
|
"estree-walker": "^3.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"acorn": {
|
||||||
|
"version": "8.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
|
||||||
|
"integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@strudel.cycles/webaudio": {
|
"@strudel.cycles/webaudio": {
|
||||||
"version": "file:packages/webaudio",
|
"version": "file:packages/webaudio",
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -16271,10 +16291,7 @@
|
|||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
|
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
@ -16749,9 +16766,6 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
||||||
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"estraverse": "^5.2.0",
|
"estraverse": "^5.2.0",
|
||||||
@ -16763,16 +16777,18 @@
|
|||||||
"esprima": {
|
"esprima": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"estraverse": {
|
"estraverse": {
|
||||||
"version": "5.3.0",
|
"version": "5.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
|
||||||
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
|
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
|
||||||
},
|
},
|
||||||
|
"estree-walker": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g=="
|
||||||
|
},
|
||||||
"esutils": {
|
"esutils": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||||
@ -16869,10 +16885,7 @@
|
|||||||
"fast-levenshtein": {
|
"fast-levenshtein": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
|
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"fastq": {
|
"fastq": {
|
||||||
"version": "1.13.0",
|
"version": "1.13.0",
|
||||||
@ -18473,9 +18486,6 @@
|
|||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
"integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
|
"integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"prelude-ls": "~1.1.2",
|
"prelude-ls": "~1.1.2",
|
||||||
"type-check": "~0.3.2"
|
"type-check": "~0.3.2"
|
||||||
@ -19696,9 +19706,6 @@
|
|||||||
"version": "0.8.3",
|
"version": "0.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||||
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"deep-is": "~0.1.3",
|
"deep-is": "~0.1.3",
|
||||||
"fast-levenshtein": "~2.0.6",
|
"fast-levenshtein": "~2.0.6",
|
||||||
@ -20227,10 +20234,7 @@
|
|||||||
"prelude-ls": {
|
"prelude-ls": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
"integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
|
"integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"process-nextick-args": {
|
"process-nextick-args": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
@ -20339,8 +20343,8 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"@codemirror/lang-javascript": "^6.1.1",
|
"@codemirror/lang-javascript": "^6.1.1",
|
||||||
"@strudel.cycles/core": "^0.3.1",
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
"@strudel.cycles/eval": "^0.3.0",
|
"@strudel.cycles/eval": "^0.3.1",
|
||||||
"@strudel.cycles/tone": "^0.3.0",
|
"@strudel.cycles/tone": "^0.3.1",
|
||||||
"@types/react": "^17.0.2",
|
"@types/react": "^17.0.2",
|
||||||
"@types/react-dom": "^17.0.2",
|
"@types/react-dom": "^17.0.2",
|
||||||
"@uiw/codemirror-themes": "^4.12.4",
|
"@uiw/codemirror-themes": "^4.12.4",
|
||||||
@ -21237,7 +21241,7 @@
|
|||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
"dev": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
"source-map-generator": {
|
"source-map-generator": {
|
||||||
"version": "0.8.0",
|
"version": "0.8.0",
|
||||||
@ -21893,9 +21897,6 @@
|
|||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
"integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
|
"integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"prelude-ls": "~1.1.2"
|
"prelude-ls": "~1.1.2"
|
||||||
}
|
}
|
||||||
@ -22294,10 +22295,7 @@
|
|||||||
"word-wrap": {
|
"word-wrap": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"wordwrap": {
|
"wordwrap": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|||||||
@ -24,8 +24,16 @@ export const evalScope = async (...args) => {
|
|||||||
Object.assign(globalThis, ...modules, Pattern.prototype.bootstrap());
|
Object.assign(globalThis, ...modules, Pattern.prototype.bootstrap());
|
||||||
};
|
};
|
||||||
|
|
||||||
function safeEval(str) {
|
function safeEval(str, options = {}) {
|
||||||
return Function('"use strict";return (' + str + ')')();
|
const { wrapExpression = true, wrapAsync = true } = options;
|
||||||
|
if (wrapExpression) {
|
||||||
|
str = `{${str}}`;
|
||||||
|
}
|
||||||
|
if (wrapAsync) {
|
||||||
|
str = `(async ()=>${str})()`;
|
||||||
|
}
|
||||||
|
const body = `"use strict";return (${str})`;
|
||||||
|
return Function(body)();
|
||||||
}
|
}
|
||||||
|
|
||||||
export const evaluate = async (code, transpiler) => {
|
export const evaluate = async (code, transpiler) => {
|
||||||
@ -35,7 +43,9 @@ export const evaluate = async (code, transpiler) => {
|
|||||||
if (transpiler) {
|
if (transpiler) {
|
||||||
code = transpiler(code); // transform syntactically correct js code to semantically usable code
|
code = transpiler(code); // transform syntactically correct js code to semantically usable code
|
||||||
}
|
}
|
||||||
let evaluated = await safeEval(code);
|
// if no transpiler is given, we expect a single instruction (!wrapExpression)
|
||||||
|
const options = { wrapExpression: !!transpiler };
|
||||||
|
let evaluated = await safeEval(code, options);
|
||||||
if (!isPattern(evaluated)) {
|
if (!isPattern(evaluated)) {
|
||||||
console.log('evaluated', evaluated);
|
console.log('evaluated', evaluated);
|
||||||
const message = `got "${typeof evaluated}" instead of pattern`;
|
const message = `got "${typeof evaluated}" instead of pattern`;
|
||||||
|
|||||||
1
packages/core/examples/vite-vanilla-repl/dist/assets/index.211bbc68.js
vendored
Normal file
1
packages/core/examples/vite-vanilla-repl/dist/assets/index.211bbc68.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{b as s,h as i,m,a as n,c as p,p as t}from"./index.4cbc0a10.js";export{s as SyntaxError,i as h,m as mini,n as minify,p as parse,t as patternifyAST};
|
||||||
24
packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js
vendored
Normal file
24
packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
import{g as s,b as d,e as t,j as u,l as o,f as r,p as f,i as p,d as g,h as i,w as l,a as m}from"./index.f88145a1.js";export{s as getAudioContext,d as getCachedBuffer,t as getLoadedBuffer,u as getLoadedSamples,o as loadBuffer,r as loadGithubSamples,f as panic,p as resetLoadedSamples,g as reverseBuffer,i as samples,l as webaudioOutput,m as webaudioOutputTrigger};
|
|
||||||
File diff suppressed because one or more lines are too long
1
packages/core/examples/vite-vanilla-repl/dist/assets/index.ecddf978.js
vendored
Normal file
1
packages/core/examples/vite-vanilla-repl/dist/assets/index.ecddf978.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{g as s,f as d,i as t,n as r,l as u,j as o,d as f,k as p,r as g,s as i,w as l,e as m}from"./index.4cbc0a10.js";export{s as getAudioContext,d as getCachedBuffer,t as getLoadedBuffer,r as getLoadedSamples,u as loadBuffer,o as loadGithubSamples,f as panic,p as resetLoadedSamples,g as reverseBuffer,i as samples,l as webaudioOutput,m as webaudioOutputTrigger};
|
||||||
File diff suppressed because one or more lines are too long
@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Vite Vanilla Strudel REPL</title>
|
<title>Vite Vanilla Strudel REPL</title>
|
||||||
<script type="module" crossorigin src="/tidalcycles/strudel/general-purpose-scheduler/packages/core/examples/vite-vanilla-repl/dist/assets/index.f88145a1.js"></script>
|
<script type="module" crossorigin src="/tidalcycles/strudel/use-acorn/packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body style="margin: 0; background: #222">
|
<body style="margin: 0; background: #222">
|
||||||
<div style="display: grid; height: 100vh">
|
<div style="display: grid; height: 100vh">
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { controls, repl, evalScope } from '@strudel.cycles/core';
|
import { controls, repl, evalScope, setStringParser } from '@strudel.cycles/core';
|
||||||
|
import { mini } from '@strudel.cycles/mini';
|
||||||
import { getAudioContext, webaudioOutput } from '@strudel.cycles/webaudio';
|
import { getAudioContext, webaudioOutput } from '@strudel.cycles/webaudio';
|
||||||
import shapeshifter from '@strudel.cycles/eval/shapeshifter.mjs';
|
// import { transpiler } from '@strudel.cycles/transpiler';
|
||||||
import tune from './tune.mjs';
|
import tune from './tune.mjs';
|
||||||
|
|
||||||
const ctx = getAudioContext();
|
const ctx = getAudioContext();
|
||||||
@ -15,10 +16,12 @@ evalScope(
|
|||||||
import('@strudel.cycles/tonal'),
|
import('@strudel.cycles/tonal'),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
setStringParser(mini)
|
||||||
|
|
||||||
const { evaluate } = repl({
|
const { evaluate } = repl({
|
||||||
defaultOutput: webaudioOutput,
|
defaultOutput: webaudioOutput,
|
||||||
getTime: () => ctx.currentTime,
|
getTime: () => ctx.currentTime,
|
||||||
transpiler: shapeshifter,
|
// transpiler,
|
||||||
});
|
});
|
||||||
document.getElementById('start').addEventListener('click', () => {
|
document.getElementById('start').addEventListener('click', () => {
|
||||||
ctx.resume();
|
ctx.resume();
|
||||||
|
|||||||
@ -5,10 +5,11 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build --base /tidalcycles/strudel/general-purpose-scheduler/packages/core/examples/vite-vanilla-repl/dist/",
|
"build-githack": "vite build --base /tidalcycles/strudel/use-acorn/packages/core/examples/vite-vanilla-repl/dist/",
|
||||||
|
"build": "vite build",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"vite": "^3.2.0"
|
"vite": "^3.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
export default `await samples('github:tidalcycles/Dirt-Samples/master')
|
/* export default `await samples('github:tidalcycles/Dirt-Samples/master')
|
||||||
|
|
||||||
stack(
|
stack(
|
||||||
// amen
|
// amen
|
||||||
@ -29,3 +29,11 @@ stack(
|
|||||||
,
|
,
|
||||||
n("0 1").s("east").delay(.5).degradeBy(.8).speed(rand.range(.5,1.5))
|
n("0 1").s("east").delay(.5).degradeBy(.8).speed(rand.range(.5,1.5))
|
||||||
).reset("<x@7 x(5,8)>")`;
|
).reset("<x@7 x(5,8)>")`;
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default `stack(
|
||||||
|
n("c3 [eb3,g3]")
|
||||||
|
.delay("<0 .5>")
|
||||||
|
.delaytime(".16 | .33")
|
||||||
|
.delayfeedback(".6 | .8")
|
||||||
|
).sometimes(x=>x.speed("-1"))`;
|
||||||
|
|||||||
@ -13,6 +13,12 @@ import { unionWithObj } from './value.mjs';
|
|||||||
import { compose, removeUndefineds, flatten, id, listRange, curry, mod, numeralArgs, parseNumeral } from './util.mjs';
|
import { compose, removeUndefineds, flatten, id, listRange, curry, mod, numeralArgs, parseNumeral } from './util.mjs';
|
||||||
import drawLine from './drawLine.mjs';
|
import drawLine from './drawLine.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
|
||||||
|
export const setStringParser = (parser) => (stringParser = parser);
|
||||||
|
|
||||||
/** @class Class representing a pattern. */
|
/** @class Class representing a pattern. */
|
||||||
export class Pattern {
|
export class Pattern {
|
||||||
_Pattern = true; // this property is used to detect if a pattern that fails instanceof Pattern is an instance of another Pattern
|
_Pattern = true; // this property is used to detect if a pattern that fails instanceof Pattern is an instance of another Pattern
|
||||||
@ -1561,6 +1567,9 @@ export function reify(thing) {
|
|||||||
if (isPattern(thing)) {
|
if (isPattern(thing)) {
|
||||||
return thing;
|
return thing;
|
||||||
}
|
}
|
||||||
|
if (stringParser && typeof thing === 'string') {
|
||||||
|
return stringParser(thing);
|
||||||
|
}
|
||||||
return pure(thing);
|
return pure(thing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,8 @@ const isNote = (name) => /^[a-gC-G][bs]?[0-9]$/.test(name);
|
|||||||
const addLocations = true;
|
const addLocations = true;
|
||||||
export const addMiniLocations = true;
|
export const addMiniLocations = true;
|
||||||
export const minifyStrings = true;
|
export const minifyStrings = true;
|
||||||
export const wrappedAsync = true;
|
export const wrappedAsync = false; // this is now handled by core evaluate by default
|
||||||
|
export const shouldAddReturn = true;
|
||||||
|
|
||||||
export default (_code) => {
|
export default (_code) => {
|
||||||
const { code, addReturn } = wrapAsync(_code);
|
const { code, addReturn } = wrapAsync(_code);
|
||||||
@ -125,7 +126,7 @@ export default (_code) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
// add return to last statement (because it's wrapped in an async function artificially)
|
// add return to last statement (because it's wrapped in an async function artificially)
|
||||||
if (wrappedAsync) {
|
if (shouldAddReturn) {
|
||||||
addReturn(shifted);
|
addReturn(shifted);
|
||||||
}
|
}
|
||||||
const generated = undisguiseImports(codegen(shifted));
|
const generated = undisguiseImports(codegen(shifted));
|
||||||
@ -153,7 +154,7 @@ ${code}
|
|||||||
})()`;
|
})()`;
|
||||||
}
|
}
|
||||||
const addReturn = (ast) => {
|
const addReturn = (ast) => {
|
||||||
const body = ast.statements[0].expression.callee.body; // actual code ast inside async function body
|
const body = wrappedAsync ? ast.statements[0].expression.callee.body : ast;
|
||||||
body.statements = body.statements
|
body.statements = body.statements
|
||||||
.slice(0, -1)
|
.slice(0, -1)
|
||||||
.concat([new ReturnStatement({ expression: body.statements.slice(-1)[0] })]);
|
.concat([new ReturnStatement({ expression: body.statements.slice(-1)[0] })]);
|
||||||
|
|||||||
@ -5,15 +5,21 @@ This program is free software: you can redistribute it and/or modify it under th
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { describe, it, expect } from 'vitest';
|
import { describe, it, expect } from 'vitest';
|
||||||
import shapeshifter from '../shapeshifter.mjs';
|
import shapeshifter, { wrappedAsync } from '../shapeshifter.mjs';
|
||||||
|
|
||||||
describe('shapeshifter', () => {
|
describe('shapeshifter', () => {
|
||||||
it('Should shift simple double quote string', () => {
|
it('Should shift simple double quote string', () => {
|
||||||
expect(shapeshifter('"c3"')).toEqual('(async()=>{return mini("c3").withMiniLocation([1,0,15],[1,4,19])})()');
|
if (wrappedAsync) {
|
||||||
});
|
expect(shapeshifter('"c3"')).toEqual('(async()=>{return mini("c3").withMiniLocation([1,0,15],[1,4,19])})()');
|
||||||
it('Should handle dynamic imports', () => {
|
} else {
|
||||||
expect(shapeshifter('const { default: foo } = await import(\'https://bar.com/foo.js\');"c3"')).toEqual(
|
expect(shapeshifter('"c3"')).toEqual('return mini("c3").withMiniLocation([1,0,0],[1,4,4])');
|
||||||
'(async()=>{const{default:foo}=await import("https://bar.com/foo.js");return mini("c3").withMiniLocation([1,64,79],[1,68,83])})()',
|
}
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
if (wrappedAsync) {
|
||||||
|
it('Should handle dynamic imports', () => {
|
||||||
|
expect(shapeshifter('const { default: foo } = await import(\'https://bar.com/foo.js\');"c3"')).toEqual(
|
||||||
|
'const{default:foo}=await import("https://bar.com/foo.js");return mini("c3").withMiniLocation([1,64,79],[1,68,83])',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
// import { Scheduler } from '@strudel.cycles/core';
|
|
||||||
import { useRef, useCallback, useEffect, useMemo, useState } from 'react';
|
import { useRef, useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import shapeshifter from '@strudel.cycles/eval/shapeshifter.mjs';
|
|
||||||
import { repl } from '@strudel.cycles/core/repl.mjs';
|
import { repl } from '@strudel.cycles/core/repl.mjs';
|
||||||
|
import { transpiler } from '@strudel.cycles/transpiler';
|
||||||
|
|
||||||
function useStrudel({ defaultOutput, interval, getTime, code, evalOnMount = false }) {
|
function useStrudel({ defaultOutput, interval, getTime, code, evalOnMount = false }) {
|
||||||
// scheduler
|
// scheduler
|
||||||
@ -18,7 +17,7 @@ function useStrudel({ defaultOutput, interval, getTime, code, evalOnMount = fals
|
|||||||
onSchedulerError: setSchedulerError,
|
onSchedulerError: setSchedulerError,
|
||||||
onEvalError: setEvalError,
|
onEvalError: setEvalError,
|
||||||
getTime,
|
getTime,
|
||||||
transpiler: shapeshifter,
|
transpiler,
|
||||||
onEval: ({ pattern: _pattern, code }) => {
|
onEval: ({ pattern: _pattern, code }) => {
|
||||||
setActiveCode(code);
|
setActiveCode(code);
|
||||||
setPattern(_pattern);
|
setPattern(_pattern);
|
||||||
|
|||||||
27
packages/transpiler/README.md
Normal file
27
packages/transpiler/README.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# @strudel.cycles/transpiler
|
||||||
|
|
||||||
|
This package contains a JS code transpiler with the following features:
|
||||||
|
|
||||||
|
- add locations of mini notation strings (double quoted or backticked) for highlighting
|
||||||
|
- converts pseudo note variables to note strings
|
||||||
|
- adds return statement to the last expression
|
||||||
|
|
||||||
|
The transpiler is written with [acorn](https://github.com/acornjs/acorn) and aims to replace the `@strudel.cycles/eval` package, which uses [shift-ast](https://www.npmjs.com/package/shift-ast).
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm i @strudel.cycles/transpiler
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { transpiler } from '@strudel.cycles/core';
|
||||||
|
import { evaluate } from '@strudel.cycles/core';
|
||||||
|
|
||||||
|
transpiler('note("c3 [e3,g3]")', { wrapAsync: false, addReturn: false, simpleLocs: true });
|
||||||
|
/* mini('c3 [e3,g3]').withMiniLocation(7,17) */
|
||||||
|
|
||||||
|
evaluate(note('c3 [e3,g3]'), transpiler); // returns pattern of above code
|
||||||
|
```
|
||||||
5
packages/transpiler/index.mjs
Normal file
5
packages/transpiler/index.mjs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import { evaluate as _evaluate } from '@strudel.cycles/core';
|
||||||
|
import { transpiler } from './transpiler.mjs';
|
||||||
|
export * from './transpiler.mjs';
|
||||||
|
|
||||||
|
export const evaluate = (code) => _evaluate(code, transpiler);
|
||||||
32
packages/transpiler/package.json
Normal file
32
packages/transpiler/package.json
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "@strudel.cycles/transpiler",
|
||||||
|
"version": "0.3.1",
|
||||||
|
"description": "Transpiler for strudel user code. Converts syntactically correct but semantically meaningless JS into evaluatable strudel code.",
|
||||||
|
"main": "index.mjs",
|
||||||
|
"scripts": {
|
||||||
|
"test": "vitest run"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/tidalcycles/strudel.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"tidalcycles",
|
||||||
|
"strudel",
|
||||||
|
"pattern",
|
||||||
|
"livecoding",
|
||||||
|
"algorave"
|
||||||
|
],
|
||||||
|
"author": "Felix Roos <flix91@gmail.com>",
|
||||||
|
"license": "AGPL-3.0-or-later",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/tidalcycles/strudel/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/tidalcycles/strudel#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"@strudel.cycles/core": "^0.3.1",
|
||||||
|
"acorn": "^8.8.1",
|
||||||
|
"escodegen": "^2.0.0",
|
||||||
|
"estree-walker": "^3.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
39
packages/transpiler/test/transpiler.test.mjs
Normal file
39
packages/transpiler/test/transpiler.test.mjs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
transpiler.test.mjs - <short description TODO>
|
||||||
|
Copyright (C) 2022 Strudel contributors - see <https://github.com/tidalcycles/strudel/blob/main/packages/transpiler/test/transpiler.test.mjs>
|
||||||
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { describe, it, expect } from 'vitest';
|
||||||
|
import { transpiler } from '../transpiler.mjs';
|
||||||
|
|
||||||
|
const simple = { wrapAsync: false, addReturn: false, simpleLocs: true };
|
||||||
|
|
||||||
|
describe('transpiler', () => {
|
||||||
|
it('wraps double quote string with mini and adds location', () => {
|
||||||
|
expect(transpiler('"c3"', simple)).toEqual("mini('c3').withMiniLocation(0, 4);");
|
||||||
|
expect(transpiler('stack("c3","bd sd")', simple)).toEqual(
|
||||||
|
"stack(mini('c3').withMiniLocation(6, 10), mini('bd sd').withMiniLocation(11, 18));",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('wraps backtick string with mini and adds location', () => {
|
||||||
|
expect(transpiler('`c3`', simple)).toEqual("mini('c3').withMiniLocation(0, 4);");
|
||||||
|
});
|
||||||
|
it('replaces note variables with note strings', () => {
|
||||||
|
expect(transpiler('seq(c3, d3)', simple)).toEqual("seq('c3', 'd3');");
|
||||||
|
});
|
||||||
|
it('keeps tagged template literal as is', () => {
|
||||||
|
expect(transpiler('xxx`c3`', simple)).toEqual('xxx`c3`;');
|
||||||
|
});
|
||||||
|
it('supports top level await', () => {
|
||||||
|
expect(transpiler("await samples('xxx');", simple)).toEqual("await samples('xxx');");
|
||||||
|
});
|
||||||
|
/* it('parses dynamic imports', () => {
|
||||||
|
expect(
|
||||||
|
transpiler("const { default: foo } = await import('https://bar.com/foo.js');", {
|
||||||
|
wrapAsync: false,
|
||||||
|
addReturn: false,
|
||||||
|
}),
|
||||||
|
).toEqual("const {default: foo} = await import('https://bar.com/foo.js');");
|
||||||
|
}); */
|
||||||
|
});
|
||||||
129
packages/transpiler/transpiler.mjs
Normal file
129
packages/transpiler/transpiler.mjs
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
import escodegen from 'escodegen';
|
||||||
|
import { parse } from 'acorn';
|
||||||
|
import { walk } from 'estree-walker';
|
||||||
|
import { isNote } from '@strudel.cycles/core';
|
||||||
|
|
||||||
|
export function transpiler(input, options = {}) {
|
||||||
|
const { wrapAsync = false, addReturn = true, simpleLocs = false } = options;
|
||||||
|
|
||||||
|
let ast = parse(input, {
|
||||||
|
ecmaVersion: 2022,
|
||||||
|
allowAwaitOutsideFunction: true,
|
||||||
|
locations: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
walk(ast, {
|
||||||
|
enter(node, parent, prop, index) {
|
||||||
|
if (isBackTickString(node, parent)) {
|
||||||
|
const { quasis, start, end } = node;
|
||||||
|
const { raw } = quasis[0].value;
|
||||||
|
this.skip();
|
||||||
|
return this.replace(miniWithLocation(raw, node, simpleLocs));
|
||||||
|
}
|
||||||
|
if (isStringWithDoubleQuotes(node)) {
|
||||||
|
const { value, start, end } = node;
|
||||||
|
this.skip();
|
||||||
|
return this.replace(miniWithLocation(value, node, simpleLocs));
|
||||||
|
}
|
||||||
|
if (node.type === 'Identifier' && isNote(node.name)) {
|
||||||
|
this.skip();
|
||||||
|
return this.replace({ type: 'Literal', value: node.name });
|
||||||
|
}
|
||||||
|
// TODO:
|
||||||
|
},
|
||||||
|
leave(node, parent, prop, index) {},
|
||||||
|
});
|
||||||
|
|
||||||
|
const { body } = ast;
|
||||||
|
if (!body?.[body.length - 1]?.expression) {
|
||||||
|
throw new Error('unexpected ast format without body expression');
|
||||||
|
}
|
||||||
|
|
||||||
|
// add return to last statement
|
||||||
|
if (addReturn) {
|
||||||
|
const { expression } = body[body.length - 1];
|
||||||
|
body[body.length - 1] = {
|
||||||
|
type: 'ReturnStatement',
|
||||||
|
argument: expression,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const output = escodegen.generate(ast);
|
||||||
|
if (wrapAsync) {
|
||||||
|
return `(async ()=>{${output}})()`;
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isStringWithDoubleQuotes(node, locations, code) {
|
||||||
|
const { raw, type } = node;
|
||||||
|
if (type !== 'Literal') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return raw[0] === '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
function isBackTickString(node, parent) {
|
||||||
|
return node.type === 'TemplateLiteral' && parent.type !== 'TaggedTemplateExpression';
|
||||||
|
}
|
||||||
|
|
||||||
|
function miniWithLocation(value, node, simpleLocs) {
|
||||||
|
let locs;
|
||||||
|
const { start: fromOffset, end: toOffset } = node;
|
||||||
|
if (simpleLocs) {
|
||||||
|
locs = [
|
||||||
|
{
|
||||||
|
type: 'Literal',
|
||||||
|
value: fromOffset,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'Literal',
|
||||||
|
value: toOffset,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
const {
|
||||||
|
loc: {
|
||||||
|
start: { line: fromLine, column: fromColumn },
|
||||||
|
end: { line: toLine, column: toColumn },
|
||||||
|
},
|
||||||
|
} = node;
|
||||||
|
locs = [
|
||||||
|
{
|
||||||
|
type: 'ArrayExpression',
|
||||||
|
elements: [fromLine, fromColumn, fromOffset].map((value) => ({
|
||||||
|
type: 'Literal',
|
||||||
|
value,
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'ArrayExpression',
|
||||||
|
elements: [toLine, toColumn, toOffset].map((value) => ({
|
||||||
|
type: 'Literal',
|
||||||
|
value,
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// with location
|
||||||
|
return {
|
||||||
|
type: 'CallExpression',
|
||||||
|
callee: {
|
||||||
|
type: 'MemberExpression',
|
||||||
|
object: {
|
||||||
|
type: 'CallExpression',
|
||||||
|
callee: {
|
||||||
|
type: 'Identifier',
|
||||||
|
name: 'mini',
|
||||||
|
},
|
||||||
|
arguments: [{ type: 'Literal', value }],
|
||||||
|
optional: false,
|
||||||
|
},
|
||||||
|
property: {
|
||||||
|
type: 'Identifier',
|
||||||
|
name: 'withMiniLocation',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
arguments: locs,
|
||||||
|
optional: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
// import * as tunes from './tunes.mjs';
|
// import * as tunes from './tunes.mjs';
|
||||||
import { evaluate } from '@strudel.cycles/eval';
|
import { evaluate } from '@strudel.cycles/eval';
|
||||||
|
// import { evaluate } from '@strudel.cycles/transpiler';
|
||||||
import { evalScope } from '@strudel.cycles/core';
|
import { evalScope } from '@strudel.cycles/core';
|
||||||
import * as strudel from '@strudel.cycles/core';
|
import * as strudel from '@strudel.cycles/core';
|
||||||
import * as webaudio from '@strudel.cycles/webaudio';
|
import * as webaudio from '@strudel.cycles/webaudio';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user