diff --git a/index.mjs b/index.mjs new file mode 100644 index 00000000..79729e91 --- /dev/null +++ b/index.mjs @@ -0,0 +1,17 @@ +// this barrel export is currently only used to find undocumented exports +export * from './packages/core/index.mjs'; +export * from './packages/csound/index.mjs'; +export * from './packages/embed/index.mjs'; +export * from './packages/eval/index.mjs'; +export * from './packages/midi/index.mjs'; +export * from './packages/mini/index.mjs'; +export * from './packages/osc/index.mjs'; +export * from './packages/react/index.mjs'; +export * from './packages/serial/index.mjs'; +export * from './packages/soundfonts/index.mjs'; +export * from './packages/tonal/index.mjs'; +export * from './packages/tone/index.mjs'; +export * from './packages/transpiler/index.mjs'; +export * from './packages/webaudio/index.mjs'; +export * from './packages/webdirt/index.mjs'; +export * from './packages/xen/index.mjs'; diff --git a/package-lock.json b/package-lock.json index 0fde8fcb..78671f8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@vitest/ui": "^0.25.7", "c8": "^7.12.0", "canvas": "^2.11.0", + "dependency-tree": "^9.0.0", "eslint": "^8.28.0", "events": "^3.3.0", "gh-pages": "^4.0.0", @@ -2387,6 +2388,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/linkify-it": { "version": "3.0.2", "dev": true, @@ -2470,6 +2477,63 @@ "version": "2.0.6", "license": "MIT" }, + "node_modules/@typescript-eslint/types": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", + "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", + "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", + "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@uiw/codemirror-extensions-basic-setup": { "version": "4.12.4", "license": "MIT", @@ -2713,6 +2777,12 @@ "node": ">= 8" } }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true + }, "node_modules/aproba": { "version": "2.0.0", "dev": true, @@ -2828,6 +2898,15 @@ "node": "*" } }, + "node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/async": { "version": "2.6.4", "dev": true, @@ -2949,10 +3028,6 @@ "node": ">=8" } }, - "node_modules/bjork": { - "version": "0.0.1", - "license": "MIT" - }, "node_modules/bl": { "version": "4.1.0", "dev": true, @@ -4035,8 +4110,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "license": "MIT", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -4210,6 +4286,25 @@ "node": ">= 0.6" } }, + "node_modules/dependency-tree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", + "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", + "dev": true, + "dependencies": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.1", + "precinct": "^9.0.0", + "typescript": "^4.0.0" + }, + "bin": { + "dependency-tree": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" + } + }, "node_modules/deprecation": { "version": "2.3.1", "dev": true, @@ -4250,6 +4345,199 @@ "node": ">=0.8.0" } }, + "node_modules/detective-amd": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.0.1.tgz", + "integrity": "sha512-bDo22IYbJ8yzALB0Ow5CQLtyhU1BpDksLB9dsWHI9Eh0N3OQR6aQqhjPsNDd69ncYwRfL1sTo7OA9T3VRVSe2Q==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^4.0.0", + "node-source-walk": "^5.0.0" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-amd/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-cjs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.0.0.tgz", + "integrity": "sha512-VsD6Yo1+1xgxJWoeDRyut7eqZ8EWaJI70C5eanSAPcBHzenHZx0uhjxaaEfIm0cHII7dBiwU98Orh44bwXN2jg==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-cjs/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-es6": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.0.tgz", + "integrity": "sha512-Uv2b5Uih7vorYlqGzCX+nTPUb4CMzUAn3VPHTV5p5lBkAN4cAApLGgUz4mZE2sXlBfv4/LMmeP7qzxHV/ZcfWA==", + "dev": true, + "dependencies": { + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-es6/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/detective-postcss": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.0.tgz", + "integrity": "sha512-ZFZnEmUrL2XHAC0j/4D1fdwZbo/anAcK84soJh7qc7xfx2Kc8gFO5Bk5I9jU7NLC/OAF1Yho1GLxEDnmQnRH2A==", + "dev": true, + "dependencies": { + "is-url": "^1.2.4", + "postcss": "^8.4.12", + "postcss-values-parser": "^6.0.2" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/detective-sass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.0.1.tgz", + "integrity": "sha512-80zfpxux1krOrkxCHbtwvIs2gNHUBScnSqlGl0FvUuHVz8HD6vD2ov66OroMctyvzhM67fxhuEeVjIk18s6yTQ==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-sass/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-scss": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.0.0.tgz", + "integrity": "sha512-37MB/mhJyS45ngqfzd6eTbuLMoDgdZnH03ZOMW2m9WqJ/Rlbuc8kZAr0Ypovaf1DJiTRzy5mmxzOTja85jbzlA==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-scss/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detective-stylus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", + "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" + }, + "engines": { + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + } + }, + "node_modules/detective-typescript/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dezalgo": { "version": "1.0.4", "dev": true, @@ -4402,6 +4690,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "2.1.0", "dev": true, @@ -5122,6 +5423,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/filing-cabinet": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.0.tgz", + "integrity": "sha512-Tnbpbme1ONaHXV5DGcw0OFpcfP3p2itRf5VXO1bguBXdIewDbK6ZFBK//DGKM0BuCzaQLQNY4f5gljzxY1VCUw==", + "dev": true, + "dependencies": { + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.3", + "enhanced-resolve": "^5.8.3", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.1", + "resolve": "^1.21.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "tsconfig-paths": "^3.10.1", + "typescript": "^3.9.7" + }, + "bin": { + "filing-cabinet": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/filing-cabinet/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "dev": true, @@ -5411,6 +5752,31 @@ "node": ">=6.9.0" } }, + "node_modules/get-amd-module-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.0.0.tgz", + "integrity": "sha512-GbBawUCuA2tY8ztiMiVo3e3P95gc2TVrfYFfpUHdHQA8WyxMCckK29bQsVKhYX8SUf+w6JLhL2LG8tSC0ANt9Q==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-amd-module-type/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "dev": true, @@ -5440,6 +5806,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-pkg-repo": { "version": "4.2.1", "dev": true, @@ -5726,6 +6098,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/google-closure-compiler": { "version": "20221102.0.1", "license": "Apache-2.0", @@ -6494,6 +6881,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", + "dev": true + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "dev": true, @@ -6568,6 +6970,24 @@ "dev": true, "license": "MIT" }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "dev": true, @@ -7931,6 +8351,41 @@ "node": ">=0.10.0" } }, + "node_modules/module-definition": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", + "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/mrmime": { "version": "1.0.1", "dev": true, @@ -8232,6 +8687,18 @@ "dev": true, "license": "MIT" }, + "node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, "node_modules/nopt": { "version": "4.0.3", "dev": true, @@ -9298,6 +9765,23 @@ "dev": true, "license": "MIT" }, + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "dev": true, + "dependencies": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" + } + }, "node_modules/prebuild-install": { "version": "6.1.4", "dev": true, @@ -9324,6 +9808,69 @@ "node": ">=6" } }, + "node_modules/precinct": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.0.1.tgz", + "integrity": "sha512-hVNS6JvfvlZ64B3ezKeGAcVhIuOvuAiSVzagHX/+KjVPkYWoCNkfyMgCl1bjDtAFQSlzi95NcS9ykUWrl1L1vA==", + "dev": true, + "dependencies": { + "commander": "^9.1.0", + "detective-amd": "^4.0.1", + "detective-cjs": "^4.0.0", + "detective-es6": "^3.0.0", + "detective-less": "^1.0.2", + "detective-postcss": "^6.0.1", + "detective-sass": "^4.0.1", + "detective-scss": "^3.0.0", + "detective-stylus": "^2.0.0", + "detective-typescript": "^9.0.0", + "module-definition": "^4.0.0", + "node-source-walk": "^5.0.0" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + } + }, + "node_modules/precinct/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/precinct/node_modules/module-definition": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.0.0.tgz", + "integrity": "sha512-wntiAHV4lDn24BQn2kX6LKq0y85phHLHiv3aOPDF+lIs06kVjEMTe/ZTdrbVLnQV5FQsjik21taknvMhKY1Cug==", + "dev": true, + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/precinct/node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "engines": { @@ -9478,6 +10025,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "dev": true + }, "node_modules/rambda": { "version": "7.4.0", "license": "MIT" @@ -9974,6 +10527,32 @@ "node": ">=0.10.0" } }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/requizzle": { "version": "0.2.3", "dev": true, @@ -10008,6 +10587,15 @@ "node": ">=8" } }, + "node_modules/resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/resolve-from": { "version": "5.0.0", "dev": true, @@ -10210,6 +10798,21 @@ "dev": true, "license": "MIT" }, + "node_modules/sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", + "dev": true, + "dependencies": { + "commander": "^2.16.0" + }, + "bin": { + "sass-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "dev": true, @@ -10749,6 +11352,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", @@ -10851,6 +11477,22 @@ "version": "4.0.0", "license": "MIT" }, + "node_modules/stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0" + }, + "bin": { + "stylus-lookup": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "license": "MIT", @@ -10994,6 +11636,15 @@ "node": ">=10.13.0" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.1.12", "dev": true, @@ -11318,10 +11969,64 @@ "node": ">=0.10.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.4.1", "license": "0BSD" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "dev": true, @@ -11380,6 +12085,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/typical": { "version": "2.6.1", "dev": true, @@ -11778,27 +12496,6 @@ "node": ">=0.4.0" } }, - "node_modules/vitest/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "dev": true, @@ -12236,7 +12933,6 @@ "version": "0.5.0", "license": "AGPL-3.0-or-later", "dependencies": { - "bjork": "^0.0.1", "fraction.js": "^4.2.0" } }, @@ -13997,7 +14693,6 @@ "@strudel.cycles/core": { "version": "file:packages/core", "requires": { - "bjork": "^0.0.1", "fraction.js": "^4.2.0" } }, @@ -14383,6 +15078,12 @@ "version": "2.0.4", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/linkify-it": { "version": "3.0.2", "dev": true @@ -14452,6 +15153,37 @@ "@types/webmidi": { "version": "2.0.6" }, + "@typescript-eslint/types": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", + "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", + "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", + "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "@uiw/codemirror-extensions-basic-setup": { "version": "4.12.4", "requires": { @@ -14608,6 +15340,12 @@ "picomatch": "^2.0.4" } }, + "app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true + }, "aproba": { "version": "2.0.0", "dev": true @@ -14681,6 +15419,12 @@ "version": "1.1.0", "dev": true }, + "ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "dev": true + }, "async": { "version": "2.6.4", "dev": true, @@ -14745,9 +15489,6 @@ "version": "2.2.0", "dev": true }, - "bjork": { - "version": "0.0.1" - }, "bl": { "version": "4.1.0", "dev": true, @@ -15486,7 +16227,9 @@ "dev": true }, "debug": { - "version": "4.3.3", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" }, @@ -15590,6 +16333,19 @@ "version": "1.1.2", "dev": true }, + "dependency-tree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", + "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", + "dev": true, + "requires": { + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.1", + "precinct": "^9.0.0", + "typescript": "^4.0.0" + } + }, "deprecation": { "version": "2.3.1", "dev": true @@ -15611,6 +16367,163 @@ "minimist": "^1.2.6" } }, + "detective-amd": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.0.1.tgz", + "integrity": "sha512-bDo22IYbJ8yzALB0Ow5CQLtyhU1BpDksLB9dsWHI9Eh0N3OQR6aQqhjPsNDd69ncYwRfL1sTo7OA9T3VRVSe2Q==", + "dev": true, + "requires": { + "ast-module-types": "^3.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^4.0.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, + "detective-cjs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.0.0.tgz", + "integrity": "sha512-VsD6Yo1+1xgxJWoeDRyut7eqZ8EWaJI70C5eanSAPcBHzenHZx0uhjxaaEfIm0cHII7dBiwU98Orh44bwXN2jg==", + "dev": true, + "requires": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, + "detective-es6": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.0.tgz", + "integrity": "sha512-Uv2b5Uih7vorYlqGzCX+nTPUb4CMzUAn3VPHTV5p5lBkAN4cAApLGgUz4mZE2sXlBfv4/LMmeP7qzxHV/ZcfWA==", + "dev": true, + "requires": { + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, + "detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + } + }, + "detective-postcss": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.0.tgz", + "integrity": "sha512-ZFZnEmUrL2XHAC0j/4D1fdwZbo/anAcK84soJh7qc7xfx2Kc8gFO5Bk5I9jU7NLC/OAF1Yho1GLxEDnmQnRH2A==", + "dev": true, + "requires": { + "is-url": "^1.2.4", + "postcss": "^8.4.12", + "postcss-values-parser": "^6.0.2" + } + }, + "detective-sass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.0.1.tgz", + "integrity": "sha512-80zfpxux1krOrkxCHbtwvIs2gNHUBScnSqlGl0FvUuHVz8HD6vD2ov66OroMctyvzhM67fxhuEeVjIk18s6yTQ==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, + "detective-scss": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.0.0.tgz", + "integrity": "sha512-37MB/mhJyS45ngqfzd6eTbuLMoDgdZnH03ZOMW2m9WqJ/Rlbuc8kZAr0Ypovaf1DJiTRzy5mmxzOTja85jbzlA==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, + "detective-stylus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", + "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", + "dev": true + }, + "detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, "dezalgo": { "version": "1.0.4", "dev": true, @@ -15727,6 +16640,16 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "2.1.0", "dev": true @@ -16164,6 +17087,35 @@ "trim-repeated": "^1.0.0" } }, + "filing-cabinet": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.0.tgz", + "integrity": "sha512-Tnbpbme1ONaHXV5DGcw0OFpcfP3p2itRf5VXO1bguBXdIewDbK6ZFBK//DGKM0BuCzaQLQNY4f5gljzxY1VCUw==", + "dev": true, + "requires": { + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.3", + "enhanced-resolve": "^5.8.3", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.1", + "resolve": "^1.21.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "tsconfig-paths": "^3.10.1", + "typescript": "^3.9.7" + }, + "dependencies": { + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + } + } + }, "fill-range": { "version": "7.0.1", "dev": true, @@ -16349,6 +17301,27 @@ "version": "1.0.0-beta.2", "dev": true }, + "get-amd-module-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.0.0.tgz", + "integrity": "sha512-GbBawUCuA2tY8ztiMiVo3e3P95gc2TVrfYFfpUHdHQA8WyxMCckK29bQsVKhYX8SUf+w6JLhL2LG8tSC0ANt9Q==", + "dev": true, + "requires": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, "get-caller-file": { "version": "2.0.5", "dev": true @@ -16366,6 +17339,12 @@ "has-symbols": "^1.0.3" } }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "get-pkg-repo": { "version": "4.2.1", "dev": true, @@ -16555,6 +17534,15 @@ "slash": "^3.0.0" } }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "google-closure-compiler": { "version": "20221102.0.1", "requires": { @@ -17029,6 +18017,18 @@ "has-tostringtag": "^1.0.0" } }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true + }, + "is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "dev": true, @@ -17072,6 +18072,18 @@ "version": "1.0.0", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "dev": true, @@ -17996,6 +19008,29 @@ "version": "1.0.1", "dev": true }, + "module-definition": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", + "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", + "dev": true, + "requires": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + } + }, + "module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", + "dev": true, + "requires": { + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + } + }, "mrmime": { "version": "1.0.1", "dev": true @@ -18192,6 +19227,15 @@ "version": "2.0.6", "dev": true }, + "node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + }, "nopt": { "version": "4.0.3", "dev": true, @@ -18853,6 +19897,17 @@ "version": "4.2.0", "dev": true }, + "postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "dev": true, + "requires": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + } + }, "prebuild-install": { "version": "6.1.4", "dev": true, @@ -18872,6 +19927,53 @@ "tunnel-agent": "^0.6.0" } }, + "precinct": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.0.1.tgz", + "integrity": "sha512-hVNS6JvfvlZ64B3ezKeGAcVhIuOvuAiSVzagHX/+KjVPkYWoCNkfyMgCl1bjDtAFQSlzi95NcS9ykUWrl1L1vA==", + "dev": true, + "requires": { + "commander": "^9.1.0", + "detective-amd": "^4.0.1", + "detective-cjs": "^4.0.0", + "detective-es6": "^3.0.0", + "detective-less": "^1.0.2", + "detective-postcss": "^6.0.1", + "detective-sass": "^4.0.1", + "detective-scss": "^3.0.0", + "detective-stylus": "^2.0.0", + "detective-typescript": "^9.0.0", + "module-definition": "^4.0.0", + "node-source-walk": "^5.0.0" + }, + "dependencies": { + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true + }, + "module-definition": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.0.0.tgz", + "integrity": "sha512-wntiAHV4lDn24BQn2kX6LKq0y85phHLHiv3aOPDF+lIs06kVjEMTe/ZTdrbVLnQV5FQsjik21taknvMhKY1Cug==", + "dev": true, + "requires": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0" + } + }, + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dev": true, + "requires": { + "@babel/parser": "^7.0.0" + } + } + } + }, "prelude-ls": { "version": "1.1.2" }, @@ -18960,6 +20062,12 @@ "version": "5.1.1", "dev": true }, + "quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "dev": true + }, "rambda": { "version": "7.4.0" }, @@ -19354,6 +20462,22 @@ "version": "2.1.1", "dev": true }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", + "dev": true, + "requires": { + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" + } + }, "requizzle": { "version": "0.2.3", "dev": true, @@ -19376,6 +20500,12 @@ "resolve-from": "^5.0.0" } }, + "resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "dev": true @@ -19480,6 +20610,15 @@ "version": "2.1.2", "dev": true }, + "sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", + "dev": true, + "requires": { + "commander": "^2.16.0" + } + }, "saxes": { "version": "6.0.0", "dev": true, @@ -19850,6 +20989,25 @@ "es-abstract": "^1.19.5" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true + } + } + }, "strip-ansi": { "version": "6.0.1", "requires": { @@ -19910,6 +21068,16 @@ "style-mod": { "version": "4.0.0" }, + "stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "requires": { + "commander": "^2.8.1", + "debug": "^4.1.0" + } + }, "supports-color": { "version": "7.2.0", "requires": { @@ -20015,6 +21183,12 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "tar": { "version": "6.1.12", "dev": true, @@ -20254,9 +21428,55 @@ "escape-string-regexp": "^1.0.2" } }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, "tslib": { "version": "2.4.1" }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tunnel-agent": { "version": "0.6.0", "dev": true, @@ -20293,6 +21513,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, "typical": { "version": "2.6.1", "dev": true @@ -20511,17 +21737,6 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true } } }, diff --git a/package.json b/package.json index 770fcdbd..877ccf56 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "lint": "eslint . --ext mjs,js --quiet", "codeformat": "prettier --write .", "format-check": "prettier --check .", + "report-undocumented": "node undocumented.mjs > undocumented.json", "check": "npm run format-check && npm run lint && npm run test", "iclc": "cd paper && pandoc --template=pandoc/iclc.html --citeproc --number-sections iclc2023.md -o iclc2023.html && pandoc --template=pandoc/iclc.latex --citeproc --number-sections iclc2023.md -o iclc2023.pdf" }, @@ -49,6 +50,7 @@ "@vitest/ui": "^0.25.7", "c8": "^7.12.0", "canvas": "^2.11.0", + "dependency-tree": "^9.0.0", "eslint": "^8.28.0", "events": "^3.3.0", "gh-pages": "^4.0.0", diff --git a/packages/core/cyclist.mjs b/packages/core/cyclist.mjs index 59755a44..9b522f05 100644 --- a/packages/core/cyclist.mjs +++ b/packages/core/cyclist.mjs @@ -8,13 +8,10 @@ import createClock from './zyklus.mjs'; import { logger } from './logger.mjs'; export class Cyclist { - worker; - pattern; - started = false; - cps = 1; // TODO - getTime; - phase = 0; constructor({ interval, onTrigger, onToggle, onError, getTime, latency = 0.1 }) { + this.started = false; + this.cps = 1; // TODO + this.phase = 0; this.getTime = getTime; this.onToggle = onToggle; this.latency = latency; diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index d3fc7b4d..3052a805 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -23,7 +23,6 @@ export const setStringParser = (parser) => (stringParser = parser); /** @class Class representing a 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 /** * Create a pattern. As an end user, you will most likely not create a Pattern directly. * @@ -31,6 +30,7 @@ export class Pattern { */ constructor(query) { this.query = query; + this._Pattern = true; // this property is used to detect if a pattern that fails instanceof Pattern is an instance of another Pattern } ////////////////////////////////////////////////////////////////////// @@ -39,8 +39,11 @@ export class Pattern { /** * Returns a new pattern, with the function applied to the value of * each hap. It has the alias {@link Pattern#fmap}. - * @param {Function} func + * @synonyms fmap + * @param {Function} func to to apply to the value * @returns Pattern + * @example + * "0 1 2".withValue(v => v + 10).log() */ withValue(func) { return new Pattern((state) => this.query(state).map((hap) => hap.withValue(func))); @@ -53,10 +56,15 @@ export class Pattern { return this.withValue(func); } + /** + * Assumes 'this' is a pattern of functions, and given a function to + * resolve wholes, applies a given pattern of values to that + * pattern of functions. + * @param {Function} whole_func + * @param {Function} func + * @returns Pattern + */ appWhole(whole_func, pat_val) { - // Assumes 'this' is a pattern of functions, and given a function to - // resolve wholes, applies a given pattern of values to that - // pattern of functions. const pat_func = this; const query = function (state) { const hap_funcs = pat_func.query(state); @@ -679,6 +687,7 @@ export class Pattern { * Layers the result of the given function(s). Like {@link Pattern.superimpose}, but without the original pattern: * @name layer * @memberof Pattern + * @synonyms apply * @returns Pattern * @example * "<0 2 4 6 ~ 4 ~ 2 0!3 ~!5>*4" @@ -724,9 +733,10 @@ export class Pattern { } /** - * Appends the given pattern(s) to the current pattern. Synonyms: .sequence .fastcat + * Appends the given pattern(s) to the current pattern. * @name seq * @memberof Pattern + * @synonyms sequence, fastcat * @example * s("hh*2").seq( * note("c2(3,8)") @@ -737,9 +747,10 @@ export class Pattern { } /** - * Appends the given pattern(s) to the next cycle. Synonym: .slowcat + * Appends the given pattern(s) to the next cycle. * @name cat * @memberof Pattern + * @synonyms slowcat * @example * s("hh*2").cat( * note("c2(3,8)") @@ -822,15 +833,25 @@ Pattern.prototype.collect = function () { ); }; -// applies func to each array of congruent haps +/** + * Selects indices in in stacked notes. + * @example + * note("<[c,eb,g]!2 [c,f,ab] [d,f,ab]>") + * .arpWith(haps => haps[2]) + * */ Pattern.prototype.arpWith = function (func) { return this.collect() .fmap((v) => reify(func(v))) - .squeezeJoin() + .innerJoin() .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 +/** + * Selects indices in in stacked notes. + * @example + * note("<[c,eb,g]!2 [c,f,ab] [d,f,ab]>") + * .arp("0 [0,2] 1 [0,2]").slow(2) + * */ Pattern.prototype.arp = function (pat) { return this.arpWith((haps) => pat.fmap((i) => haps[i % haps.length])); }; @@ -990,9 +1011,6 @@ function _composeOp(a, b, func) { /** * Applies the given structure to the pattern: * - * @name struct - * @memberof Pattern - * @returns Pattern * @example * note("c3,eb3,g3") * .struct("x ~ x ~ ~ x ~ x ~ ~ ~ x ~ x ~ ~") @@ -1004,18 +1022,37 @@ function _composeOp(a, b, func) { Pattern.prototype.structAll = function (...args) { return this.keep.out(...args); }; + /** + * Returns silence when mask is 0 or "~" + * + * @example + * note("c [eb,g] d [eb,g]").mask("<1 [0 1]>").slow(2) + */ Pattern.prototype.mask = function (...args) { return this.keepif.in(...args); }; Pattern.prototype.maskAll = function (...args) { return this.keep.in(...args); }; + /** + * Resets the pattern to the start of the cycle for each onset of the reset pattern. + * + * @example + * s(" sd, hh*4").reset("") + */ Pattern.prototype.reset = function (...args) { return this.keepif.trig(...args); }; Pattern.prototype.resetAll = function (...args) { return this.keep.trig(...args); }; + /** + * Restarts the pattern for each onset of the restart pattern. + * While reset will only reset the current cycle, restart will start from cycle 0. + * + * @example + * s(" sd, hh*4").restart("") + */ Pattern.prototype.restart = function (...args) { return this.keepif.trigzero(...args); }; @@ -1029,6 +1066,7 @@ export const polyrhythm = stack; export const pr = stack; // methods that create patterns, which are added to patternified Pattern methods +// TODO: remove? this is only used in old transpiler (shapeshifter) Pattern.prototype.factories = { pure, stack, @@ -1098,6 +1136,7 @@ export function reify(thing) { /** The given items are played at the same time at the same length. * * @return {Pattern} + * @synonyms polyrhythm, pr * @example * stack(g3, b3, [e4, d4]).note() // "g3,b3,[e4,d4]".note() */ @@ -1152,24 +1191,10 @@ export function slowcatPrime(...pats) { return new Pattern(query).splitQueries(); } -/** Concatenation: as with {@link slowcat}, but squashes a cycle from each pattern into one cycle - * - * Synonyms: {@link Pattern.seq}, {@link Pattern.sequence} - * - * @param {...any} items - The items to concatenate - * @return {Pattern} - * @example - * fastcat(e5, b4, [d5, c5]) - * // sequence(e5, b4, [d5, c5]) - * // seq(e5, b4, [d5, c5]) - */ -export function fastcat(...pats) { - return slowcat(...pats)._fast(pats.length); -} - -/** The given items are con**cat**enated, where each one takes one cycle. Synonym: slowcat +/** The given items are con**cat**enated, where each one takes one cycle. * * @param {...any} items - The items to concatenate + * @synonyms slowcat * @return {Pattern} * @example * cat(e5, b4, [d5, c5]).note() // "".note() @@ -1196,12 +1221,17 @@ export function timeCat(...timepats) { return stack(...pats); } +export function fastcat(...pats) { + return slowcat(...pats)._fast(pats.length); +} + /** See {@link fastcat} */ export function sequence(...pats) { return fastcat(...pats); } -/** Like **cat**, but the items are crammed into one cycle. Synonyms: fastcat, sequence +/** Like **cat**, but the items are crammed into one cycle. + * @synonyms fastcat, sequence * @example * seq(e5, b4, [d5, c5]).note() // "e5 b4 [d5 c5]".note() * @@ -1257,7 +1287,7 @@ export function polymeterSteps(steps, ...args) { /** * Combines the given lists of patterns with the same pulse. This will create so called polymeters when different sized sequences are used. - * @name polymeter + * @synonyms pm * @example * polymeter(["c", "eb", "g"], ["c2", "g2"]).note() * // "{c eb g, c2 g2}".note() @@ -1435,23 +1465,27 @@ export const range = register('range', function (min, max, pat) { }); /** - * Assumes a numerical pattern, containing unipolar values in the range 0 .. - * 1. Returns a new pattern with values scaled to the given min/max range, + * Assumes a numerical pattern, containing unipolar values in the range 0 .. 1 + * Returns a new pattern with values scaled to the given min/max range, * following an exponential curve. - * @param {Number} min - * @param {Number} max + * @name rangex + * @memberof Pattern * @returns Pattern + * @example + * s("bd sd,hh*4").cutoff(sine.rangex(500,2000).slow(4)) */ export const rangex = register('rangex', function (min, max, pat) { return pat._range(Math.log(min), Math.log(max)).fmap(Math.exp); }); /** - * Assumes a numerical pattern, containing bipolar values in the range -1 .. - * 1. Returns a new pattern with values scaled to the given min/max range. - * @param {Number} min - * @param {Number} max + * Assumes a numerical pattern, containing bipolar values in the range -1 .. 1 + * Returns a new pattern with values scaled to the given min/max range. + * @name range2 + * @memberof Pattern * @returns Pattern + * @example + * s("bd sd,hh*4").cutoff(sine2.range2(500,2000).slow(4)) */ export const range2 = register('range2', function (min, max, pat) { return pat.fromBipolar()._range(min, max); @@ -1460,8 +1494,16 @@ export const range2 = register('range2', function (min, max, pat) { ////////////////////////////////////////////////////////////////////// // Structural and temporal transformations -// Compress each cycle into the given timespan, leaving a gap +/** Compress each cycle into the given timespan, leaving a gap + * @example + * cat( + * s("bd sd").compress(.25,.75), + * s("~ bd sd ~") + * ) + */ export const compress = register('compress', function (b, e, pat) { + b = Fraction(b); + e = Fraction(e); if (b.gt(e) || b.gt(1) || e.gt(1) || b.lt(0) || e.lt(0)) { return silence; } @@ -1472,6 +1514,13 @@ export const { compressSpan, compressspan } = register(['compressSpan', 'compres return pat._compress(span.begin, span.end); }); +/** + * speeds up a pattern like fast, but rather than it playing multiple times as fast would it instead leaves a gap in the remaining space of the cycle. For example, the following will play the sound pattern "bd sn" only once but compressed into the first half of the cycle, i.e. twice as fast. + * @name fastGap + * @synonyms fastgap + * @example + * s("bd sd").fastGap(2) + */ export const { fastGap, fastgap } = register(['fastGap', 'fastgap'], function (factor, pat) { // A bit fiddly, to drop zero-width queries at the start of the next cycle const qf = function (span) { @@ -1502,10 +1551,14 @@ export const { fastGap, fastgap } = register(['fastGap', 'fastgap'], function (f return pat.withQuerySpanMaybe(qf).withHap(ef).splitQueries(); }); -// Similar to compress, but doesn't leave gaps, and the 'focus' can be -// bigger than a cycle - +/** + * Similar to compress, but doesn't leave gaps, and the 'focus' can be bigger than a cycle + * @example + * s("bd hh sd hh").focus(1/4, 3/4) + */ export const focus = register('focus', function (b, e, pat) { + b = Fraction(b); + e = Fraction(e); return pat._fast(Fraction(1).div(e.sub(b))).late(b.cyclePos()); }); @@ -1513,6 +1566,10 @@ export const { focusSpan, focusspan } = register(['focusSpan', 'focusspan'], fun return pat._focus(span.begin, span.end); }); +/** The ply function repeats each event the given number of times. + * @example + * s("bd ~ sd cp").ply("<1 2 3>") + */ export const ply = register('ply', function (factor, pat) { return pat.fmap((x) => pure(x)._fast(factor)).squeezeJoin(); }); @@ -1521,6 +1578,7 @@ export const ply = register('ply', function (factor, pat) { * Speed up a pattern by the given factor. Used by "*" in mini notation. * * @name fast + * @synonyms density * @memberof Pattern * @param {number | Pattern} factor speed up factor * @returns Pattern @@ -1537,6 +1595,7 @@ export const { fast, density } = register(['fast', 'density'], function (factor, * Slow down a pattern over the given number of cycles. Like the "/" operator in mini notation. * * @name slow + * @synonyms sparsity * @memberof Pattern * @param {number | Pattern} factor slow down factor * @returns Pattern @@ -1547,12 +1606,22 @@ export const { slow, sparsity } = register(['slow', 'sparsity'], function (facto return pat._fast(Fraction(1).div(factor)); }); -// Should these really be in alphabetical order? a shame to split -// fast/slow, inside/outside.. +/** + * Carries out an operation 'inside' a cycle. + * @example + * "0 1 2 3 4 3 2 1".inside(4, rev).scale('C major').note() + * // "0 1 2 3 4 3 2 1".slow(4).rev().fast(4).scale('C major').note() + */ export const inside = register('inside', function (factor, f, pat) { return f(pat._slow(factor))._fast(factor); }); +/** + * Carries out an operation 'outside' a cycle. + * @example + * "<[0 1] 2 [3 4] 5>".outside(4, rev).scale('C major').note() + * // "<[0 1] 2 [3 4] 5>".fast(4).rev().slow(4).scale('C major').note() + */ export const outside = register('outside', function (factor, f, pat) { return f(pat._fast(factor))._slow(factor); }); @@ -1607,11 +1676,16 @@ export const { firstOf, every } = register(['firstOf', 'every'], function (n, fu * @example * "".scale('C minor').apply(scaleTranspose("0,2,4")).note() */ +// TODO: remove or dedupe with layer? export const apply = register('apply', function (func, pat) { return func(pat); }); -// cpm = cycles per minute +/** + * Plays the pattern at the given cycles per minute. + * @example + * s(",hh*2").cpm(90) // = 90 bpm + */ // TODO - global clock export const cpm = register('cpm', function (cpm, pat) { return pat._fast(cpm / 60); @@ -1647,6 +1721,13 @@ export const late = register('late', function (offset, pat) { return pat._early(Fraction(0).sub(offset)); }); +/** + * Plays a portion of a pattern, specified by the beginning and end of a time span. The new resulting pattern is played over the time period of the original pattern: + * + * @example + * s("bd*2 hh*3 [sd bd]*2 perc").zoom(0.25, 0.75) + * // s("hh*3 [sd bd]*2") // equivalent + */ export const zoom = register('zoom', function (s, e, pat) { e = Fraction(e); s = Fraction(s); diff --git a/packages/webaudio/sampler.mjs b/packages/webaudio/sampler.mjs index 7b437ae3..f94b6b5a 100644 --- a/packages/webaudio/sampler.mjs +++ b/packages/webaudio/sampler.mjs @@ -124,7 +124,8 @@ let sampleCache = { current: undefined }; export const samples = async (sampleMap, baseUrl = sampleMap._base || '') => { if (typeof sampleMap === 'string') { if (sampleMap.startsWith('github:')) { - const [_, path] = sampleMap.split('github:'); + let [_, path] = sampleMap.split('github:'); + path = path.endsWith('/') ? path.slice(0, -1) : path; sampleMap = `https://raw.githubusercontent.com/${path}/strudel.json`; } if (typeof fetch !== 'function') { diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 7945ba1b..c43b881e 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -822,6 +822,32 @@ exports[`runs examples > example "apply" example index 0 1`] = ` ] `; +exports[`runs examples > example "arp" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | note:c ]", + "[ 1/2 → 1/1 | note:c ]", + "[ 1/2 → 1/1 | note:g ]", + "[ 1/1 → 3/2 | note:eb ]", + "[ 3/2 → 2/1 | note:c ]", + "[ 3/2 → 2/1 | note:g ]", + "[ 2/1 → 5/2 | note:c ]", + "[ 5/2 → 3/1 | note:c ]", + "[ 5/2 → 3/1 | note:g ]", + "[ 3/1 → 7/2 | note:eb ]", + "[ 7/2 → 4/1 | note:c ]", + "[ 7/2 → 4/1 | note:g ]", +] +`; + +exports[`runs examples > example "arpWith" example index 0 1`] = ` +[ + "[ 0/1 → 1/1 | note:g ]", + "[ 1/1 → 2/1 | note:g ]", + "[ 2/1 → 3/1 | note:ab ]", + "[ 3/1 → 4/1 | note:ab ]", +] +`; + exports[`runs examples > example "attack" example index 0 1`] = ` [ "[ 0/1 → 1/2 | note:c3 attack:0 ]", @@ -1063,6 +1089,19 @@ exports[`runs examples > example "coarse" example index 0 1`] = ` ] `; +exports[`runs examples > example "compress" example index 0 1`] = ` +[ + "[ 1/4 → 1/2 | s:bd ]", + "[ 1/2 → 3/4 | s:sd ]", + "[ 5/4 → 3/2 | s:bd ]", + "[ 3/2 → 7/4 | s:sd ]", + "[ 9/4 → 5/2 | s:bd ]", + "[ 5/2 → 11/4 | s:sd ]", + "[ 13/4 → 7/2 | s:bd ]", + "[ 7/2 → 15/4 | s:sd ]", +] +`; + exports[`runs examples > example "cosine" example index 0 1`] = ` [ "[ 0/1 → 1/8 | note:Eb4 ]", @@ -1132,6 +1171,31 @@ exports[`runs examples > example "cosine" example index 0 1`] = ` ] `; +exports[`runs examples > example "cpm" example index 0 1`] = ` +[ + "[ 0/1 → 2/3 | s:bd ]", + "[ 0/1 → 1/3 | s:hh ]", + "[ 1/3 → 2/3 | s:hh ]", + "[ (2/3 → 1/1) ⇝ 4/3 | s:sd ]", + "[ 2/3 → 1/1 | s:hh ]", + "[ 2/3 ⇜ (1/1 → 4/3) | s:sd ]", + "[ 1/1 → 4/3 | s:hh ]", + "[ 4/3 → 2/1 | s:bd ]", + "[ 4/3 → 5/3 | s:hh ]", + "[ 5/3 → 2/1 | s:hh ]", + "[ 2/1 → 8/3 | s:sd ]", + "[ 2/1 → 7/3 | s:hh ]", + "[ 7/3 → 8/3 | s:hh ]", + "[ (8/3 → 3/1) ⇝ 10/3 | s:bd ]", + "[ 8/3 → 3/1 | s:hh ]", + "[ 8/3 ⇜ (3/1 → 10/3) | s:bd ]", + "[ 3/1 → 10/3 | s:hh ]", + "[ 10/3 → 4/1 | s:sd ]", + "[ 10/3 → 11/3 | s:hh ]", + "[ 11/3 → 4/1 | s:hh ]", +] +`; + exports[`runs examples > example "crush" example index 0 1`] = ` [ "[ 0/1 → 1/2 | s:bd crush:16 ]", @@ -1659,6 +1723,19 @@ exports[`runs examples > example "fast" example index 0 1`] = ` ] `; +exports[`runs examples > example "fastGap" example index 0 1`] = ` +[ + "[ 0/1 → 1/4 | s:bd ]", + "[ 1/4 → 1/2 | s:sd ]", + "[ 1/1 → 5/4 | s:bd ]", + "[ 5/4 → 3/2 | s:sd ]", + "[ 2/1 → 9/4 | s:bd ]", + "[ 9/4 → 5/2 | s:sd ]", + "[ 3/1 → 13/4 | s:bd ]", + "[ 13/4 → 7/2 | s:sd ]", +] +`; + exports[`runs examples > example "fastcat" example index 0 1`] = ` [ "[ 0/1 → 1/3 | e5 ]", @@ -1722,6 +1799,43 @@ exports[`runs examples > example "floor" example index 0 1`] = ` ] `; +exports[`runs examples > example "focus" example index 0 1`] = ` +[ + "[ 0/1 → 1/8 | s:sd ]", + "[ 1/8 → 1/4 | s:hh ]", + "[ 1/4 → 3/8 | s:bd ]", + "[ 3/8 → 1/2 | s:hh ]", + "[ 1/2 → 5/8 | s:sd ]", + "[ 5/8 → 3/4 | s:hh ]", + "[ 3/4 → 7/8 | s:bd ]", + "[ 7/8 → 1/1 | s:hh ]", + "[ 1/1 → 9/8 | s:sd ]", + "[ 9/8 → 5/4 | s:hh ]", + "[ 5/4 → 11/8 | s:bd ]", + "[ 11/8 → 3/2 | s:hh ]", + "[ 3/2 → 13/8 | s:sd ]", + "[ 13/8 → 7/4 | s:hh ]", + "[ 7/4 → 15/8 | s:bd ]", + "[ 15/8 → 2/1 | s:hh ]", + "[ 2/1 → 17/8 | s:sd ]", + "[ 17/8 → 9/4 | s:hh ]", + "[ 9/4 → 19/8 | s:bd ]", + "[ 19/8 → 5/2 | s:hh ]", + "[ 5/2 → 21/8 | s:sd ]", + "[ 21/8 → 11/4 | s:hh ]", + "[ 11/4 → 23/8 | s:bd ]", + "[ 23/8 → 3/1 | s:hh ]", + "[ 3/1 → 25/8 | s:sd ]", + "[ 25/8 → 13/4 | s:hh ]", + "[ 13/4 → 27/8 | s:bd ]", + "[ 27/8 → 7/2 | s:hh ]", + "[ 7/2 → 29/8 | s:sd ]", + "[ 29/8 → 15/4 | s:hh ]", + "[ 15/4 → 31/8 | s:bd ]", + "[ 31/8 → 4/1 | s:hh ]", +] +`; + exports[`runs examples > example "freq" example index 0 1`] = ` [ "[ 0/1 → 1/4 | freq:220 s:superzow ]", @@ -1863,6 +1977,43 @@ exports[`runs examples > example "hresonance" example index 0 1`] = ` ] `; +exports[`runs examples > example "inside" example index 0 1`] = ` +[ + "[ 1/8 → 1/4 | note:C3 ]", + "[ 0/1 → 1/8 | note:D3 ]", + "[ 3/8 → 1/2 | note:E3 ]", + "[ 1/4 → 3/8 | note:F3 ]", + "[ 5/8 → 3/4 | note:G3 ]", + "[ 1/2 → 5/8 | note:F3 ]", + "[ 7/8 → 1/1 | note:E3 ]", + "[ 3/4 → 7/8 | note:D3 ]", + "[ 9/8 → 5/4 | note:C3 ]", + "[ 1/1 → 9/8 | note:D3 ]", + "[ 11/8 → 3/2 | note:E3 ]", + "[ 5/4 → 11/8 | note:F3 ]", + "[ 13/8 → 7/4 | note:G3 ]", + "[ 3/2 → 13/8 | note:F3 ]", + "[ 15/8 → 2/1 | note:E3 ]", + "[ 7/4 → 15/8 | note:D3 ]", + "[ 17/8 → 9/4 | note:C3 ]", + "[ 2/1 → 17/8 | note:D3 ]", + "[ 19/8 → 5/2 | note:E3 ]", + "[ 9/4 → 19/8 | note:F3 ]", + "[ 21/8 → 11/4 | note:G3 ]", + "[ 5/2 → 21/8 | note:F3 ]", + "[ 23/8 → 3/1 | note:E3 ]", + "[ 11/4 → 23/8 | note:D3 ]", + "[ 25/8 → 13/4 | note:C3 ]", + "[ 3/1 → 25/8 | note:D3 ]", + "[ 27/8 → 7/2 | note:E3 ]", + "[ 13/4 → 27/8 | note:F3 ]", + "[ 29/8 → 15/4 | note:G3 ]", + "[ 7/2 → 29/8 | note:F3 ]", + "[ 31/8 → 4/1 | note:E3 ]", + "[ 15/4 → 31/8 | note:D3 ]", +] +`; + exports[`runs examples > example "irand" example index 0 1`] = ` [ "[ 0/1 → 1/8 | note:Bb3 ]", @@ -2099,6 +2250,20 @@ exports[`runs examples > example "lsize" example index 0 1`] = ` ] `; +exports[`runs examples > example "mask" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | note:c ]", + "[ 1/2 → 1/1 | note:eb ]", + "[ 1/2 → 1/1 | note:g ]", + "[ 1/1 → 3/2 | note:d ]", + "[ 3/2 → 2/1 | note:eb ]", + "[ 3/2 → 2/1 | note:g ]", + "[ 3/1 → 7/2 | note:d ]", + "[ 7/2 → 4/1 | note:eb ]", + "[ 7/2 → 4/1 | note:g ]", +] +`; + exports[`runs examples > example "mul" example index 0 1`] = ` [ "[ 0/1 → 1/3 | freq:150 ]", @@ -2304,6 +2469,17 @@ exports[`runs examples > example "orbit" example index 0 1`] = ` ] `; +exports[`runs examples > example "outside" example index 0 1`] = ` +[ + "[ 0/1 → 1/1 | note:A3 ]", + "[ 3/2 → 2/1 | note:F3 ]", + "[ 1/1 → 3/2 | note:G3 ]", + "[ 2/1 → 3/1 | note:E3 ]", + "[ 7/2 → 4/1 | note:C3 ]", + "[ 3/1 → 7/2 | note:D3 ]", +] +`; + exports[`runs examples > example "pan" example index 0 1`] = ` [ "[ 0/1 → 1/4 | s:bd pan:0.5 ]", @@ -2354,6 +2530,32 @@ exports[`runs examples > example "perlin" example index 0 1`] = ` ] `; +exports[`runs examples > example "ply" example index 0 1`] = ` +[ + "[ 0/1 → 1/4 | s:bd ]", + "[ 1/2 → 3/4 | s:sd ]", + "[ 3/4 → 1/1 | s:cp ]", + "[ 1/1 → 9/8 | s:bd ]", + "[ 9/8 → 5/4 | s:bd ]", + "[ 3/2 → 13/8 | s:sd ]", + "[ 13/8 → 7/4 | s:sd ]", + "[ 7/4 → 15/8 | s:cp ]", + "[ 15/8 → 2/1 | s:cp ]", + "[ 2/1 → 25/12 | s:bd ]", + "[ 25/12 → 13/6 | s:bd ]", + "[ 13/6 → 9/4 | s:bd ]", + "[ 5/2 → 31/12 | s:sd ]", + "[ 31/12 → 8/3 | s:sd ]", + "[ 8/3 → 11/4 | s:sd ]", + "[ 11/4 → 17/6 | s:cp ]", + "[ 17/6 → 35/12 | s:cp ]", + "[ 35/12 → 3/1 | s:cp ]", + "[ 3/1 → 13/4 | s:bd ]", + "[ 7/2 → 15/4 | s:sd ]", + "[ 15/4 → 4/1 | s:cp ]", +] +`; + exports[`runs examples > example "polymeter" example index 0 1`] = ` [ "[ 0/1 → 1/3 | note:c ]", @@ -2469,6 +2671,64 @@ exports[`runs examples > example "range" example index 0 1`] = ` ] `; +exports[`runs examples > example "range2" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | s:bd cutoff:1537.0125742738173 ]", + "[ 1/2 → 1/1 | s:sd cutoff:1942.909649383465 ]", + "[ 0/1 → 1/4 | s:hh cutoff:1396.3177415120963 ]", + "[ 1/4 → 1/2 | s:hh cutoff:1666.6776747647016 ]", + "[ 1/2 → 3/4 | s:hh cutoff:1873.602209226909 ]", + "[ 3/4 → 1/1 | s:hh cutoff:1985.5889603024227 ]", + "[ 1/1 → 3/2 | s:bd cutoff:1942.909649383465 ]", + "[ 3/2 → 2/1 | s:sd cutoff:1537.0125742738173 ]", + "[ 1/1 → 5/4 | s:hh cutoff:1985.5889603024227 ]", + "[ 5/4 → 3/2 | s:hh cutoff:1873.602209226909 ]", + "[ 3/2 → 7/4 | s:hh cutoff:1666.6776747647016 ]", + "[ 7/4 → 2/1 | s:hh cutoff:1396.3177415120965 ]", + "[ 2/1 → 5/2 | s:bd cutoff:962.9874257261828 ]", + "[ 5/2 → 3/1 | s:sd cutoff:557.0903506165351 ]", + "[ 2/1 → 9/4 | s:hh cutoff:1103.6822584879037 ]", + "[ 9/4 → 5/2 | s:hh cutoff:833.3223252352985 ]", + "[ 5/2 → 11/4 | s:hh cutoff:626.3977907730911 ]", + "[ 11/4 → 3/1 | s:hh cutoff:514.4110396975773 ]", + "[ 3/1 → 7/2 | s:bd cutoff:557.090350616535 ]", + "[ 7/2 → 4/1 | s:sd cutoff:962.9874257261822 ]", + "[ 3/1 → 13/4 | s:hh cutoff:514.4110396975772 ]", + "[ 13/4 → 7/2 | s:hh cutoff:626.397790773091 ]", + "[ 7/2 → 15/4 | s:hh cutoff:833.3223252352984 ]", + "[ 15/4 → 4/1 | s:hh cutoff:1103.6822584879035 ]", +] +`; + +exports[`runs examples > example "rangex" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | s:bd cutoff:1303.7646214531312 ]", + "[ 1/2 → 1/1 | s:sd cutoff:1897.2102033890155 ]", + "[ 0/1 → 1/4 | s:hh cutoff:1144.7958299590086 ]", + "[ 1/4 → 1/2 | s:hh cutoff:1469.7494449054268 ]", + "[ 1/2 → 3/4 | s:hh cutoff:1779.4971377133336 ]", + "[ 3/4 → 1/1 | s:hh cutoff:1973.5393435463043 ]", + "[ 1/1 → 3/2 | s:bd cutoff:1897.2102033890155 ]", + "[ 3/2 → 2/1 | s:sd cutoff:1303.7646214531312 ]", + "[ 1/1 → 5/4 | s:hh cutoff:1973.5393435463043 ]", + "[ 5/4 → 3/2 | s:hh cutoff:1779.4971377133336 ]", + "[ 3/2 → 7/4 | s:hh cutoff:1469.7494449054268 ]", + "[ 7/4 → 2/1 | s:hh cutoff:1144.7958299590086 ]", + "[ 2/1 → 5/2 | s:bd cutoff:767.0096147304824 ]", + "[ 5/2 → 3/1 | s:sd cutoff:527.0897226958216 ]", + "[ 2/1 → 9/4 | s:hh cutoff:873.5182063301246 ]", + "[ 9/4 → 5/2 | s:hh cutoff:680.3880780266911 ]", + "[ 5/2 → 11/4 | s:hh cutoff:561.9565094018676 ]", + "[ 11/4 → 3/1 | s:hh cutoff:506.70385835991164 ]", + "[ 3/1 → 7/2 | s:bd cutoff:527.0897226958216 ]", + "[ 7/2 → 4/1 | s:sd cutoff:767.0096147304824 ]", + "[ 3/1 → 13/4 | s:hh cutoff:506.7038583599112 ]", + "[ 13/4 → 7/2 | s:hh cutoff:561.9565094018676 ]", + "[ 7/2 → 15/4 | s:hh cutoff:680.3880780266911 ]", + "[ 15/4 → 4/1 | s:hh cutoff:873.5182063301246 ]", +] +`; + exports[`runs examples > example "rarely" example index 0 1`] = ` [ "[ 0/1 → 1/8 | s:hh ]", @@ -2527,6 +2787,35 @@ exports[`runs examples > example "release" example index 0 1`] = ` ] `; +exports[`runs examples > example "reset" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | s:bd ]", + "[ 1/2 → 1/1 | s:sd ]", + "[ 0/1 → 1/4 | s:hh ]", + "[ 1/4 → 1/2 | s:hh ]", + "[ 1/2 → 3/4 | s:hh ]", + "[ 3/4 → 1/1 | s:hh ]", + "[ 1/1 → 3/2 | s:lt ]", + "[ 3/2 → 2/1 | s:sd ]", + "[ 1/1 → 5/4 | s:hh ]", + "[ 5/4 → 3/2 | s:hh ]", + "[ 3/2 → 7/4 | s:hh ]", + "[ 7/4 → 2/1 | s:hh ]", + "[ 2/1 → 5/2 | s:bd ]", + "[ 5/2 → 3/1 | s:sd ]", + "[ 2/1 → 9/4 | s:hh ]", + "[ 9/4 → 5/2 | s:hh ]", + "[ 5/2 → 11/4 | s:hh ]", + "[ 11/4 → 3/1 | s:hh ]", + "[ 3/1 → 25/8 | s:lt ]", + "[ 3/1 → 25/8 | s:hh ]", + "[ 27/8 → 7/2 | s:lt ]", + "[ 27/8 → 7/2 | s:hh ]", + "[ 15/4 → 31/8 | s:lt ]", + "[ 15/4 → 31/8 | s:hh ]", +] +`; + exports[`runs examples > example "resonance" example index 0 1`] = ` [ "[ 0/1 → 1/2 | s:bd cutoff:2000 resonance:0 ]", @@ -2556,6 +2845,35 @@ exports[`runs examples > example "resonance" example index 0 1`] = ` ] `; +exports[`runs examples > example "restart" example index 0 1`] = ` +[ + "[ 0/1 → 1/2 | s:bd ]", + "[ 1/2 → 1/1 | s:sd ]", + "[ 0/1 → 1/4 | s:hh ]", + "[ 1/4 → 1/2 | s:hh ]", + "[ 1/2 → 3/4 | s:hh ]", + "[ 3/4 → 1/1 | s:hh ]", + "[ 1/1 → 3/2 | s:lt ]", + "[ 3/2 → 2/1 | s:sd ]", + "[ 1/1 → 5/4 | s:hh ]", + "[ 5/4 → 3/2 | s:hh ]", + "[ 3/2 → 7/4 | s:hh ]", + "[ 7/4 → 2/1 | s:hh ]", + "[ 2/1 → 5/2 | s:bd ]", + "[ 5/2 → 3/1 | s:sd ]", + "[ 2/1 → 9/4 | s:hh ]", + "[ 9/4 → 5/2 | s:hh ]", + "[ 5/2 → 11/4 | s:hh ]", + "[ 11/4 → 3/1 | s:hh ]", + "[ 3/1 → 25/8 | s:bd ]", + "[ 3/1 → 25/8 | s:hh ]", + "[ 27/8 → 7/2 | s:bd ]", + "[ 27/8 → 7/2 | s:hh ]", + "[ 15/4 → 31/8 | s:bd ]", + "[ 15/4 → 31/8 | s:hh ]", +] +`; + exports[`runs examples > example "rev" example index 0 1`] = ` [ "[ 3/4 → 1/1 | note:c3 ]", @@ -3418,3 +3736,53 @@ exports[`runs examples > example "when" example index 0 1`] = ` "[ 11/3 → 4/1 | note:50 ]", ] `; + +exports[`runs examples > example "withValue" example index 0 1`] = ` +[ + "[ 0/1 → 1/3 | 10 ]", + "[ 1/3 → 2/3 | 11 ]", + "[ 2/3 → 1/1 | 12 ]", + "[ 1/1 → 4/3 | 10 ]", + "[ 4/3 → 5/3 | 11 ]", + "[ 5/3 → 2/1 | 12 ]", + "[ 2/1 → 7/3 | 10 ]", + "[ 7/3 → 8/3 | 11 ]", + "[ 8/3 → 3/1 | 12 ]", + "[ 3/1 → 10/3 | 10 ]", + "[ 10/3 → 11/3 | 11 ]", + "[ 11/3 → 4/1 | 12 ]", +] +`; + +exports[`runs examples > example "zoom" example index 0 1`] = ` +[ + "[ 0/1 → 1/6 | s:hh ]", + "[ 1/6 → 1/3 | s:hh ]", + "[ 1/3 → 1/2 | s:hh ]", + "[ 1/2 → 5/8 | s:sd ]", + "[ 3/4 → 7/8 | s:sd ]", + "[ 5/8 → 3/4 | s:bd ]", + "[ 7/8 → 1/1 | s:bd ]", + "[ 1/1 → 7/6 | s:hh ]", + "[ 7/6 → 4/3 | s:hh ]", + "[ 4/3 → 3/2 | s:hh ]", + "[ 3/2 → 13/8 | s:sd ]", + "[ 7/4 → 15/8 | s:sd ]", + "[ 13/8 → 7/4 | s:bd ]", + "[ 15/8 → 2/1 | s:bd ]", + "[ 2/1 → 13/6 | s:hh ]", + "[ 13/6 → 7/3 | s:hh ]", + "[ 7/3 → 5/2 | s:hh ]", + "[ 5/2 → 21/8 | s:sd ]", + "[ 11/4 → 23/8 | s:sd ]", + "[ 21/8 → 11/4 | s:bd ]", + "[ 23/8 → 3/1 | s:bd ]", + "[ 3/1 → 19/6 | s:hh ]", + "[ 19/6 → 10/3 | s:hh ]", + "[ 10/3 → 7/2 | s:hh ]", + "[ 7/2 → 29/8 | s:sd ]", + "[ 15/4 → 31/8 | s:sd ]", + "[ 29/8 → 15/4 | s:bd ]", + "[ 31/8 → 4/1 | s:bd ]", +] +`; diff --git a/undocumented.json b/undocumented.json new file mode 100644 index 00000000..bac61798 --- /dev/null +++ b/undocumented.json @@ -0,0 +1,285 @@ +{ + "/home/felix/projects/strudel/packages/core/fraction.mjs": [ + "gcd" + ], + "/home/felix/projects/strudel/packages/core/timespan.mjs": [ + "TimeSpan" + ], + "/home/felix/projects/strudel/packages/core/hap.mjs": [ + "Hap" + ], + "/home/felix/projects/strudel/packages/core/state.mjs": [ + "State" + ], + "/home/felix/projects/strudel/packages/core/util.mjs": [ + "isNoteWithOctave", + "isNote", + "tokenizeNote", + "toMidi", + "fromMidi", + "freqToMidi", + "valueToMidi", + "_mod", + "getPlayableNoteValue", + "getFrequency", + "rotate", + "pipe", + "compose", + "flatten", + "id", + "constant", + "listRange", + "curry", + "parseNumeral", + "mapArgs", + "numeralArgs", + "parseFractional", + "fractionalArgs" + ], + "/home/felix/projects/strudel/packages/core/value.mjs": [ + "unionWithObj", + "valued", + "Value", + "map" + ], + "/home/felix/projects/strudel/packages/core/drawLine.mjs": [], + "/home/felix/projects/strudel/packages/core/logger.mjs": [ + "logKey", + "logger" + ], + "/home/felix/projects/strudel/packages/core/pattern.mjs": [ + "setStringParser", + "isPattern", + "reify", + "set", + "keep", + "keepif", + "mod", + "pow", + "band", + "bor", + "bxor", + "blshift", + "brshift", + "lt", + "gt", + "lte", + "gte", + "eq", + "eqt", + "ne", + "net", + "and", + "or", + "func", + "register", + "compressSpan", + "compressspan", + "focusSpan", + "focusspan", + "zoomArc", + "zoomarc", + "linger", + "segment", + "invert", + "inv", + "hush", + "palindrome", + "juxBy", + "juxby", + "jux", + "stutWith", + "stutwith", + "stut", + "echowith", + "iterback", + "chunkback", + "bypass", + "duration", + "color", + "colour", + "striate" + ], + "/home/felix/projects/strudel/packages/core/controls.mjs": [], + "/home/felix/projects/strudel/packages/core/euclid.mjs": [ + "euclidrot", + "euclidLegatoRot" + ], + "/home/felix/projects/strudel/packages/core/signal.mjs": [ + "steady", + "signal", + "isaw", + "isaw2", + "saw2", + "sine2", + "cosine2", + "square2", + "tri2", + "time", + "_brandBy", + "brandBy", + "brand", + "_irand", + "__chooseWith", + "randcat", + "wchoose", + "wchooseCycles", + "perlinWith", + "degradeByWith", + "undegrade" + ], + "/home/felix/projects/strudel/packages/core/speak.mjs": [ + "speak" + ], + "/home/felix/projects/strudel/packages/core/evaluate.mjs": [ + "evalScope", + "evaluate" + ], + "/home/felix/projects/strudel/packages/core/zyklus.mjs": [], + "/home/felix/projects/strudel/packages/core/cyclist.mjs": [ + "Cyclist" + ], + "/home/felix/projects/strudel/packages/core/time.mjs": [ + "getTime", + "setTime" + ], + "/home/felix/projects/strudel/packages/core/repl.mjs": [ + "repl" + ], + "/home/felix/projects/strudel/packages/core/draw.mjs": [ + "getDrawContext", + "cleanupDraw" + ], + "/home/felix/projects/strudel/packages/core/animate.mjs": [ + "x", + "y", + "w", + "h", + "a", + "r", + "fill", + "smear", + "rescale", + "moveXY", + "zoomIn" + ], + "/home/felix/projects/strudel/packages/core/pianoroll.mjs": [ + "pianoroll" + ], + "/home/felix/projects/strudel/packages/core/ui.mjs": [ + "backgroundImage", + "cleanupUi" + ], + "/home/felix/projects/strudel/packages/core/gist.js": [], + "/home/felix/projects/strudel/packages/core/index.mjs": [], + "/home/felix/projects/strudel/packages/eval/shift-traverser/index.js": [], + "/home/felix/projects/strudel/packages/eval/shapeshifter.mjs": [ + "addMiniLocations", + "minifyStrings", + "wrappedAsync", + "shouldAddReturn" + ], + "/home/felix/projects/strudel/packages/eval/evaluate.mjs": [ + "evaluate" + ], + "/home/felix/projects/strudel/packages/eval/index.mjs": [], + "/home/felix/projects/strudel/packages/midi/midi.mjs": [ + "WebMidi", + "enableWebMidi" + ], + "/home/felix/projects/strudel/packages/midi/index.mjs": [], + "/home/felix/projects/strudel/packages/mini/krill-parser.js": [], + "/home/felix/projects/strudel/packages/mini/mini.mjs": [ + "patternifyAST", + "mini", + "h", + "minify" + ], + "/home/felix/projects/strudel/packages/mini/index.mjs": [], + "/home/felix/projects/strudel/packages/soundfonts/fontloader.mjs": [ + "getFontBufferSource", + "getFontPitch" + ], + "/home/felix/projects/strudel/packages/soundfonts/list.mjs": [ + "instruments", + "drums", + "instrumentNames" + ], + "/home/felix/projects/strudel/packages/soundfonts/sfumato.mjs": [ + "loadSoundfont" + ], + "/home/felix/projects/strudel/packages/soundfonts/index.mjs": [], + "/home/felix/projects/strudel/packages/tonal/tonal.mjs": [], + "/home/felix/projects/strudel/packages/tonal/voicings.mjs": [ + "voicingRegistry", + "setVoicingRange" + ], + "/home/felix/projects/strudel/packages/tonal/index.mjs": [], + "/home/felix/projects/strudel/packages/tone/tone.mjs": [ + "Tone", + "getDefaultSynth", + "tone", + "amsynth", + "duosynth", + "fmsynth", + "membrane", + "metal", + "monosynth", + "noise", + "pluck", + "polysynth", + "sampler", + "players", + "synth", + "vol", + "lowpass", + "highpass", + "adsr", + "out" + ], + "/home/felix/projects/strudel/packages/tone/index.mjs": [], + "/home/felix/projects/strudel/packages/transpiler/transpiler.mjs": [ + "transpiler" + ], + "/home/felix/projects/strudel/packages/transpiler/index.mjs": [ + "evaluate" + ], + "/home/felix/projects/strudel/packages/webaudio/feedbackdelay.mjs": [], + "/home/felix/projects/strudel/packages/webaudio/reverb.mjs": [], + "/home/felix/projects/strudel/packages/webaudio/sampler.mjs": [ + "getCachedBuffer", + "getSampleBufferSource", + "loadBuffer", + "reverseBuffer", + "getLoadedBuffer", + "resetLoadedSamples", + "getLoadedSamples" + ], + "/home/felix/projects/strudel/packages/webaudio/vowel.mjs": [ + "vowelFormant" + ], + "/home/felix/projects/strudel/packages/webaudio/webaudio.mjs": [ + "getAudioContext", + "panic", + "initAudio", + "initAudioOnFirstClick", + "webaudioOutput", + "webaudioOutputTrigger" + ], + "/home/felix/projects/strudel/packages/webaudio/index.mjs": [], + "/home/felix/projects/strudel/packages/webdirt/webdirt.mjs": [ + "loadWebDirt" + ], + "/home/felix/projects/strudel/packages/webdirt/index.mjs": [], + "/home/felix/projects/strudel/packages/xen/xen.mjs": [ + "edo", + "xen", + "tuning" + ], + "/home/felix/projects/strudel/packages/xen/tunejs.js": [], + "/home/felix/projects/strudel/packages/xen/tune.mjs": [ + "tune" + ], + "/home/felix/projects/strudel/packages/xen/index.mjs": [], + "/home/felix/projects/strudel/index.mjs": [] +} diff --git a/undocumented.mjs b/undocumented.mjs new file mode 100644 index 00000000..281d27d8 --- /dev/null +++ b/undocumented.mjs @@ -0,0 +1,82 @@ +import { readFile } from 'node:fs/promises'; +import { dirname, resolve } from 'path'; +import { fileURLToPath } from 'url'; +import { parse } from 'acorn'; +import dependencyTree from 'dependency-tree'; +const __dirname = dirname(fileURLToPath(import.meta.url)); + +function getExports(code) { + // parse it with acorn + let ast; + try { + ast = parse(code, { + ecmaVersion: 11, + sourceType: 'module', + }); + } catch (err) { + return [`acorn parse error: ${err.name}: ${err.messsage}`]; + } + + // find all names exported in the file + return ast.body + .filter((node) => node?.type === 'ExportNamedDeclaration') + .map((node) => { + const { declaration } = node; + if (!declaration) { + // e.g. "export { Fraction, controls }" + return []; + } + switch (declaration.type) { + case 'VariableDeclaration': + return declaration.declarations + .map((d) => { + switch (d.id.type) { + case 'Identifier': + return d.id.name; + case 'ObjectPattern': + return d.id.properties.map((p) => p.value.name); + default: + return 'unknown declaration: ' + declaration; + } + }) + .flat(); + default: + // FunctionDeclaration, ClassDeclaration + return declaration.id.name; + } + }) + .flat(); +} + +function isDocumented(name, docs) { + return docs.find( + (d) => d.name === name || d.tags?.find((t) => t.title === 'synonyms' && t.value.split(', ').includes(name)), + ); +} + +async function getUndocumented(path, docs) { + try { + // load the code of pattern.mjs as a string + const code = await readFile(path, 'utf8'); + return getExports(code).filter((name) => !isDocumented(name, docs)); + } catch (err) { + return [`parse error: ${err.name}: ${err.message}`]; + } +} + +// read doc.json file +const { docs } = JSON.parse(await readFile(resolve(__dirname, 'doc.json'), 'utf8')); + +const paths = dependencyTree.toList({ + filename: 'index.mjs', + // filename: 'packages/core/index.mjs', + directory: resolve(__dirname), + filter: (path) => !path.includes('node_modules'), +}); +// const paths = ['../packages/core/pattern.mjs', '../packages/core/hap.mjs'].map((rel) => resolve(__dirname, rel)); + +const undocumented = Object.fromEntries( + await Promise.all(paths.map(async (path) => [path, await getUndocumented(path, docs)])), +); + +console.log(JSON.stringify(undocumented, null, 2)); diff --git a/website/src/components/RightSidebar/RightSidebar.astro b/website/src/components/RightSidebar/RightSidebar.astro index be0df4c6..c110d9d8 100644 --- a/website/src/components/RightSidebar/RightSidebar.astro +++ b/website/src/components/RightSidebar/RightSidebar.astro @@ -12,7 +12,7 @@ const { headings, githubEditUrl } = Astro.props as Props; const currentPage = Astro.url.pathname; --- -