{"_id":"@benjamindehli/music-utils","_rev":"16-8310aac472fc374046d90e9d29029c5a","name":"@benjamindehli/music-utils","dist-tags":{"latest":"4.4.3"},"versions":{"1.1.0":{"name":"@benjamindehli/music-utils","version":"1.1.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@1.1.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"1662ab803e511fccadc9ff47119ad350fb4566fe","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-1.1.0.tgz","fileCount":3,"integrity":"sha512-/H+cPPiztd2+p+lYQ2WHpXN+bSHdd9pPSDNyREXwc4c6R+P0cT2VFJijy91oa7WjfkDsksa10YZpfOEu8h6FJw==","signatures":[{"sig":"MEYCIQC8YwktVaZ8k9YGdPwCddLva9VMRAqvbR/vYEesWX+y6gIhAIUyUZKicM9f7oKqjY4FTVPwYXUyBcWqVKbQi6rwnZ9s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37180},"jest":{"transform":{"^.+\\.js$":"babel-jest"}},"main":"./dist/index.cjs","type":"module","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"59919bee0c2d492560219c313288da27e44cf492","scripts":{"test":"jest","build":"tsup"},"_npmUser":{"name":"benjamindehli","email":"superelg@gmail.com"},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.7.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","tsup":"^8.5.1","eslint":"^10.0.3","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@babel/preset-env":"^7.29.0","jest-environment-jsdom":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_1.1.0_1773575915198_0.7924156970600562","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@benjamindehli/music-utils","version":"2.0.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@2.0.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"f3b20c249188f9141e28c3e457adeb33e0951fc5","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-2.0.0.tgz","fileCount":7,"integrity":"sha512-wfzaDXI46ymMAOuonwe/fOCeiNjS3lW4hc062XacGKNaZdLBglAyWH2EFooMmhmlwDCjgxf0g7ZFD2rStmflkg==","signatures":[{"sig":"MEUCIQDE/W0YoRlwJUckBZxDi5eohE0Ohlf2m8NItaftQJ7R1QIgLuEfXBzbmWOZS2tIrMhDoMIblSfGb7kkvW74uageDVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":153085},"jest":{"transform":{"^.+\\.js$":"babel-jest"}},"main":"./dist/index.cjs","type":"module","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"b97eecdbacdb6f73e80dc19bca14a1a1c05d0cc5","scripts":{"test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","tsup":"^8.5.1","eslint":"^10.0.3","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@babel/preset-env":"^7.29.0","jest-environment-jsdom":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_2.0.0_1773576584183_0.85468917685782","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@benjamindehli/music-utils","version":"2.1.1","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@2.1.1","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"9d0fc106353c5cb4d3a5c592c3b31ef827d95c66","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-2.1.1.tgz","fileCount":9,"integrity":"sha512-eSjDTD6IYtcmwD3+RAPfVuvfaZh8ZklIG3Nwm9Ts8NuJppN6KpiGxwTagiKojt9Fdb0QGQTkJRaZZsgWHY3TDA==","signatures":[{"sig":"MEYCIQCv3meOPlNP1aOg4DQxlvTD08Q1ZpvJJkRzIBqFTw5tFQIhAPXcLtKrYMZKea6Mzy7mz9YsCWxrgWaM6O8d+ZDwPnp3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":157068},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"efa9770f7fcc6d934ecaea6f9996e4f3e4073d47","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^5.86.0","tsup":"^8.5.1","eslint":"^10.0.3","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.0","@babel/preset-env":"^7.29.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_2.1.1_1773594117962_0.20302210086119787","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@benjamindehli/music-utils","version":"2.2.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@2.2.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"628dc094f90bb81744023d2929e83bdf76c87c1b","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-2.2.0.tgz","fileCount":93,"integrity":"sha512-OowKa/6v3nDwiwMMBknB/A4vKb6mjdxgOLUedqPWK5d253dpKhtW1HEh8ckSb8rhCQFTObPa42HCM2waftNAsA==","signatures":[{"sig":"MEQCIE1n1Ujtep/t/RpDMTSIQ0ReH2mtpXK2GM9reC8AFw1wAiAra1Zi651E3yzijhaLEtUGD4MDu6/Z6RjncyLZqrFaoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":421013},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./data/chords":{"import":"./dist/data/chords.js","require":"./dist/data/chords.cjs"},"./data/scales":{"import":"./dist/data/scales.js","require":"./dist/data/scales.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"e10d5134e51aa57d98ba1ce8f1b9a7f6f754ff18","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^5.87.0","tsup":"^8.5.1","eslint":"^10.0.3","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_2.2.0_1773787304056_0.14031597129818252","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@benjamindehli/music-utils","version":"3.0.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@3.0.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"34e692bf590f959132b928759aaec562fb884d21","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-3.0.0.tgz","fileCount":105,"integrity":"sha512-AaDVnIsxZpl7Ov5vDv650Qaba/FZDNY85OKKLhhlZfu5CS2jlZoGsac7GP3gKW0sP+Cj/Sw5X6Sa5xOakRtQ4g==","signatures":[{"sig":"MEQCIFWWD64Pktpd9FpLGhl9df+uWVkwl4KwAWBd48AySQHSAiB2wN1VjoPlBr2gaIHW5I8tt+ocS7MLN2URTxZ0c3WLPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461625},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"189dbd6b92f038de7b7623d0762465284b09e21c","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^5.87.0","tsup":"^8.5.1","eslint":"^10.0.3","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_3.0.0_1774113182768_0.22865646465447398","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@benjamindehli/music-utils","version":"3.1.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@3.1.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"78c8b3c5f6bbabcc84813dfba79c2684f074a256","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-3.1.0.tgz","fileCount":105,"integrity":"sha512-HyqGl8To8womsV58vLrnt2VYmnoy8HHDBwGHugS1dQ4z6sHOyAHT2uR+1/7oJFo2NO6dMERZpyjG7EkE+pR+tA==","signatures":[{"sig":"MEQCIBohqKi39iq5g7Z2pJ9cfb3P5D7iEmdbc8yzqig3h+poAiBjzf2Odrc5Zsta3uX4nKHIWRSykiRR9YKqSm53CgUsJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":475558},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"9cc2165d56b27a015f2e2403decfd5d858d83619","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.0.2","tsup":"^8.5.1","eslint":"^10.1.0","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_3.1.0_1774207004198_0.8021269289092294","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@benjamindehli/music-utils","version":"3.2.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@3.2.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"7f189d803ddb311dba0745ca4cabc8228a55257e","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-3.2.0.tgz","fileCount":105,"integrity":"sha512-LBur//wzeue9pHLXFoS+NB3Y9kpD8o1fG12QO3wrHOfEmMDDnSem5SCSB76dOmSN89VTaEPY/yJwo3o/6seW4A==","signatures":[{"sig":"MEYCIQC0ptzVLAj8Mcz8XfMwBixX/BCEcwFkgdB7jLips0005AIhAMGfHTWYzELOHfZDDrp5nQhDqLIcBezljnwLuHZ0KcJn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":494880},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"838354ab8224327847c8a872b7f8887e2069e1b2","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.3.0","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.2","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_3.2.0_1775428096383_0.29194388815724426","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@benjamindehli/music-utils","version":"4.0.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.0.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"daf477a4cc9c6448f216aea2e83ca864b7815299","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.0.0.tgz","fileCount":105,"integrity":"sha512-/ERGcUT5GWQrwZOl0LHEMhVsd8M5PTEOAUp1XSpMIzHrCelWtxD4AbYn9yDviLwbQ3s9S8JgCuszjHBIAtoH6g==","signatures":[{"sig":"MEQCID7xcOBlgOjlUSwhJp1cHD6e3SKe+/Ic3lwdpyGHwLCyAiApcJWR4L1RjY8VyiEe4aWgaleic/7aaaGZLiArFtF6sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":562038},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"cf4786fa9f090a8bcf3463de55dd34a07c00ad58","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.3.1","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.5.2","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.0.0_1775674773476_0.6455684008628408","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@benjamindehli/music-utils","version":"4.1.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.1.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"da174f07d58516d44ea6d41ee62acaabb757b32f","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.1.0.tgz","fileCount":105,"integrity":"sha512-TQ1TA8OaDusw3DXwe3eHuy7nZOx1Wl5gS+b789BugKeRVr/Z7Dj5Y1DJJOngIlsaYbjUKhvhqDQnw/2Ak+sTJA==","signatures":[{"sig":"MEUCIQDt57uUvFy0tPC2eHIba9NEG+G5wigmAaWeI7CQdeHlhwIgfNU5kGW7EnzXQvEtwbXl881IZI684o4yzWo97kLouj0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":579610},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"1159c214bbfd60140cabcaa24575d8679eb3874b","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.3.1","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.1.0_1775843325586_0.5976394573175394","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@benjamindehli/music-utils","version":"4.1.1","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.1.1","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"0c306dc71efe7e66b0fa3a7429ce6fad40b5cf51","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.1.1.tgz","fileCount":105,"integrity":"sha512-h0FywpNkfR/qP8G8M4P++w2uxSr3ywm3Ujls4fId3XECG9NTyj3sWwHxTUoP7Jv4Y5nlnIWtEfgkFJQXAFr0Eg==","signatures":[{"sig":"MEYCIQCHc0cxQXcRLHO5cs4aKPu5Np06zL2Wjsf49tjiNOUEhwIhAKNKkyEFbfh/JoJflRcZKOcm3G0VtD0JoOls2NM9NAN4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":580206},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"40b2cdef28632959aecbb3d6c17e73435b65c0c6","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.4.0","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.4.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.1.1_1775922713240_0.5944851263309332","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@benjamindehli/music-utils","version":"4.1.2","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.1.2","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"aaa711e13707c00f446e403e0784303a071da81a","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.1.2.tgz","fileCount":105,"integrity":"sha512-yopNbVTB915smwit4zot6VMSTgKL6sBBG4LUMFlmcxj+Tc/32OvE22oXSmnhzQoBKtNBN8qWUuyP1zhlADb6YQ==","signatures":[{"sig":"MEUCIHU540qXE6EPcx4/TQqjVslLCmTSCestQvpNQrg9qIeCAiEAiO4end1IAWUMY3kvmOKO6+nZ6LIU3HF6a6GsNsQBynM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":580218},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"6fe4cfc264044a21ee54a2571934219f0a968904","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.4.0","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.5.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.1"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.1.2_1775986667576_0.1704301635869241","host":"s3://npm-registry-packages-npm-production"}},"4.1.3":{"name":"@benjamindehli/music-utils","version":"4.1.3","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.1.3","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"7bb3ddf66f7aeec5caec78a854850dc7b5c72286","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.1.3.tgz","fileCount":105,"integrity":"sha512-JJd71pPdNFee4QzkVrBSr60WLxh5xFlEPTGpGWqnWD1LaOfUVdqaE/NjGX1OX3S82RdKifh5OzsLx2EGdX+HuA==","signatures":[{"sig":"MEQCIANXr7ZLznErq1q5SOMEECVxluU8CukazdamssG8Jp/yAiBmDN+cM8NlGnN6d5wzv7naZFKR/Y2lx1BNFxHTtrX5Nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":577098},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"8f45b2b5f153d30e990b188f2241795074ea46a5","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.4.1","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.5.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.2","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.2"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.1.3_1776205172826_0.9854398747804427","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@benjamindehli/music-utils","version":"4.2.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.2.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"b55797a94387818590ac449a7f7216001e7214b8","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.2.0.tgz","fileCount":107,"integrity":"sha512-ae6s5BYT90U5EHZGa/s64W2mGX1oUXguOruiO0fwCDjxiG5XfZJuZP87Nn4Jdzqkm2C993EDT+9P1524MX8wwg==","signatures":[{"sig":"MEQCIHLGYeb6pwZdT2ONgt9f1AWKILqHwD5VRkbptYTOLX1ZAiAoTfOOPLyJA+RckNdWHeo2jp4BfT/ZtSOZ+DJJJK5LiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":640768},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"42bea571becd549fe07e1c8ea7846e5cb876c06d","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.4.1","tsup":"^8.5.1","eslint":"^10.2.0","globals":"^17.5.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.58.2"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.2.0_1776455305750_0.12324200287011378","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"@benjamindehli/music-utils","version":"4.3.0","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.3.0","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"cfa0033ad98fad1dd90c7796fdbf1e716da7cd5a","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.3.0.tgz","fileCount":107,"integrity":"sha512-IJReVTA/G5VfDhX/kJpdYDyirGiL4dL0AClHHBfutQCBruwDOTJygdMx2+MARHSMmZqqR7Th5mwqBxbuWPAjug==","signatures":[{"sig":"MEYCIQCyLO/aZAOOlLYrBqHq2mMR4t/utG/JqoJzCMfH34t+TgIhAJb+3R0aKPdmcIvaht4EjbUbJbSLLFlcJKUgenbos0vD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":652508},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"d46c055a0d1e4572da3e71d10e90eab2eb311fa9","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f54d4020-ae1e-4b27-b31f-10b4bfd4043a"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.3.0","knip":"^6.5.0","tsup":"^8.5.1","eslint":"^10.2.1","globals":"^17.5.0","ts-node":"^10.9.2","jest-util":"^30.3.0","@eslint/js":"^10.0.1","babel-jest":"^30.3.0","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^25.6.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.59.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.3.0_1776725452461_0.6671680376042042","host":"s3://npm-registry-packages-npm-production"}},"4.4.2":{"name":"@benjamindehli/music-utils","version":"4.4.2","keywords":["javascript","midi"],"author":{"name":"Benjamin Dehli"},"_id":"@benjamindehli/music-utils@4.4.2","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"homepage":"https://github.com/benjamindehli/music-utils#readme","bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"dist":{"shasum":"25d984d3bd307896cfc1b43d449ea6bd9d1770c3","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.4.2.tgz","fileCount":113,"integrity":"sha512-2OZwZdwLwsVBUAPDU+ZlM5Uttn6nNKSVap4Aj89Uf8s8o04KPS2Eg2yawI9A/mkloAHTaxu7s/Zy3MKUVqrIpg==","signatures":[{"sig":"MEUCIE31y4C3qA2QcKjblLGAgFKVTZNtle7XPWKdXFtkY/wEAiEAlwG5dh8YcToDRpA3w6lEkLJ3QOmQ2/R1vm7uIMHnQbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":821787},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"},"./helpers/spellingHelpers":{"import":"./dist/helpers/spellingHelpers.js","require":"./dist/helpers/spellingHelpers.cjs"}},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"gitHead":"3c31a303b95f2579354f451e61e8150324578bf4","scripts":{"knip":"knip","test":"jest","build":"tsup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:567e129d-4432-40e7-b5e7-63fd2a59cc7e"}},"repository":{"url":"git+https://github.com/benjamindehli/music-utils.git","type":"git"},"_npmVersion":"12.0.1","description":"Detect chord names from MIDI note input","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"packageManager":"yarn@4.5.0","devDependencies":{"jest":"^30.4.2","knip":"^6.27.0","tsup":"^8.5.1","eslint":"^10.7.0","globals":"^17.7.0","ts-node":"^10.9.2","jest-util":"^30.4.1","@eslint/js":"^10.0.1","babel-jest":"^30.4.1","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/node":"^26.1.1","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/music-utils_4.4.2_1784591010832_0.20652654666100445","host":"s3://npm-registry-packages-npm-production"}},"4.4.3":{"version":"4.4.3","name":"@benjamindehli/music-utils","description":"Detect chord names from MIDI note input","keywords":["javascript","midi"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./classes/Chord":{"import":"./dist/classes/Chord.js","require":"./dist/classes/Chord.cjs"},"./classes/ChordType":{"import":"./dist/classes/ChordType.js","require":"./dist/classes/ChordType.cjs"},"./classes/Interval":{"import":"./dist/classes/Interval.js","require":"./dist/classes/Interval.cjs"},"./classes/Midi":{"import":"./dist/classes/Midi.js","require":"./dist/classes/Midi.cjs"},"./classes/Note":{"import":"./dist/classes/Note.js","require":"./dist/classes/Note.cjs"},"./classes/NoteSelection":{"import":"./dist/classes/NoteSelection.js","require":"./dist/classes/NoteSelection.cjs"},"./classes/Scale":{"import":"./dist/classes/Scale.js","require":"./dist/classes/Scale.cjs"},"./classes/ScaleType":{"import":"./dist/classes/ScaleType.js","require":"./dist/classes/ScaleType.cjs"},"./classes/SelectionType":{"import":"./dist/classes/SelectionType.js","require":"./dist/classes/SelectionType.cjs"},"./data/chordTypes":{"import":"./dist/data/chordTypes.js","require":"./dist/data/chordTypes.cjs"},"./data/intervals":{"import":"./dist/data/intervals.js","require":"./dist/data/intervals.cjs"},"./data/notes":{"import":"./dist/data/notes.js","require":"./dist/data/notes.cjs"},"./data/scaleTypes":{"import":"./dist/data/scaleTypes.js","require":"./dist/data/scaleTypes.cjs"},"./data/selectionTypes":{"import":"./dist/data/selectionTypes.js","require":"./dist/data/selectionTypes.cjs"},"./helpers/matchHelpers":{"import":"./dist/helpers/matchHelpers.js","require":"./dist/helpers/matchHelpers.cjs"},"./helpers/noteHelpers":{"import":"./dist/helpers/noteHelpers.js","require":"./dist/helpers/noteHelpers.cjs"},"./helpers/spellingHelpers":{"import":"./dist/helpers/spellingHelpers.js","require":"./dist/helpers/spellingHelpers.cjs"}},"types":"./dist/index.d.ts","sideEffects":false,"scripts":{"build":"tsup","test":"jest","knip":"knip"},"repository":{"type":"git","url":"git+https://github.com/benjamindehli/music-utils.git"},"author":{"name":"Benjamin Dehli"},"bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"funding":["https://ko-fi.com/benjamindehli","https://store.dehlimusikk.no/coffee"],"homepage":"https://github.com/benjamindehli/music-utils#readme","devDependencies":{"@babel/core":"^7.29.0","@babel/preset-env":"^7.29.2","@babel/preset-typescript":"^7.28.5","@eslint/js":"^10.0.1","@types/jest":"^30.0.0","@types/node":"^26.1.1","@typescript-eslint/parser":"^8.65.0","babel-jest":"^30.4.1","eslint":"^10.7.0","globals":"^17.7.0","jest":"^30.4.2","jest-util":"^30.4.1","knip":"^6.27.0","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^6.0.3"},"packageManager":"yarn@4.5.0","gitHead":"36e534d53d5e25845a7df09456ee0045bd563f4d","_id":"@benjamindehli/music-utils@4.4.3","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-o51yk81hT27Wsm6saqlhSDWC2+PCN9dqVC+pOofBzjRsLClsFh5Tjp/Q4ly3wF6V2VbjtQ1Uk6tZwern51abwQ==","shasum":"6858e42a62a0fe7be5f82ec58950a6d0e8ffffb5","tarball":"https://registry.npmjs.org/@benjamindehli/music-utils/-/music-utils-4.4.3.tgz","fileCount":113,"unpackedSize":937655,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@benjamindehli%2fmusic-utils@4.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBcoslp8hL/sRZvFv8ZBsPGGh7N52us7JZbbbgJVj78hAiEAq5GSvmJw3Xg3TOR9fV32E+W7+V6RqBAtLabj6K0qpRw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:567e129d-4432-40e7-b5e7-63fd2a59cc7e"}},"directories":{},"maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/music-utils_4.4.3_1784596774181_0.8902854904045128"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T11:58:35.142Z","modified":"2026-07-21T01:19:34.665Z","1.1.0":"2026-03-15T11:58:35.350Z","2.0.0":"2026-03-15T12:09:44.353Z","2.1.1":"2026-03-15T17:01:58.105Z","2.2.0":"2026-03-17T22:41:44.209Z","3.0.0":"2026-03-21T17:13:02.930Z","3.1.0":"2026-03-22T19:16:44.361Z","3.2.0":"2026-04-05T22:28:16.535Z","4.0.0":"2026-04-08T18:59:33.688Z","4.1.0":"2026-04-10T17:48:47.610Z","4.1.1":"2026-04-11T15:51:53.408Z","4.1.2":"2026-04-12T09:37:47.713Z","4.1.3":"2026-04-14T22:19:32.961Z","4.2.0":"2026-04-17T19:48:26.067Z","4.3.0":"2026-04-20T22:50:52.608Z","4.4.2":"2026-07-20T23:43:30.996Z","4.4.3":"2026-07-21T01:19:34.385Z"},"bugs":{"url":"https://github.com/benjamindehli/music-utils/issues"},"author":{"name":"Benjamin Dehli"},"homepage":"https://github.com/benjamindehli/music-utils#readme","keywords":["javascript","midi"],"repository":{"type":"git","url":"git+https://github.com/benjamindehli/music-utils.git"},"description":"Detect chord names from MIDI note input","maintainers":[{"name":"benjamindehli","email":"superelg@gmail.com"}],"readme":"# @benjamindehli/music-utils\n\nMusic theory utilities for detecting chords and scales from MIDI note input. Zero dependencies.\n\n## Installation\n\n```sh\nnpm install @benjamindehli/music-utils\n```\n\n## Quick start\n\n```ts\nimport { getChordsFromSelectedNotes, getScalesFromSelectedNotes } from \"@benjamindehli/music-utils\";\n\n// Detect chords from held MIDI notes (C, E, G = C major)\nconst chords = getChordsFromSelectedNotes([60, 64, 67]);\n// → [ChordMatch { chord: Chord { rootNote: C, chordType: major }, matchType: \"exactRoot\" }, ...]\n\n// Detect scales from held MIDI notes (C major scale)\nconst scales = getScalesFromSelectedNotes([60, 62, 64, 65, 67, 69, 71]);\n// → [ScaleMatch { scale: Scale { rootNote: C, scaleType: \"major scale\" }, matchType: \"exactRoot\" }, ...]\n```\n\n## Chord detection\n\n### `getChordsFromSelectedNotes(noteNumbers)`\n\nTakes an array of absolute MIDI note numbers and returns all matching chords, ranked by match quality.\n\n```ts\nimport { getChordsFromSelectedNotes } from \"@benjamindehli/music-utils\";\n\nconst results = getChordsFromSelectedNotes([60, 64, 67]); // C, E, G\n\nfor (const { chord, matchType } of results) {\n    console.log(`${chord.rootNote?.name} ${chord.chordType?.name} (${matchType})`);\n    // \"C major (exactRoot)\"\n}\n```\n\nEach result is a `ChordMatch` with a `matchType` that describes how the notes relate to the chord:\n\n| `matchType` | Description |\n|---|---|\n| `exactRoot` | Notes match the chord exactly, with the root as the lowest note |\n| `invertedRoot` | Notes match the chord, but in an inversion |\n| `nonRoot` | Notes match a chord type rooted on a different note |\n| `slashChord` | Notes match a chord with an explicit bass note (e.g. C/E) |\n\n**Slash chords** include a `bassNote` on the `chord` object:\n\n```ts\nconst results = getChordsFromSelectedNotes([64, 67, 72]); // E, G, C\nconst slash = results.find((r) => r.matchType === \"slashChord\");\n\nconsole.log(slash?.chord.bassNote?.name); // \"E\"\n// → C/E\n```\n\n## Scale detection\n\n### `getScalesFromSelectedNotes(noteNumbers)`\n\nTakes an array of absolute MIDI note numbers and returns all matching scales.\n\n```ts\nimport { getScalesFromSelectedNotes } from \"@benjamindehli/music-utils\";\n\nconst results = getScalesFromSelectedNotes([60, 62, 64, 65, 67, 69, 71]); // C major\n\nfor (const { scale, matchType } of results) {\n    console.log(`${scale.rootNote?.name} ${scale.scaleType?.name} (${matchType})`);\n    // \"C major scale (exactRoot)\"\n}\n```\n\n`matchType` is either `\"exactRoot\"` (the lowest note is the scale root) or `\"nonRoot\"`.\n\n## Note spelling (sharps vs flats)\n\nA pitch class has several valid names (`A#` = `Bb`), and the correct one depends on context — in a diatonic scale each letter A–G is used once, and every note's letter is fixed by its interval above the root. `Scale.getNotes()` and `Chord.getNotes()` return notes spelled this way, so an F major scale reads `Bb`, not `A#`.\n\n```ts\nconst scale = getScalesFromSelectedNotes([65, 67, 69, 70, 72, 74, 76])[0]?.scale; // F major\nscale?.getNotes().map((n) => n.name);\n// → [\"F\", \"G\", \"A\", \"Bb\", \"C\", \"D\", \"E\"]\n\nconst chord = getChordsFromSelectedNotes([65, 68, 72])[0]?.chord; // F minor\nchord?.getNotes().map((n) => n.name);\n// → [\"F\", \"Ab\", \"C\"]   (not \"F\", \"G#\", \"C\")\n```\n\nThis also applies to the `rootNote` of a detected `Scale` or `Chord` (and a slash chord's `bassNote`): the root is spelled with the fewest accidentals for its type, so a detected Gb major scale reports `rootNote.name === \"Gb\"` (not `\"F#\"`), while an Eb minor chord reports `\"Eb\"` (not `\"D#\"`). The `Note.number` (pitch class) is unchanged, so this never affects detection — only naming.\n\n```ts\nconst scale = getScalesFromSelectedNotes([66, 68, 70, 71, 73, 75, 77])[0]?.scale; // Gb major\nscale?.rootNote?.name; // \"Gb\"\n```\n\nThe underlying `getSpelledNotes(rootPitchClass, halfSteps, preferredRootName?)` helper is exported for direct use; `preferredRootName` (e.g. `\"F#\"`) pins the tonic spelling.\n\n## Web MIDI integration\n\nThe `Midi` class wraps the Web MIDI API and wires up your message handler to all connected devices.\n\n```ts\nimport { Midi, getChordsFromSelectedNotes } from \"@benjamindehli/music-utils\";\n\nconst midi = new Midi();\nconst heldNotes = new Set<number>();\n\nmidi.init((event: MIDIMessageEvent) => {\n    const [status, note, velocity] = event.data;\n    const isNoteOn = (status & 0xf0) === 0x90 && velocity > 0;\n    const isNoteOff = (status & 0xf0) === 0x80 || ((status & 0xf0) === 0x90 && velocity === 0);\n\n    if (isNoteOn) heldNotes.add(note);\n    if (isNoteOff) heldNotes.delete(note);\n\n    const chords = getChordsFromSelectedNotes([...heldNotes]);\n    console.log(chords);\n});\n```\n\n## API reference\n\n### Helper functions\n\n| Function | Description |\n|---|---|\n| `getChordsFromSelectedNotes(noteNumbers)` | Detect chords from MIDI note numbers |\n| `getScalesFromSelectedNotes(noteNumbers)` | Detect scales from MIDI note numbers |\n| `getNoteFromNoteNumber(noteNumber)` | Look up a `Note` object from a MIDI note number |\n| `normalizeHalfStep(noteNumber)` | Reduce a MIDI note number to a pitch class (0–11) |\n| `normalizeHalfSteps(noteNumbers)` | Reduce an array to unique, sorted pitch classes (0–11) |\n| `getRelativeNoteNumber(noteNumber, rootNoteNumber)` | Get semitone distance from a root note |\n| `getAbsoluteNoteNumber(relativeNoteNumber, rootNoteNumber)` | Convert a relative interval back to a pitch class |\n| `getSpelledNotes(rootPitchClass, halfSteps, preferredRootName?)` | Spell a scale/chord's notes with correct sharps/flats |\n| `parseNoteName(name)` | Parse a note name (e.g. `\"Bb\"`) into a letter index + accidental |\n\n### Classes\n\n#### `ChordMatch`\n\n| Property | Type | Description |\n|---|---|---|\n| `chord` | `Chord` | The matched chord |\n| `matchType` | `\"exactRoot\" \\| \"invertedRoot\" \\| \"nonRoot\" \\| \"slashChord\"` | How the notes relate to the chord |\n\n#### `Chord`\n\n| Property | Type | Description |\n|---|---|---|\n| `rootNote` | `Note` | The chord's root note |\n| `chordType` | `ChordType` | The chord quality (major, minor7, etc.) |\n| `bassNote` | `Note \\| undefined` | The bass note for slash chords |\n| `getNotes()` | `() => Note[]` | The chord's notes, correctly spelled relative to the root |\n\n#### `ScaleMatch`\n\n| Property | Type | Description |\n|---|---|---|\n| `scale` | `Scale` | The matched scale |\n| `matchType` | `\"exactRoot\" \\| \"nonRoot\"` | Whether the lowest note is the scale root |\n\n#### `Scale`\n\n| Property | Type | Description |\n|---|---|---|\n| `rootNote` | `Note` | The scale's root note |\n| `scaleType` | `ScaleType` | The scale type (major scale, dorian mode, etc.) |\n| `getNotes()` | `() => Note[]` | The scale's notes, correctly spelled (sharps or flats per key) |\n\n#### `Note`\n\n| Property | Type | Description |\n|---|---|---|\n| `name` | `string` | Note name, e.g. `\"C\"`, `\"C#\"` |\n| `number` | `number` | Pitch class 0–11 |\n\n#### `NoteSelection` (base for `ChordType` / `ScaleType`)\n\n| Property | Type | Description |\n|---|---|---|\n| `name` | `string` | e.g. `\"major\"`, `\"natural minor scale\"` |\n| `halfSteps` | `number[]` | Semitone intervals that define the chord or scale |\n| `getParsedHalfSteps()` | `() => number[]` | Returns normalized (0–11), deduplicated, sorted half steps |\n\n### Data\n\nThe library ships with pre-built arrays you can import directly:\n\n```ts\nimport { chordTypes, scaleTypes, notes, intervals } from \"@benjamindehli/music-utils\";\n```\n\n| Export | Count | Description |\n|---|---|---|\n| `chordTypes` | 130 | `ChordType[]` — triads, sevenths, ninths, extended, altered, suspended, slash, and more |\n| `scaleTypes` | 60+ | `ScaleType[]` — modes, pentatonics, blues, bebop, exotic/world scales |\n| `notes` | 12 | `Note[]` — chromatic notes C through B (pitch classes 0–11) |\n| `intervals` | 26 | `Interval[]` — P1 through A15, each with semitone count and full name |\n\n## Deep imports\n\nAll modules are individually accessible for tree-shaking in environments that need it:\n\n```ts\nimport Chord from \"@benjamindehli/music-utils/classes/Chord\";\nimport { getChordsFromSelectedNotes } from \"@benjamindehli/music-utils/helpers/matchHelpers\";\nimport chordTypes from \"@benjamindehli/music-utils/data/chordTypes\";\n```\n\nAvailable paths: `classes/Chord`, `classes/ChordType`, `classes/Interval`, `classes/Midi`, `classes/Note`, `classes/NoteSelection`, `classes/Scale`, `classes/ScaleType`, `classes/SelectionType`, `data/chordTypes`, `data/intervals`, `data/notes`, `data/scaleTypes`, `data/selectionTypes`, `helpers/matchHelpers`, `helpers/noteHelpers`, `helpers/spellingHelpers`.\n\n## Formats\n\nShips as both ESM and CommonJS. Node.js and bundlers pick the right format automatically.\n\n## Support the project\n\n- [Ko-fi](https://ko-fi.com/benjamindehli)\n- [Dehli Musikk store](https://store.dehlimusikk.no/coffee)\n","readmeFilename":"README.md"}