{"_id":"@bassmoses/maestro-js","_rev":"8-42a4cab15ea4cdf92965211ece426c39","name":"@bassmoses/maestro-js","dist-tags":{"latest":"0.2.6"},"versions":{"0.1.0":{"name":"@bassmoses/maestro-js","version":"0.1.0","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.1.0","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"020562eddb289c1706ac2f6389985b6fd3a69576","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.1.0.tgz","fileCount":47,"integrity":"sha512-ktYYXNbqBHxO6PnYxvccKIMs6NOsc31gZnK7fIX56+TDWVi7Yl3Vk6nk097BmeVHAv363XX9OONPAmUsyHakjw==","signatures":[{"sig":"MEUCIHORnsxwOdH5V5V8Rv8m8BDwQRtjKuh8++oDBdKheTjwAiEA7m+Pm7AgUXjwqyqxe0KClUCqXTA42ADcYTzy5EFqPAw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1120325},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"2c9494ae84a85cb270d4b6d4ebbbbda84443847c","scripts":{"lint":"eslint src --ext .ts","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.1.0_1777542553185_0.07157765669590854","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bassmoses/maestro-js","version":"0.2.0","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.0","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"16956528fb7d8855f0f84d51aeb0ecd417409b3f","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.0.tgz","fileCount":50,"integrity":"sha512-Uqsa9sx7LuW51vfbCOvUBsuLIDXtCaZmkGrtmGh4WDp5Ofyk4PSq0VZK+LE5Sw3+MySkH/4vxknOtUPr5sy20w==","signatures":[{"sig":"MEYCIQDJBF3+WeT7QnY473mUbh5c05DQ7GimyH1cCptgNsfY0wIhAPLfIrkX6DSd8H99h+Hny0fh5E3TG6szdGPPEsWf84+n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12504632},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"2c9494ae84a85cb270d4b6d4ebbbbda84443847c","scripts":{"lint":"eslint src --ext .ts","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.0_1777553358084_0.849525971936637","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bassmoses/maestro-js","version":"0.2.1","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.1","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"b324221193984cfa86c7d1ea03416f22fd04238a","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.1.tgz","fileCount":50,"integrity":"sha512-1otUFul7pvy0eg9PNnhlW2PyH0GkxSdxpWdMs3LU3P1DIAo2VGmgXjPpR0djkNPYK6y4ALUNdWi2ad/Ps6yCNA==","signatures":[{"sig":"MEYCIQCIrUkam6x5cjIOy+iFuhd5v4Le9mVTvu96p4o89gjd8QIhALxx0jwHRH7GLCYirGj6RPf2d4M8m/9rlgEeIwj3KY00","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12515885},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"d67dbcb64606f670e35bc60179fc615f6c80cc41","scripts":{"lint":"eslint src --ext .ts","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.1_1777559916569_0.41241766831213567","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bassmoses/maestro-js","version":"0.2.2","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.2","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"3e965ca512fd1cc7113b63650375b55c124eaa5f","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.2.tgz","fileCount":52,"integrity":"sha512-X0to2kBwTxzdrxhjILaoLz6wk2e3Wa8iht9oJcGMJPnWM3ybcoIQ9QHPPfv+gwDSqP5syaXTnMl9OKCNjLfzzw==","signatures":[{"sig":"MEQCIBO7xsFPx0fx2JQZNyHZ1Fi6LtB0NPkHytywUnenbtmtAiB/UtCh2vKqfLXa4dnGWG5W4tnFP275PIfM4FFAmsAc0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14090747},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"98cb31b63c3f7188c9d1f0fef5ec4f3f9b6c77e5","scripts":{"lint":"eslint src","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish --access public && git push && git push --tags","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish --access public && git push && git push --tags","release:minor":"npm version minor && npm publish --access public && git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1","fast-xml-parser":"^5.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.2_1777710500128_0.3989766554865377","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bassmoses/maestro-js","version":"0.2.3","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.3","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"bad2d7add2fa123b4b20174d7da1890e31dddf19","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.3.tgz","fileCount":51,"integrity":"sha512-NlnmsMRVNpmBjFB1CUSUpsx924LjU0KMZUTUwVDRdqKU5ubxNNsy0Cpt5xPYmT+TQGfRYSc131FbjPy2S9Bw1w==","signatures":[{"sig":"MEUCIQDs9jA4q5e2HSXMkonQSooycDl6gbzn6dEkCD6Wmuxk3QIgQHDC+bcFdoFiGlXmcAAF2TGaeTumCWgjKDZ5iB3QjWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2018276},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"49e9a600ef38f7150e2acae6bb04f417ef918291","scripts":{"lint":"eslint src","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish --access public && git push && git push --tags","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish --access public && git push && git push --tags","release:minor":"npm version minor && npm publish --access public && git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1","fast-xml-parser":"^5.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.3_1777855253211_0.314431318617701","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@bassmoses/maestro-js","version":"0.2.4","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.4","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"4397bb921f0bd1f71d65c7be8ebd6fe408b2b305","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.4.tgz","fileCount":51,"integrity":"sha512-JIvPPKXYii+DHCpYE1oci/hEPbikAvBrjpHmRW77jsatGQ8Fpf53qH+eI/G+l4/Ks0z72vcIGt/WYAhsBgvsDQ==","signatures":[{"sig":"MEUCIQCzVjnU02dwIe/4CyinJMHbTz4FkT1VtnF3Oq80vJmMHgIgfYrlDrgvbYzZGudxg3NoL0+rmFQgZ7Ok/DpcCloOELU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2034984},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"5f9ba3c79bfb7378775360bef94fe7a388efb6c7","scripts":{"lint":"eslint src","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish --access public && git push && git push --tags","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish --access public && git push && git push --tags","release:minor":"npm version minor && npm publish --access public && git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1","fast-xml-parser":"^5.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.4_1777937205084_0.6541080916223654","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@bassmoses/maestro-js","version":"0.2.5","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"author":{"name":"Moses Bass"},"license":"MIT","_id":"@bassmoses/maestro-js@0.2.5","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"dist":{"shasum":"500cf4c6c9eafb00fe5933ec5f7cc34b3cbd07c3","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.5.tgz","fileCount":57,"integrity":"sha512-f2ABYoCs3iyTAc1VmDMP6jl8n0mN56TNxgJFC1bzAUNosx2T3j66+X7jHOvsvSRjnQbUmRF++d6LuURFJ+MTOA==","signatures":[{"sig":"MEQCIHcOx7uaMBiIvg1WX+Pokv/ic+P7rGU7P9DyNJegNaUBAiATG0kMZZqMPVYJm5iS60wFCTdiPUf55U8tBGtaQ2oEoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2209627},"main":"./dist/maestro.cjs.js","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","module":"./dist/maestro.esm.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","browser":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"gitHead":"45c460a9a2dc84744671231522e94d0981a41a2c","scripts":{"lint":"eslint src","test":"vitest run --coverage","build":"rollup -c rollup.config.ts --configPlugin typescript","prepare":"husky","release":"npm version patch && npm publish --access public && git push && git push --tags","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"npm version major && npm publish --access public && git push && git push --tags","release:minor":"npm version minor && npm publish --access public && git push && git push --tags","prepublishOnly":"npm run build"},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"jsdelivr":"./dist/maestro.umd.min.js","repository":{"url":"git+https://github.com/bassmoses/maestro-js.git","type":"git"},"_npmVersion":"11.5.2","description":"Human-friendly music library — write, render, and play music with simple syntax","directories":{},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"sideEffects":false,"_nodeVersion":"22.18.0","dependencies":{"tone":"^15.1.22","jsdom":"^29.1.0","vexflow":"^5.0.0","midi-writer-js":"^3.2.1","fast-xml-parser":"^5.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","tslib":"^2.8.1","eslint":"^10.2.1","rollup":"^4.60.2","vitest":"^4.1.5","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","lint-staged":"^16.4.0","@types/jsdom":"^28.0.1","typescript-eslint":"^8.59.1","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^4.1.5","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-typescript":"^12.3.0","@typescript-eslint/parser":"^8.59.1","@rollup/plugin-node-resolve":"^16.0.3","@typescript-eslint/eslint-plugin":"^8.59.1"},"peerDependencies":{"sharp":">=0.33.0"},"peerDependenciesMeta":{"sharp":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/maestro-js_0.2.5_1778719073518_0.2739481173700842","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@bassmoses/maestro-js","version":"0.2.6","type":"module","description":"Human-friendly music library — write, render, and play music with simple syntax","license":"MIT","author":{"name":"Moses Bass"},"repository":{"type":"git","url":"git+https://github.com/bassmoses/maestro-js.git"},"homepage":"https://github.com/bassmoses/maestro-js#readme","bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"engines":{"node":">=20"},"sideEffects":false,"scripts":{"build":"rollup -c rollup.config.ts --configPlugin typescript","test":"vitest run --coverage","test:watch":"vitest","lint":"eslint src","typecheck":"tsc --noEmit","prepublishOnly":"npm run build","prepare":"husky","release":"npm version patch && npm publish --access public && git push && git push --tags","release:minor":"npm version minor && npm publish --access public && git push && git push --tags","release:major":"npm version major && npm publish --access public && git push && git push --tags"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/maestro.esm.js","require":"./dist/maestro.cjs.js","browser":"./dist/maestro.esm.js"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/maestro.node.esm.js"}},"main":"./dist/maestro.cjs.js","module":"./dist/maestro.esm.js","types":"./dist/index.d.ts","unpkg":"./dist/maestro.umd.min.js","jsdelivr":"./dist/maestro.umd.min.js","devDependencies":{"@eslint/js":"^10.0.1","@rollup/plugin-commonjs":"^29.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.3","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-typescript":"^12.3.0","@types/jsdom":"^28.0.1","@typescript-eslint/eslint-plugin":"^8.59.1","@typescript-eslint/parser":"^8.59.1","@vitest/coverage-v8":"^4.1.5","eslint":"^10.2.1","husky":"^9.1.7","lint-staged":"^16.4.0","prettier":"^3.8.3","rollup":"^4.60.2","tslib":"^2.8.1","typescript":"^6.0.3","typescript-eslint":"^8.59.1","vitest":"^4.1.5"},"lint-staged":{"*.ts":["eslint --fix","prettier --write"]},"dependencies":{"fast-xml-parser":"^5.7.2","midi-writer-js":"^3.2.1","tone":"^15.1.22","vexflow":"^5.0.0"},"peerDependencies":{"jsdom":">=20.0.0","sharp":">=0.33.0"},"peerDependenciesMeta":{"jsdom":{"optional":true},"sharp":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@bassmoses/maestro-js@0.2.6","gitHead":"b5c024ca9dad1ce5768413960c36d15e0cda2d3b","_nodeVersion":"22.18.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-rVv4B09YqnvhJ6FsuJy4u3sYTeY1QhNPPTpB3HB0xk/xddr/um6jigFyDwaSWkEmjHocDN+hdGngpNK1DcCA+w==","shasum":"dc7027680c7c07ff508f3596b64b7871f7552417","tarball":"https://registry.npmjs.org/@bassmoses/maestro-js/-/maestro-js-0.2.6.tgz","fileCount":57,"unpackedSize":2209673,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDzgdXJdtlZMATsrVlWsfUqH81czqNAW+Jty1xdj1ie8AIgfEddv24bw4YQNVIDNjcHS28dGeMJ79NP/4QWoiJAijo="}]},"_npmUser":{"name":"bassmoses","email":"bassmoses996@gmail.com"},"directories":{},"maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/maestro-js_0.2.6_1778848243943_0.8683661122925679"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-30T09:49:12.561Z","modified":"2026-05-15T12:30:44.372Z","0.1.0":"2026-04-30T09:49:13.327Z","0.2.0":"2026-04-30T12:49:18.395Z","0.2.1":"2026-04-30T14:38:36.906Z","0.2.2":"2026-05-02T08:28:20.403Z","0.2.3":"2026-05-04T00:40:53.407Z","0.2.4":"2026-05-04T23:26:45.315Z","0.2.5":"2026-05-14T00:37:53.740Z","0.2.6":"2026-05-15T12:30:44.275Z"},"bugs":{"url":"https://github.com/bassmoses/maestro-js/issues"},"author":{"name":"Moses Bass"},"license":"MIT","homepage":"https://github.com/bassmoses/maestro-js#readme","keywords":["music","notation","midi","audio","composition","sheet-music","vexflow","tone"],"repository":{"type":"git","url":"git+https://github.com/bassmoses/maestro-js.git"},"description":"Human-friendly music library — write, render, and play music with simple syntax","maintainers":[{"name":"bassmoses","email":"bassmoses996@gmail.com"}],"readme":"<div align=\"center\">\n\n# Maestro.js\n\n**Write music. See music. Hear music.**\n\nA human-friendly JavaScript library that turns simple text notation into rendered sheet music and audio playback.\n\n[![npm version](https://img.shields.io/npm/v/@bassmoses/maestro-js?color=0969da)](https://www.npmjs.com/package/@bassmoses/maestro-js)\n[![license](https://img.shields.io/npm/l/@bassmoses/maestro-js?color=0969da)](LICENSE)\n[![node](https://img.shields.io/node/v/@bassmoses/maestro-js?color=0969da)](package.json)\n\n</div>\n\n```js\nimport { Song } from '@bassmoses/maestro-js'\n\nconst song = new Song()\nsong.add('C4 D4 E4 F4 G4')\nsong.render('#sheet')\nsong.play()\n```\n\nThree lines after import — renders a staff and plays the notes.\n\n---\n\n## Install\n\n```bash\nnpm install @bassmoses/maestro-js\n```\n\nNo peer dependencies to configure. VexFlow and Tone.js are bundled internally.\n\n**Optional** — only needed for `exportPNG()`:\n\n```bash\nnpm install sharp\n```\n\n---\n\n## Quick Start\n\n### Simple Melody\n\n```js\nimport { Song } from '@bassmoses/maestro-js'\n\nconst song = new Song({ tempo: 100, key: 'C' })\nsong.add('C4:q E4:q G4:q C5:q | G4:h E4:h | C4:w')\nsong.render('#sheet')\nsong.play()\n```\n\n### Dynamics, Chords & Lyrics\n\n```js\nimport { Song } from '@bassmoses/maestro-js'\n\nconst song = new Song({\n  tempo: 112,\n  timeSignature: '4/4',\n  key: 'D',\n  instrument: 'piano',\n})\n\n// Melody with dynamics\nsong.add('D4:q(mp) F#4:q A4:h | A4:q(mf) G4:q F#4:h | E4:q(mp) F#4:q G4:q F#4:q | D4:w(p)')\n\n// Chords\nsong.add('[D4 F#4 A4]:h(f) [A4 C#5 E5]:h | [G4 B4 D5]:h(ff) [A4 C#5 E5]:h(mf)')\n\n// Lyrics attached to notes\nsong.add('C4:q\"Hel\" D4:q\"lo\" E4:h\"world\"')\n\nsong.render('#sheet-container', { width: 800, showDynamics: true })\nsong.play()\n```\n\n### Full SATB Choir with Part Names\n\n```js\nimport { Song } from '@bassmoses/maestro-js'\n\nconst chorale = new Song({\n  tempo: 76,\n  timeSignature: '4/4',\n  key: 'Bb',\n  title: 'Sanctus',\n  composer: 'Anonymous',\n})\n\nchorale\n  .voice('soprano', { clef: 'treble' })\n  .add('Bb4:h(mp) C5:q D5:q | Eb5:h D5:h | C5:q(mf) Bb4:q C5:h | Bb4:w(p)')\n\nchorale\n  .voice('alto', { clef: 'treble' })\n  .add('F4:h G4:q F4:q | G4:h F4:h | Eb4:q(mf) F4:q Eb4:h | D4:w(p)')\n\nchorale\n  .voice('tenor', { clef: 'treble-8' })\n  .add('D4:h Eb4:q F4:q | Bb4:h F4:h | G4:q(mf) F4:q G4:h | F4:w(p)')\n\nchorale\n  .voice('bass', { clef: 'bass' })\n  .add('Bb2:h Eb3:q F3:q | Eb3:h Bb3:h | F3:q(mf) F2:q C3:h | Bb2:w(p)')\n\nchorale.render('#score', {\n  grandStaff: true,\n  showBarNumbers: true,\n  showPartNames: true, // labels each stave (default: true)\n  partNameStyle: 'full', // 'full' or 'abbreviated' (default)\n})\nchorale.play()\n```\n\n### Looping a Section\n\n```js\nsong.loop(2, 4) // repeat measures 2–4 during playback\nsong.play()\nsong.clearLoop() // remove the loop\n```\n\n---\n\n## Note Syntax at a Glance\n\n| Feature        | Syntax                        | Example                           |\n| :------------- | :---------------------------- | :-------------------------------- |\n| Pitch + Octave | `A`–`G` + `0`–`8`             | `C4`, `F#5`, `Bb3`                |\n| Duration       | `:w` `:h` `:q` `:e` `:s` `:t` | `C4:q` (quarter)                  |\n| Dotted         | `.` after duration            | `G4:h.`                           |\n| Rest           | `R`                           | `R:q`                             |\n| Chord          | `[...]`                       | `[C4 E4 G4]:h`                    |\n| Triplet        | `{...}`                       | `{C4 D4 E4}:q`                    |\n| Dynamic        | `(ppp)` to `(fff)`            | `C4:q(mf)`                        |\n| Tie            | `~`                           | `C4:h~C4:h`                       |\n| Slur           | `(...)`                       | `(E4:q F4:q G4:h)`                |\n| Fermata        | `(fermata)`                   | `C4:w(fermata)`                   |\n| Articulation   | `(staccato)` etc.             | `C4:q(staccato)`                  |\n| Ornament       | `(trill)` etc.                | `D4:q(trill)`                     |\n| Grace Note     | `~` before note               | `~D4 C4:q`                        |\n| Lyric          | `\"text\"` after note           | `C4:q\"hello\"`                     |\n| Chord Symbol   | `@\"text\"`                     | `@\"Cmaj7\"`                        |\n| Glissando      | `~>`                          | `C4:q ~> E4:q`                    |\n| Barline        | `\\|`                          | `C4:q D4:q \\| E4:h`               |\n| Repeat         | `\\|:` ... `:\\|`               | `\\|: C4:q D4:q :\\|`               |\n| Volta          | `1.` `2.`                     | `\\|: C4:q \\| 1. E4:h :\\| 2. F4:h` |\n| Da Capo        | `D.C.`                        | `C4:w \\| D.C.`                    |\n| Dal Segno      | `D.S.` / `Segno`              | `Segno C4:q \\| D.S.`              |\n\nFull syntax reference: [docs/syntax.md](https://github.com/bassmoses/maestro-js/blob/master/docs/syntax.md)\n\n---\n\n## API Overview\n\n### `new Song(options?)`\n\n```ts\nconst song = new Song({\n  tempo: 120, // BPM (default: 120)\n  timeSignature: '4/4',\n  key: 'C',\n  instrument: 'piano',\n  title: 'My Song',\n  composer: 'Me',\n})\n```\n\n### Writing Music\n\n```js\nsong.add('C4:q D4:q E4:q F4:q') // default voice\nsong.voice('tenor', { clef: 'treble-8' }).add('...') // named voice\n```\n\n### Rendering\n\n```js\nsong.render('#container', {\n  width: 800,\n  theme: 'dark', // 'light' (default) or 'dark'\n  showDynamics: true,\n  showBarNumbers: true,\n  showPartNames: true, // show voice labels on staves\n  partNameStyle: 'abbreviated', // 'abbreviated' or 'full'\n  grandStaff: false,\n})\n```\n\n### Playback\n\n```js\nsong.play() // start\nsong.pause() // pause\nsong.stop() // stop & reset\nsong.seekTo({ measure: 3, beat: 1 }) // jump to position\nsong.loop(2, 4) // loop measures 2–4\nsong.clearLoop() // remove loop\n```\n\n### Export & Import\n\n```js\nconst svg = song.exportSVG() // SVG string\nconst midi = await song.exportMIDI() // MIDI Uint8Array\nconst png = await song.exportPNG() // PNG buffer (requires sharp)\nconst json = song.exportJSON() // portable JSON snapshot\n\nconst restored = Song.fromJSON(json) // reconstruct from JSON\nconst fromXML = await Song.fromMusicXML(xmlString) // import MusicXML\n```\n\n### Advanced\n\n```js\nsong.transpose(2)                           // shift all notes up 2 semitones\nsong.tempoAt(5, 80)                         // tempo change at measure 5\nawait song.effects({ reverb: 0.3 })         // audio effects\nsong.on('beat', ({ measure }) => { ... })   // playback events\n```\n\nFull API reference: [docs/api.md](https://github.com/bassmoses/maestro-js/blob/master/docs/api.md)\n\n---\n\n## Node.js (Server-side)\n\n```js\nimport { Song } from '@bassmoses/maestro-js/node'\nimport fs from 'fs'\n\nconst song = new Song({ tempo: 90 })\nsong.add('G4:q A4:q B4:q C5:q | D5:w')\n\nconst svg = song.exportSVG()\nfs.writeFileSync('sheet.svg', svg)\n\nconst png = await song.exportPNG()\nfs.writeFileSync('sheet.png', png)\n```\n\n---\n\n## Plain HTML (UMD)\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/@bassmoses/maestro-js/dist/maestro.umd.min.js\"></script>\n<div id=\"sheet\"></div>\n<script>\n  const song = new Maestro.Song({ tempo: 100 })\n  song.add('C4 E4 G4 C5 | G4:h E4:h | C4:w')\n  song.render('#sheet')\n  song.play()\n</script>\n```\n\n---\n\n## Dark Mode\n\nPass `theme: 'dark'` to `render()` — staves, notes, and text automatically use light-on-dark colors:\n\n```js\nsong.render('#container', { theme: 'dark' })\n```\n\n---\n\n## Documentation\n\n- **[Note Syntax Reference](https://github.com/bassmoses/maestro-js/blob/master/docs/syntax.md)** — every notation feature explained\n- **[API Reference](https://github.com/bassmoses/maestro-js/blob/master/docs/api.md)** — complete method-by-method reference\n- **[Advanced Usage](https://github.com/bassmoses/maestro-js/blob/master/docs/advanced.md)** — multi-voice, events, effects, exports, Node.js\n\n## Examples\n\n- [Simple Melody](https://github.com/bassmoses/maestro-js/tree/master/examples/simple-melody) — Minimal usage\n- [Choir](https://github.com/bassmoses/maestro-js/tree/master/examples/choir) — SATB choral arrangement\n- [Piano Piece](https://github.com/bassmoses/maestro-js/tree/master/examples/piano-piece) — Piano with dynamics & chords\n- [React Integration](https://github.com/bassmoses/maestro-js/tree/master/examples/react-integration) — React component\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}