From 943c49c021707da6d4c1ce70398b0c7403ea0177 Mon Sep 17 00:00:00 2001 From: danigb Date: Thu, 4 Jan 2024 10:31:32 +0100 Subject: [PATCH 1/3] fix: export Named for backwards compatibility --- packages/pitch/index.ts | 5 +++++ packages/tonal/browser/tonal.min.js.map | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/pitch/index.ts b/packages/pitch/index.ts index 63d8b172..a1f1442a 100644 --- a/packages/pitch/index.ts +++ b/packages/pitch/index.ts @@ -2,6 +2,11 @@ export interface NamedPitch { readonly name: string; } +/*** @deprecated use NamedPitch */ +export interface Named { + readonly name: string; +} + export interface NotFound extends NamedPitch { readonly empty: true; readonly name: ""; diff --git a/packages/tonal/browser/tonal.min.js.map b/packages/tonal/browser/tonal.min.js.map index 7c0943b0..dd94d472 100644 --- a/packages/tonal/browser/tonal.min.js.map +++ b/packages/tonal/browser/tonal.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../index.ts", "../../pitch/index.ts", "../../pitch-interval/index.ts", "../../pitch-note/index.ts", "../../pitch-distance/index.ts", "../../core/index.ts", "../../abc-notation/index.ts", "../../array/index.ts", "../../collection/index.ts", "../../pcset/index.ts", "../../chord-type/index.ts", "../../chord-type/data.ts", "../../chord-detect/index.ts", "../../scale-type/index.ts", "../../scale-type/data.ts", "../../chord/index.ts", "../../duration-value/data.ts", "../../duration-value/index.ts", "../../interval/index.ts", "../../midi/index.ts", "../../note/index.ts", "../../roman-numeral/index.ts", "../../key/index.ts", "../../mode/index.ts", "../../progression/index.ts", "../../range/index.ts", "../../scale/index.ts", "../../time-signature/index.ts", "../../voice-leading/index.ts", "../../voicing-dictionary/index.ts", "../../voicing-dictionary/data.ts", "../../voicing/index.ts"], - "sourcesContent": ["import AbcNotation from \"@tonaljs/abc-notation\";\nimport * as Array from \"@tonaljs/array\";\nimport Chord from \"@tonaljs/chord\";\nimport ChordType from \"@tonaljs/chord-type\";\nimport Collection from \"@tonaljs/collection\";\nimport * as Core from \"@tonaljs/core\";\nimport DurationValue from \"@tonaljs/duration-value\";\nimport Interval from \"@tonaljs/interval\";\nimport Key from \"@tonaljs/key\";\nimport Midi from \"@tonaljs/midi\";\nimport Mode from \"@tonaljs/mode\";\nimport Note from \"@tonaljs/note\";\nimport Pcset from \"@tonaljs/pcset\";\nimport Progression from \"@tonaljs/progression\";\nimport Range from \"@tonaljs/range\";\nimport RomanNumeral from \"@tonaljs/roman-numeral\";\nimport Scale from \"@tonaljs/scale\";\nimport ScaleType from \"@tonaljs/scale-type\";\nimport TimeSignature from \"@tonaljs/time-signature\";\nimport VoiceLeading from \"@tonaljs/voice-leading\";\nimport Voicing from \"@tonaljs/voicing\";\nimport VoicingDictionary from \"@tonaljs/voicing-dictionary\";\n\nexport * from \"@tonaljs/core\";\n\n// deprecated (backwards compatibility)\nconst Tonal = Core;\nconst PcSet = Pcset;\nconst ChordDictionary = ChordType;\nconst ScaleDictionary = ScaleType;\n\nexport {\n AbcNotation,\n Array,\n Chord,\n ChordDictionary,\n ChordType,\n Collection,\n Core,\n DurationValue,\n Interval,\n Key,\n Midi,\n Mode,\n Note,\n PcSet,\n Pcset,\n Progression,\n Range,\n RomanNumeral,\n Scale,\n ScaleDictionary,\n ScaleType,\n TimeSignature,\n Tonal,\n VoiceLeading,\n Voicing,\n VoicingDictionary,\n};\n", "export interface NamedPitch {\n readonly name: string;\n}\n\nexport interface NotFound extends NamedPitch {\n readonly empty: true;\n readonly name: \"\";\n}\n\nexport function isNamedPitch(src: unknown): src is NamedPitch {\n return src !== null &&\n typeof src === \"object\" &&\n \"name\" in src &&\n typeof src.name === \"string\"\n ? true\n : false;\n}\n\ntype Fifths = number;\ntype Octaves = number;\nexport type Direction = 1 | -1;\n\nexport type PitchClassCoordinates = [Fifths];\nexport type NoteCoordinates = [Fifths, Octaves];\nexport type IntervalCoordinates = [Fifths, Octaves, Direction];\nexport type PitchCoordinates =\n | PitchClassCoordinates\n | NoteCoordinates\n | IntervalCoordinates;\n\n/**\n * Pitch properties\n *\n * - {number} step - The step number: 0 = C, 1 = D, ... 6 = B\n * - {number} alt - Number of alterations: -2 = 'bb', -1 = 'b', 0 = '', 1 = '#', ...\n * - {number} [oct] = The octave (undefined when is a coord class)\n * - {number} [dir] = Interval direction (undefined when is not an interval)\n */\nexport interface Pitch {\n readonly step: number;\n readonly alt: number;\n readonly oct?: number; // undefined for pitch classes\n readonly dir?: Direction; // undefined for notes\n}\n\nconst SIZES = [0, 2, 4, 5, 7, 9, 11];\nexport const chroma = ({ step, alt }: Pitch) => (SIZES[step] + alt + 120) % 12;\n\nexport const height = ({ step, alt, oct, dir = 1 }: Pitch) =>\n dir * (SIZES[step] + alt + 12 * (oct === undefined ? -100 : oct));\n\nexport const midi = (pitch: Pitch) => {\n const h = height(pitch);\n return pitch.oct !== undefined && h >= -12 && h <= 115 ? h + 12 : null;\n};\n\nexport function isPitch(pitch: unknown): pitch is Pitch {\n return pitch !== null &&\n typeof pitch === \"object\" &&\n \"step\" in pitch &&\n typeof pitch.step === \"number\" &&\n \"alt\" in pitch &&\n typeof pitch.alt === \"number\"\n ? true\n : false;\n}\n\n// The number of fifths of [C, D, E, F, G, A, B]\nconst FIFTHS = [0, 2, 4, -1, 1, 3, 5];\n// The number of octaves it span each step\nconst STEPS_TO_OCTS = FIFTHS.map((fifths: number) =>\n Math.floor((fifths * 7) / 12),\n);\n\n/**\n * Get coordinates from pitch object\n */\nexport function coordinates(pitch: Pitch): PitchCoordinates {\n const { step, alt, oct, dir = 1 } = pitch;\n const f = FIFTHS[step] + 7 * alt;\n if (oct === undefined) {\n return [dir * f];\n }\n const o = oct - STEPS_TO_OCTS[step] - 4 * alt;\n return [dir * f, dir * o];\n}\n\n// We need to get the steps from fifths\n// Fifths for CDEFGAB are [ 0, 2, 4, -1, 1, 3, 5 ]\n// We add 1 to fifths to avoid negative numbers, so:\n// for [\"F\", \"C\", \"G\", \"D\", \"A\", \"E\", \"B\"] we have:\nconst FIFTHS_TO_STEPS = [3, 0, 4, 1, 5, 2, 6];\n\n/**\n * Get pitch from coordinate objects\n */\nexport function pitch(coord: PitchCoordinates): Pitch {\n const [f, o, dir] = coord;\n const step = FIFTHS_TO_STEPS[unaltered(f)];\n const alt = Math.floor((f + 1) / 7);\n if (o === undefined) {\n return { step, alt, dir };\n }\n const oct = o + 4 * alt + STEPS_TO_OCTS[step];\n return { step, alt, oct, dir };\n}\n\n// Return the number of fifths as if it were unaltered\nfunction unaltered(f: number): number {\n const i = (f + 1) % 7;\n return i < 0 ? 7 + i : i;\n}\n", "import {\n coordinates,\n Direction,\n IntervalCoordinates,\n isNamedPitch,\n isPitch,\n NamedPitch,\n Pitch,\n pitch,\n PitchCoordinates,\n} from \"@tonaljs/pitch\";\n\nconst fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport type IntervalName = string;\nexport type IntervalLiteral = IntervalName | Pitch | NamedPitch;\n\ntype Quality =\n | \"dddd\"\n | \"ddd\"\n | \"dd\"\n | \"d\"\n | \"m\"\n | \"M\"\n | \"P\"\n | \"A\"\n | \"AA\"\n | \"AAA\"\n | \"AAAA\";\ntype Type = \"perfectable\" | \"majorable\";\n\nexport interface Interval extends Pitch, NamedPitch {\n readonly empty: boolean;\n readonly name: IntervalName;\n readonly num: number;\n readonly q: Quality;\n readonly type: Type;\n readonly step: number;\n readonly alt: number;\n readonly dir: Direction;\n readonly simple: number;\n readonly semitones: number;\n readonly chroma: number;\n readonly coord: IntervalCoordinates;\n readonly oct: number;\n}\n\nexport interface NoInterval extends Partial {\n readonly empty: true;\n readonly name: \"\";\n readonly acc: \"\";\n}\n\nconst NoInterval: NoInterval = { empty: true, name: \"\", acc: \"\" };\n\n// shorthand tonal notation (with quality after number)\nconst INTERVAL_TONAL_REGEX = \"([-+]?\\\\d+)(d{1,4}|m|M|P|A{1,4})\";\n// standard shorthand notation (with quality before number)\nconst INTERVAL_SHORTHAND_REGEX = \"(AA|A|P|M|m|d|dd)([-+]?\\\\d+)\";\nconst REGEX = new RegExp(\n \"^\" + INTERVAL_TONAL_REGEX + \"|\" + INTERVAL_SHORTHAND_REGEX + \"$\",\n);\n\ntype IntervalTokens = [string, string];\n\n/**\n * @private\n */\nexport function tokenizeInterval(str?: IntervalName): IntervalTokens {\n const m = REGEX.exec(`${str}`);\n if (m === null) {\n return [\"\", \"\"];\n }\n return m[1] ? [m[1], m[2]] : [m[4], m[3]];\n}\n\nconst cache: { [key in string]: Interval | NoInterval } = {};\n\n/**\n * Get interval properties. It returns an object with:\n *\n * - name: the interval name\n * - num: the interval number\n * - type: 'perfectable' or 'majorable'\n * - q: the interval quality (d, m, M, A)\n * - dir: interval direction (1 ascending, -1 descending)\n * - simple: the simplified number\n * - semitones: the size in semitones\n * - chroma: the interval chroma\n *\n * @param {string} interval - the interval name\n * @return {Object} the interval properties\n *\n * @example\n * import { interval } from '@tonaljs/core'\n * interval('P5').semitones // => 7\n * interval('m3').type // => 'majorable'\n */\nexport function interval(src: IntervalLiteral): Interval | NoInterval {\n return typeof src === \"string\"\n ? cache[src] || (cache[src] = parse(src))\n : isPitch(src)\n ? interval(pitchName(src))\n : isNamedPitch(src)\n ? interval(src.name)\n : NoInterval;\n}\n\nconst SIZES = [0, 2, 4, 5, 7, 9, 11];\nconst TYPES = \"PMMPPMM\";\nfunction parse(str?: string): Interval | NoInterval {\n const tokens = tokenizeInterval(str);\n if (tokens[0] === \"\") {\n return NoInterval;\n }\n const num = +tokens[0];\n const q = tokens[1] as Quality;\n const step = (Math.abs(num) - 1) % 7;\n const t = TYPES[step];\n if (t === \"M\" && q === \"P\") {\n return NoInterval;\n }\n const type = t === \"M\" ? \"majorable\" : \"perfectable\";\n\n const name = \"\" + num + q;\n const dir = num < 0 ? -1 : 1;\n const simple = num === 8 || num === -8 ? num : dir * (step + 1);\n const alt = qToAlt(type, q);\n const oct = Math.floor((Math.abs(num) - 1) / 7);\n const semitones = dir * (SIZES[step] + alt + 12 * oct);\n const chroma = (((dir * (SIZES[step] + alt)) % 12) + 12) % 12;\n const coord = coordinates({ step, alt, oct, dir }) as IntervalCoordinates;\n return {\n empty: false,\n name,\n num,\n q,\n step,\n alt,\n dir,\n type,\n simple,\n semitones,\n chroma,\n coord,\n oct,\n };\n}\n\n/**\n * @private\n *\n * forceDescending is used in the case of unison (#243)\n */\nexport function coordToInterval(\n coord: PitchCoordinates,\n forceDescending?: boolean,\n): Interval {\n const [f, o = 0] = coord;\n const isDescending = f * 7 + o * 12 < 0;\n const ivl: IntervalCoordinates =\n forceDescending || isDescending ? [-f, -o, -1] : [f, o, 1];\n return interval(pitch(ivl)) as Interval;\n}\n\nfunction qToAlt(type: Type, q: string): number {\n return (q === \"M\" && type === \"majorable\") ||\n (q === \"P\" && type === \"perfectable\")\n ? 0\n : q === \"m\" && type === \"majorable\"\n ? -1\n : /^A+$/.test(q)\n ? q.length\n : /^d+$/.test(q)\n ? -1 * (type === \"perfectable\" ? q.length : q.length + 1)\n : 0;\n}\n\n// return the interval name of a pitch\nfunction pitchName(props: Pitch): string {\n const { step, alt, oct = 0, dir } = props;\n if (!dir) {\n return \"\";\n }\n const calcNum = step + 1 + 7 * oct;\n // this is an edge case: descending pitch class unison (see #243)\n const num = calcNum === 0 ? step + 1 : calcNum;\n const d = dir < 0 ? \"-\" : \"\";\n const type = TYPES[step] === \"M\" ? \"majorable\" : \"perfectable\";\n const name = d + num + altToQ(type, alt);\n return name;\n}\n\nfunction altToQ(type: Type, alt: number): Quality {\n if (alt === 0) {\n return type === \"majorable\" ? \"M\" : \"P\";\n } else if (alt === -1 && type === \"majorable\") {\n return \"m\";\n } else if (alt > 0) {\n return fillStr(\"A\", alt) as Quality;\n } else {\n return fillStr(\"d\", type === \"perfectable\" ? alt : alt + 1) as Quality;\n }\n}\n", "import {\n coordinates,\n isNamedPitch,\n isPitch,\n NamedPitch,\n Pitch,\n pitch,\n PitchCoordinates,\n} from \"@tonaljs/pitch\";\n\nconst fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport type NoteWithOctave = string;\nexport type PcName = string;\nexport type NoteName = NoteWithOctave | PcName;\nexport type NoteLiteral = NoteName | Pitch | NamedPitch;\n\nexport interface Note extends Pitch, NamedPitch {\n readonly empty: boolean;\n readonly name: NoteName;\n readonly letter: string;\n readonly acc: string;\n readonly pc: PcName;\n readonly chroma: number;\n readonly height: number;\n readonly coord: PitchCoordinates;\n readonly midi: number | null;\n readonly freq: number | null;\n}\n\nexport interface NoNote extends Partial {\n empty: true;\n name: \"\";\n pc: \"\";\n acc: \"\";\n}\nconst NoNote: NoNote = { empty: true, name: \"\", pc: \"\", acc: \"\" };\n\nconst cache: Map = new Map();\n\nexport const stepToLetter = (step: number) => \"CDEFGAB\".charAt(step);\nexport const altToAcc = (alt: number): string =>\n alt < 0 ? fillStr(\"b\", -alt) : fillStr(\"#\", alt);\nexport const accToAlt = (acc: string): number =>\n acc[0] === \"b\" ? -acc.length : acc.length;\n\n/**\n * Given a note literal (a note name or a note object), returns the Note object\n * @example\n * note('Bb4') // => { name: \"Bb4\", midi: 70, chroma: 10, ... }\n */\nexport function note(src: NoteLiteral): Note | NoNote {\n const stringSrc = JSON.stringify(src);\n\n const cached = cache.get(stringSrc);\n if (cached) {\n return cached;\n }\n\n const value =\n typeof src === \"string\"\n ? parse(src)\n : isPitch(src)\n ? note(pitchName(src))\n : isNamedPitch(src)\n ? note(src.name)\n : NoNote;\n cache.set(stringSrc, value);\n return value;\n}\n\ntype NoteTokens = [string, string, string, string];\n\nconst REGEX = /^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\\d*)\\s*(.*)$/;\n\n/**\n * @private\n */\nexport function tokenizeNote(str: string): NoteTokens {\n const m = REGEX.exec(str) as string[];\n return [m[1].toUpperCase(), m[2].replace(/x/g, \"##\"), m[3], m[4]];\n}\n\n/**\n * @private\n */\nexport function coordToNote(noteCoord: PitchCoordinates): Note {\n return note(pitch(noteCoord)) as Note;\n}\n\nconst mod = (n: number, m: number) => ((n % m) + m) % m;\n\nconst SEMI = [0, 2, 4, 5, 7, 9, 11];\nfunction parse(noteName: NoteName): Note | NoNote {\n const tokens = tokenizeNote(noteName);\n if (tokens[0] === \"\" || tokens[3] !== \"\") {\n return NoNote;\n }\n\n const letter = tokens[0];\n const acc = tokens[1];\n const octStr = tokens[2];\n\n const step = (letter.charCodeAt(0) + 3) % 7;\n const alt = accToAlt(acc);\n const oct = octStr.length ? +octStr : undefined;\n const coord = coordinates({ step, alt, oct });\n\n const name = letter + acc + octStr;\n const pc = letter + acc;\n const chroma = (SEMI[step] + alt + 120) % 12;\n const height =\n oct === undefined\n ? mod(SEMI[step] + alt, 12) - 12 * 99\n : SEMI[step] + alt + 12 * (oct + 1);\n const midi = height >= 0 && height <= 127 ? height : null;\n const freq = oct === undefined ? null : Math.pow(2, (height - 69) / 12) * 440;\n\n return {\n empty: false,\n acc,\n alt,\n chroma,\n coord,\n freq,\n height,\n letter,\n midi,\n name,\n oct,\n pc,\n step,\n };\n}\n\nfunction pitchName(props: Pitch): NoteName {\n const { step, alt, oct } = props;\n const letter = stepToLetter(step);\n if (!letter) {\n return \"\";\n }\n\n const pc = letter + altToAcc(alt);\n return oct || oct === 0 ? pc + oct : pc;\n}\n", "import { PitchCoordinates } from \"@tonaljs/pitch\";\nimport {\n IntervalLiteral,\n IntervalName,\n interval as asInterval,\n coordToInterval,\n} from \"@tonaljs/pitch-interval\";\nimport {\n NoteLiteral,\n NoteName,\n note as asNote,\n coordToNote,\n} from \"@tonaljs/pitch-note\";\n\n/**\n * Transpose a note by an interval.\n *\n * @param {string} note - the note or note name\n * @param {string} interval - the interval or interval name\n * @return {string} the transposed note name or empty string if not valid notes\n * @example\n * import { transpose } from \"@tonaljs/core\"\n * transpose(\"d3\", \"3M\") // => \"F#3\"\n * transpose(\"D\", \"3M\") // => \"F#\"\n * [\"C\", \"D\", \"E\", \"F\", \"G\"].map(pc => transpose(pc, \"M3)) // => [\"E\", \"F#\", \"G#\", \"A\", \"B\"]\n */\nexport function transpose(\n noteName: NoteLiteral,\n intervalName: IntervalLiteral | [number, number],\n): NoteName {\n const note = asNote(noteName);\n const intervalCoord = Array.isArray(intervalName)\n ? intervalName\n : asInterval(intervalName).coord;\n if (note.empty || !intervalCoord || intervalCoord.length < 2) {\n return \"\";\n }\n const noteCoord = note.coord;\n const tr: PitchCoordinates =\n noteCoord.length === 1\n ? [noteCoord[0] + intervalCoord[0]]\n : [noteCoord[0] + intervalCoord[0], noteCoord[1] + intervalCoord[1]];\n return coordToNote(tr).name;\n}\n\n// Private\nexport function tonicIntervalsTransposer(\n intervals: string[],\n tonic: string | undefined | null,\n) {\n const len = intervals.length;\n return (normalized: number) => {\n if (!tonic) return \"\";\n const index =\n normalized < 0 ? (len - (-normalized % len)) % len : normalized % len;\n const octaves = Math.floor(normalized / len);\n const root = transpose(tonic, [0, octaves]);\n return transpose(root, intervals[index]);\n };\n}\n\n/**\n * Find the interval distance between two notes or coord classes.\n *\n * To find distance between coord classes, both notes must be coord classes and\n * the interval is always ascending\n *\n * @param {Note|string} from - the note or note name to calculate distance from\n * @param {Note|string} to - the note or note name to calculate distance to\n * @return {string} the interval name or empty string if not valid notes\n *\n */\nexport function distance(\n fromNote: NoteLiteral,\n toNote: NoteLiteral,\n): IntervalName {\n const from = asNote(fromNote);\n const to = asNote(toNote);\n if (from.empty || to.empty) {\n return \"\";\n }\n\n const fcoord = from.coord;\n const tcoord = to.coord;\n const fifths = tcoord[0] - fcoord[0];\n const octs =\n fcoord.length === 2 && tcoord.length === 2\n ? tcoord[1] - fcoord[1]\n : -Math.floor((fifths * 7) / 12);\n\n // If it's unison and not pitch class, it can be descending interval (#243)\n const forceDescending =\n to.height === from.height &&\n to.midi !== null &&\n from.midi !== null &&\n from.step > to.step;\n return coordToInterval([fifths, octs], forceDescending).name;\n}\n", "import { isNamedPitch } from \"@tonaljs/pitch\";\n\nexport * from \"@tonaljs/pitch\";\nexport * from \"@tonaljs/pitch-distance\";\nexport * from \"@tonaljs/pitch-interval\";\nexport * from \"@tonaljs/pitch-note\";\n\nexport const fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport function deprecate<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ResultFn extends (this: any, ...newArgs: any[]) => ReturnType,\n>(original: string, alternative: string, fn: ResultFn) {\n return function (this: unknown, ...args: unknown[]): ReturnType {\n // tslint:disable-next-line\n console.warn(`${original} is deprecated. Use ${alternative}.`);\n return fn.apply(this, args);\n };\n}\n\nexport const isNamed = deprecate(\"isNamed\", \"isNamedPitch\", isNamedPitch);\n", "import { distance as dist, note, transpose as tr } from \"@tonaljs/core\";\n\nconst fillStr = (character: string, times: number) =>\n Array(times + 1).join(character);\n\nconst REGEX = /^(_{1,}|=|\\^{1,}|)([abcdefgABCDEFG])([,']*)$/;\n\ntype AbcTokens = [string, string, string];\n\nexport function tokenize(str: string): AbcTokens {\n const m = REGEX.exec(str);\n if (!m) {\n return [\"\", \"\", \"\"];\n }\n return [m[1], m[2], m[3]];\n}\n\n/**\n * Convert a (string) note in ABC notation into a (string) note in scientific notation\n *\n * @example\n * abcToScientificNotation(\"c\") // => \"C5\"\n */\nexport function abcToScientificNotation(str: string): string {\n const [acc, letter, oct] = tokenize(str);\n if (letter === \"\") {\n return \"\";\n }\n let o = 4;\n for (let i = 0; i < oct.length; i++) {\n o += oct.charAt(i) === \",\" ? -1 : 1;\n }\n const a =\n acc[0] === \"_\"\n ? acc.replace(/_/g, \"b\")\n : acc[0] === \"^\"\n ? acc.replace(/\\^/g, \"#\")\n : \"\";\n return letter.charCodeAt(0) > 96\n ? letter.toUpperCase() + a + (o + 1)\n : letter + a + o;\n}\n\n/**\n * Convert a (string) note in scientific notation into a (string) note in ABC notation\n *\n * @example\n * scientificToAbcNotation(\"C#4\") // => \"^C\"\n */\nexport function scientificToAbcNotation(str: string): string {\n const n = note(str);\n if (n.empty || (!n.oct && n.oct !== 0)) {\n return \"\";\n }\n const { letter, acc, oct } = n;\n const a = acc[0] === \"b\" ? acc.replace(/b/g, \"_\") : acc.replace(/#/g, \"^\");\n const l = oct > 4 ? letter.toLowerCase() : letter;\n const o =\n oct === 5 ? \"\" : oct > 4 ? fillStr(\"'\", oct - 5) : fillStr(\",\", 4 - oct);\n return a + l + o;\n}\n\nexport function transpose(note: string, interval: string): string {\n return scientificToAbcNotation(tr(abcToScientificNotation(note), interval));\n}\n\nexport function distance(from: string, to: string): string {\n return dist(abcToScientificNotation(from), abcToScientificNotation(to));\n}\n\nexport default {\n abcToScientificNotation,\n scientificToAbcNotation,\n tokenize,\n transpose,\n distance,\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { note, Note } from \"@tonaljs/core\";\n\n// ascending range\nfunction ascR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = n + b);\n return a;\n}\n// descending range\nfunction descR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = b - n);\n return a;\n}\n\n/**\n * Creates a numeric range\n *\n * @param {number} from\n * @param {number} to\n * @return {Array}\n *\n * @example\n * range(-2, 2) // => [-2, -1, 0, 1, 2]\n * range(2, -2) // => [2, 1, 0, -1, -2]\n */\nexport function range(from: number, to: number): number[] {\n return from < to ? ascR(from, to - from + 1) : descR(from, from - to + 1);\n}\n\n/**\n * Rotates a list a number of times. It\"s completly agnostic about the\n * contents of the list.\n *\n * @param {Integer} times - the number of rotations\n * @param {Array} array\n * @return {Array} the rotated array\n *\n * @example\n * rotate(1, [1, 2, 3]) // => [2, 3, 1]\n */\nexport function rotate(times: number, arr: T[]): T[] {\n const len = arr.length;\n const n = ((times % len) + len) % len;\n return arr.slice(n, len).concat(arr.slice(0, n));\n}\n\n/**\n * Return a copy of the array with the null values removed\n * @function\n * @param {Array} array\n * @return {Array}\n *\n * @example\n * compact([\"a\", \"b\", null, \"c\"]) // => [\"a\", \"b\", \"c\"]\n */\nexport function compact(arr: any[]): any[] {\n return arr.filter((n) => n === 0 || n);\n}\n\n/**\n * Sort an array of notes in ascending order. Pitch classes are listed\n * before notes. Any string that is not a note is removed.\n *\n * @param {string[]} notes\n * @return {string[]} sorted array of notes\n *\n * @example\n * sortedNoteNames(['c2', 'c5', 'c1', 'c0', 'c6', 'c'])\n * // => ['C', 'C0', 'C1', 'C2', 'C5', 'C6']\n * sortedNoteNames(['c', 'F', 'G', 'a', 'b', 'h', 'J'])\n * // => ['C', 'F', 'G', 'A', 'B']\n */\nexport function sortedNoteNames(notes: string[]): string[] {\n const valid = notes.map((n) => note(n)).filter((n) => !n.empty) as Note[];\n return valid.sort((a, b) => a.height - b.height).map((n) => n.name);\n}\n\n/**\n * Get sorted notes with duplicates removed. Pitch classes are listed\n * before notes.\n *\n * @function\n * @param {string[]} array\n * @return {string[]} unique sorted notes\n *\n * @example\n * Array.sortedUniqNoteNames(['a', 'b', 'c2', '1p', 'p2', 'c2', 'b', 'c', 'c3' ])\n * // => [ 'C', 'A', 'B', 'C2', 'C3' ]\n */\nexport function sortedUniqNoteNames(arr: string[]): string[] {\n return sortedNoteNames(arr).filter((n, i, a) => i === 0 || n !== a[i - 1]);\n}\n\n/**\n * Randomizes the order of the specified array in-place, using the Fisher–Yates shuffle.\n *\n * @function\n * @param {Array} array\n * @return {Array} the array shuffled\n *\n * @example\n * shuffle([\"C\", \"D\", \"E\", \"F\"]) // => [...]\n */\nexport function shuffle(arr: any[], rnd = Math.random): any[] {\n let i: number;\n let t: any;\n let m: number = arr.length;\n while (m) {\n i = Math.floor(rnd() * m--);\n t = arr[m];\n arr[m] = arr[i];\n arr[i] = t;\n }\n return arr;\n}\n\n/**\n * Get all permutations of an array\n *\n * @param {Array} array - the array\n * @return {Array} an array with all the permutations\n * @example\n * permutations([\"a\", \"b\", \"c\"])) // =>\n * [\n * [\"a\", \"b\", \"c\"],\n * [\"b\", \"a\", \"c\"],\n * [\"b\", \"c\", \"a\"],\n * [\"a\", \"c\", \"b\"],\n * [\"c\", \"a\", \"b\"],\n * [\"c\", \"b\", \"a\"]\n * ]\n */\nexport function permutations(arr: any[]): any[] {\n if (arr.length === 0) {\n return [[]];\n }\n return permutations(arr.slice(1)).reduce((acc, perm) => {\n return acc.concat(\n arr.map((e, pos) => {\n const newPerm = perm.slice();\n newPerm.splice(pos, 0, arr[0]);\n return newPerm;\n }),\n );\n }, []);\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n// ascending range\nfunction ascR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = n + b);\n return a;\n}\n// descending range\nfunction descR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = b - n);\n return a;\n}\n\n/**\n * Creates a numeric range\n *\n * @param {number} from\n * @param {number} to\n * @return {Array}\n *\n * @example\n * range(-2, 2) // => [-2, -1, 0, 1, 2]\n * range(2, -2) // => [2, 1, 0, -1, -2]\n */\nexport function range(from: number, to: number): number[] {\n return from < to ? ascR(from, to - from + 1) : descR(from, from - to + 1);\n}\n\n/**\n * Rotates a list a number of times. It\"s completly agnostic about the\n * contents of the list.\n *\n * @param {Integer} times - the number of rotations\n * @param {Array} collection\n * @return {Array} the rotated collection\n *\n * @example\n * rotate(1, [1, 2, 3]) // => [2, 3, 1]\n */\nexport function rotate(times: number, arr: T[]): T[] {\n const len = arr.length;\n const n = ((times % len) + len) % len;\n return arr.slice(n, len).concat(arr.slice(0, n));\n}\n\n/**\n * Return a copy of the collection with the null values removed\n * @function\n * @param {Array} collection\n * @return {Array}\n *\n * @example\n * compact([\"a\", \"b\", null, \"c\"]) // => [\"a\", \"b\", \"c\"]\n */\nexport function compact(arr: any[]): any[] {\n return arr.filter((n) => n === 0 || n);\n}\n\n/**\n * Randomizes the order of the specified collection in-place, using the Fisher–Yates shuffle.\n *\n * @function\n * @param {Array} collection\n * @return {Array} the collection shuffled\n *\n * @example\n * shuffle([\"C\", \"D\", \"E\", \"F\"]) // => [...]\n */\nexport function shuffle(arr: any[], rnd = Math.random): any[] {\n let i: number;\n let t: any;\n let m: number = arr.length;\n while (m) {\n i = Math.floor(rnd() * m--);\n t = arr[m];\n arr[m] = arr[i];\n arr[i] = t;\n }\n return arr;\n}\n\n/**\n * Get all permutations of an collection\n *\n * @param {Array} collection - the collection\n * @return {Array} an collection with all the permutations\n * @example\n * permutations([\"a\", \"b\", \"c\"])) // =>\n * [\n * [\"a\", \"b\", \"c\"],\n * [\"b\", \"a\", \"c\"],\n * [\"b\", \"c\", \"a\"],\n * [\"a\", \"c\", \"b\"],\n * [\"c\", \"a\", \"b\"],\n * [\"c\", \"b\", \"a\"]\n * ]\n */\nexport function permutations(arr: any[]): any[] {\n if (arr.length === 0) {\n return [[]];\n }\n return permutations(arr.slice(1)).reduce((acc, perm) => {\n return acc.concat(\n arr.map((e, pos) => {\n const newPerm = perm.slice();\n newPerm.splice(pos, 0, arr[0]);\n return newPerm;\n }),\n );\n }, []);\n}\n\nexport default {\n compact,\n permutations,\n range,\n rotate,\n shuffle,\n};\n", "import { compact, range, rotate } from \"@tonaljs/collection\";\nimport {\n Interval,\n IntervalName,\n NotFound,\n Note,\n NoteName,\n deprecate,\n interval,\n note,\n} from \"@tonaljs/core\";\n\n/**\n * The properties of a pitch class set\n * @param {number} num - a number between 1 and 4095 (both included) that\n * uniquely identifies the set. It's the decimal number of the chrom.\n * @param {string} chroma - a string representation of the set: a 12-char string\n * with either \"1\" or \"0\" as characters, representing a pitch class or not\n * for the given position in the octave. For example, a \"1\" at index 0 means 'C',\n * a \"1\" at index 2 means 'D', and so on...\n * @param {string} normalized - the chroma but shifted to the first 1\n * @param {number} length - the number of notes of the pitch class set\n * @param {IntervalName[]} intervals - the intervals of the pitch class set\n * *starting from C*\n */\nexport interface Pcset {\n readonly name: string;\n readonly empty: boolean;\n readonly setNum: number;\n readonly chroma: PcsetChroma;\n readonly normalized: PcsetChroma;\n readonly intervals: IntervalName[];\n}\n\nexport const EmptyPcset: Pcset = {\n empty: true,\n name: \"\",\n setNum: 0,\n chroma: \"000000000000\",\n normalized: \"000000000000\",\n intervals: [],\n};\n\nexport type PcsetChroma = string;\nexport type PcsetNum = number;\n\n// UTILITIES\nconst setNumToChroma = (num: number): string =>\n Number(num).toString(2).padStart(12, \"0\");\nconst chromaToNumber = (chroma: string): number => parseInt(chroma, 2);\nconst REGEX = /^[01]{12}$/;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isChroma(set: any): set is PcsetChroma {\n return REGEX.test(set);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isPcsetNum = (set: any): set is PcsetNum =>\n typeof set === \"number\" && set >= 0 && set <= 4095;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isPcset = (set: any): set is Pcset => set && isChroma(set.chroma);\n\nconst cache: { [key in string]: Pcset } = { [EmptyPcset.chroma]: EmptyPcset };\n\n/**\n * A definition of a pitch class set. It could be:\n * - The pitch class set chroma (a 12-length string with only 1s or 0s)\n * - The pitch class set number (an integer between 1 and 4095)\n * - An array of note names\n * - An array of interval names\n */\nexport type Set =\n | Partial\n | PcsetChroma\n | PcsetNum\n | NoteName[]\n | IntervalName[];\n\n/**\n * Get the pitch class set of a collection of notes or set number or chroma\n */\nexport function get(src: Set): Pcset {\n const chroma: PcsetChroma = isChroma(src)\n ? src\n : isPcsetNum(src)\n ? setNumToChroma(src)\n : Array.isArray(src)\n ? listToChroma(src)\n : isPcset(src)\n ? src.chroma\n : EmptyPcset.chroma;\n\n return (cache[chroma] = cache[chroma] || chromaToPcset(chroma));\n}\n\n/**\n * Use Pcset.properties\n * @function\n * @deprecated\n */\nexport const pcset = deprecate(\"Pcset.pcset\", \"Pcset.get\", get);\n\n/**\n * Get pitch class set chroma\n * @function\n * @example\n * Pcset.chroma([\"c\", \"d\", \"e\"]); //=> \"101010000000\"\n */\nexport const chroma = (set: Set) => get(set).chroma;\n\n/**\n * Get intervals (from C) of a set\n * @function\n * @example\n * Pcset.intervals([\"c\", \"d\", \"e\"]); //=>\n */\nconst intervals = (set: Set) => get(set).intervals;\n\n/**\n * Get pitch class set number\n * @function\n * @example\n * Pcset.num([\"c\", \"d\", \"e\"]); //=> 2192\n */\nconst num = (set: Set) => get(set).setNum;\n\nconst IVLS = [\n \"1P\",\n \"2m\",\n \"2M\",\n \"3m\",\n \"3M\",\n \"4P\",\n \"5d\",\n \"5P\",\n \"6m\",\n \"6M\",\n \"7m\",\n \"7M\",\n];\n\n/**\n * @private\n * Get the intervals of a pcset *starting from C*\n * @param {Set} set - the pitch class set\n * @return {IntervalName[]} an array of interval names or an empty array\n * if not a valid pitch class set\n */\nexport function chromaToIntervals(chroma: PcsetChroma): IntervalName[] {\n const intervals = [];\n for (let i = 0; i < 12; i++) {\n // tslint:disable-next-line:curly\n if (chroma.charAt(i) === \"1\") intervals.push(IVLS[i]);\n }\n return intervals;\n}\n\n/**\n * Get a list of all possible pitch class sets (all possible chromas) *having\n * C as root*. There are 2048 different chromas. If you want them with another\n * note you have to transpose it\n *\n * @see http://allthescales.org/\n * @return {Array} an array of possible chromas from '10000000000' to '11111111111'\n */\nexport function chromas(): PcsetChroma[] {\n return range(2048, 4095).map(setNumToChroma);\n}\n\n/**\n * Given a a list of notes or a pcset chroma, produce the rotations\n * of the chroma discarding the ones that starts with \"0\"\n *\n * This is used, for example, to get all the modes of a scale.\n *\n * @param {Array|string} set - the list of notes or pitchChr of the set\n * @param {boolean} normalize - (Optional, true by default) remove all\n * the rotations that starts with \"0\"\n * @return {Array} an array with all the modes of the chroma\n *\n * @example\n * Pcset.modes([\"C\", \"D\", \"E\"]).map(Pcset.intervals)\n */\nexport function modes(set: Set, normalize = true): PcsetChroma[] {\n const pcs = get(set);\n\n const binary = pcs.chroma.split(\"\");\n return compact(\n binary.map((_, i) => {\n const r = rotate(i, binary);\n return normalize && r[0] === \"0\" ? null : r.join(\"\");\n }),\n );\n}\n\n/**\n * Test if two pitch class sets are numentical\n *\n * @param {Array|string} set1 - one of the pitch class sets\n * @param {Array|string} set2 - the other pitch class set\n * @return {boolean} true if they are equal\n * @example\n * Pcset.isEqual([\"c2\", \"d3\"], [\"c5\", \"d2\"]) // => true\n */\nexport function isEqual(s1: Set, s2: Set) {\n return get(s1).setNum === get(s2).setNum;\n}\n\n/**\n * Create a function that test if a collection of notes is a\n * subset of a given set\n *\n * The function is curryfied.\n *\n * @param {PcsetChroma|NoteName[]} set - the superset to test against (chroma or\n * list of notes)\n * @return{function(PcsetChroma|NoteNames[]): boolean} a function accepting a set\n * to test against (chroma or list of notes)\n * @example\n * const inCMajor = Pcset.isSubsetOf([\"C\", \"E\", \"G\"])\n * inCMajor([\"e6\", \"c4\"]) // => true\n * inCMajor([\"e6\", \"c4\", \"d3\"]) // => false\n */\nexport function isSubsetOf(set: Set) {\n const s = get(set).setNum;\n\n return (notes: Set | Pcset) => {\n const o = get(notes).setNum;\n // tslint:disable-next-line: no-bitwise\n return s && s !== o && (o & s) === o;\n };\n}\n\n/**\n * Create a function that test if a collection of notes is a\n * superset of a given set (it contains all notes and at least one more)\n *\n * @param {Set} set - an array of notes or a chroma set string to test against\n * @return {(subset: Set): boolean} a function that given a set\n * returns true if is a subset of the first one\n * @example\n * const extendsCMajor = Pcset.isSupersetOf([\"C\", \"E\", \"G\"])\n * extendsCMajor([\"e6\", \"a\", \"c4\", \"g2\"]) // => true\n * extendsCMajor([\"c6\", \"e4\", \"g3\"]) // => false\n */\nexport function isSupersetOf(set: Set) {\n const s = get(set).setNum;\n return (notes: Set) => {\n const o = get(notes).setNum;\n // tslint:disable-next-line: no-bitwise\n return s && s !== o && (o | s) === o;\n };\n}\n\n/**\n * Test if a given pitch class set includes a note\n *\n * @param {Array} set - the base set to test against\n * @param {string} note - the note to test\n * @return {boolean} true if the note is included in the pcset\n *\n * Can be partially applied\n *\n * @example\n * const isNoteInCMajor = isNoteIncludedIn(['C', 'E', 'G'])\n * isNoteInCMajor('C4') // => true\n * isNoteInCMajor('C#4') // => false\n */\nexport function isNoteIncludedIn(set: Set) {\n const s = get(set);\n\n return (noteName: NoteName): boolean => {\n const n = note(noteName);\n return s && !n.empty && s.chroma.charAt(n.chroma) === \"1\";\n };\n}\n\n/** @deprecated use: isNoteIncludedIn */\nexport const includes = isNoteIncludedIn;\n\n/**\n * Filter a list with a pitch class set\n *\n * @param {Array|string} set - the pitch class set notes\n * @param {Array|string} notes - the note list to be filtered\n * @return {Array} the filtered notes\n *\n * @example\n * Pcset.filter([\"C\", \"D\", \"E\"], [\"c2\", \"c#2\", \"d2\", \"c3\", \"c#3\", \"d3\"]) // => [ \"c2\", \"d2\", \"c3\", \"d3\" ])\n * Pcset.filter([\"C2\"], [\"c2\", \"c#2\", \"d2\", \"c3\", \"c#3\", \"d3\"]) // => [ \"c2\", \"c3\" ])\n */\nexport function filter(set: Set) {\n const isIncluded = isNoteIncludedIn(set);\n return (notes: NoteName[]) => {\n return notes.filter(isIncluded);\n };\n}\n\nexport default {\n get,\n chroma,\n num,\n intervals,\n chromas,\n isSupersetOf,\n isSubsetOf,\n isNoteIncludedIn,\n isEqual,\n filter,\n modes,\n // deprecated\n pcset,\n};\n\n//// PRIVATE ////\n\nfunction chromaRotations(chroma: string): string[] {\n const binary = chroma.split(\"\");\n return binary.map((_, i) => rotate(i, binary).join(\"\"));\n}\n\nfunction chromaToPcset(chroma: PcsetChroma): Pcset {\n const setNum = chromaToNumber(chroma);\n const normalizedNum = chromaRotations(chroma)\n .map(chromaToNumber)\n .filter((n) => n >= 2048)\n .sort()[0];\n const normalized = setNumToChroma(normalizedNum);\n\n const intervals = chromaToIntervals(chroma);\n\n return {\n empty: false,\n name: \"\",\n setNum,\n chroma,\n normalized,\n intervals,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction listToChroma(set: any[]): PcsetChroma {\n if (set.length === 0) {\n return EmptyPcset.chroma;\n }\n\n let pitch: Note | Interval | NotFound;\n const binary = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < set.length; i++) {\n pitch = note(set[i]);\n // tslint:disable-next-line: curly\n if (pitch.empty) pitch = interval(set[i]);\n // tslint:disable-next-line: curly\n if (!pitch.empty) binary[pitch.chroma] = 1;\n }\n return binary.join(\"\");\n}\n", "import { deprecate } from \"@tonaljs/core\";\nimport {\n EmptyPcset,\n get as pcset,\n Pcset,\n PcsetChroma,\n PcsetNum,\n} from \"@tonaljs/pcset\";\nimport data from \"./data\";\n\nexport type ChordQuality =\n | \"Major\"\n | \"Minor\"\n | \"Augmented\"\n | \"Diminished\"\n | \"Unknown\";\n\nexport interface ChordType extends Pcset {\n name: string;\n quality: ChordQuality;\n aliases: string[];\n}\nconst NoChordType: ChordType = {\n ...EmptyPcset,\n name: \"\",\n quality: \"Unknown\",\n intervals: [],\n aliases: [],\n};\n\ntype ChordTypeName = string | PcsetChroma | PcsetNum;\n\nlet dictionary: ChordType[] = [];\nlet index: Record = {};\n\n/**\n * Given a chord name or chroma, return the chord properties\n * @param {string} source - chord name or pitch class set chroma\n * @example\n * import { get } from 'tonaljs/chord-type'\n * get('major') // => { name: 'major', ... }\n */\nexport function get(type: ChordTypeName): ChordType {\n return index[type] || NoChordType;\n}\n\nexport const chordType = deprecate(\"ChordType.chordType\", \"ChordType.get\", get);\n\n/**\n * Get all chord (long) names\n */\nexport function names() {\n return dictionary.map((chord) => chord.name).filter((x) => x);\n}\n\n/**\n * Get all chord symbols\n */\nexport function symbols() {\n return dictionary.map((chord) => chord.aliases[0]).filter((x) => x);\n}\n\n/**\n * Keys used to reference chord types\n */\nexport function keys() {\n return Object.keys(index);\n}\n\n/**\n * Return a list of all chord types\n */\nexport function all(): ChordType[] {\n return dictionary.slice();\n}\n\nexport const entries = deprecate(\"ChordType.entries\", \"ChordType.all\", all);\n\n/**\n * Clear the dictionary\n */\nexport function removeAll() {\n dictionary = [];\n index = {};\n}\n\n/**\n * Add a chord to the dictionary.\n * @param intervals\n * @param aliases\n * @param [fullName]\n */\nexport function add(intervals: string[], aliases: string[], fullName?: string) {\n const quality = getQuality(intervals);\n const chord = {\n ...pcset(intervals),\n name: fullName || \"\",\n quality,\n intervals,\n aliases,\n };\n dictionary.push(chord);\n if (chord.name) {\n index[chord.name] = chord;\n }\n index[chord.setNum] = chord;\n index[chord.chroma] = chord;\n chord.aliases.forEach((alias) => addAlias(chord, alias));\n}\n\nexport function addAlias(chord: ChordType, alias: string) {\n index[alias] = chord;\n}\n\nfunction getQuality(intervals: string[]): ChordQuality {\n const has = (interval: string) => intervals.indexOf(interval) !== -1;\n return has(\"5A\")\n ? \"Augmented\"\n : has(\"3M\")\n ? \"Major\"\n : has(\"5d\")\n ? \"Diminished\"\n : has(\"3m\")\n ? \"Minor\"\n : \"Unknown\";\n}\n\ndata.forEach(([ivls, fullName, names]: string[]) =>\n add(ivls.split(\" \"), names.split(\" \"), fullName),\n);\ndictionary.sort((a, b) => a.setNum - b.setNum);\n\nexport default {\n names,\n symbols,\n get,\n all,\n add,\n removeAll,\n keys,\n // deprecated\n entries,\n chordType,\n};\n", "/**\n * @private\n * Chord List\n * Source: https://en.wikibooks.org/wiki/Music_Theory/Complete_List_of_Chord_Patterns\n * Format: [\"intervals\", \"full name\", \"abrv1 abrv2\"]\n */\nconst CHORDS: string[][] = [\n // ==Major==\n [\"1P 3M 5P\", \"major\", \"M ^ maj\"],\n [\"1P 3M 5P 7M\", \"major seventh\", \"maj7 Δ ma7 M7 Maj7 ^7\"],\n [\"1P 3M 5P 7M 9M\", \"major ninth\", \"maj9 Δ9 ^9\"],\n [\"1P 3M 5P 7M 9M 13M\", \"major thirteenth\", \"maj13 Maj13 ^13\"],\n [\"1P 3M 5P 6M\", \"sixth\", \"6 add6 add13 M6\"],\n [\"1P 3M 5P 6M 9M\", \"sixth added ninth\", \"6add9 6/9 69 M69\"],\n [\"1P 3M 6m 7M\", \"major seventh flat sixth\", \"M7b6 ^7b6\"],\n [\n \"1P 3M 5P 7M 11A\",\n \"major seventh sharp eleventh\",\n \"maj#4 Δ#4 Δ#11 M7#11 ^7#11 maj7#11\",\n ],\n // ==Minor==\n // '''Normal'''\n [\"1P 3m 5P\", \"minor\", \"m min -\"],\n [\"1P 3m 5P 7m\", \"minor seventh\", \"m7 min7 mi7 -7\"],\n [\n \"1P 3m 5P 7M\",\n \"minor/major seventh\",\n \"m/ma7 m/maj7 mM7 mMaj7 m/M7 -Δ7 mΔ -^7 -maj7\",\n ],\n [\"1P 3m 5P 6M\", \"minor sixth\", \"m6 -6\"],\n [\"1P 3m 5P 7m 9M\", \"minor ninth\", \"m9 -9\"],\n [\"1P 3m 5P 7M 9M\", \"minor/major ninth\", \"mM9 mMaj9 -^9\"],\n [\"1P 3m 5P 7m 9M 11P\", \"minor eleventh\", \"m11 -11\"],\n [\"1P 3m 5P 7m 9M 13M\", \"minor thirteenth\", \"m13 -13\"],\n // '''Diminished'''\n [\"1P 3m 5d\", \"diminished\", \"dim ° o\"],\n [\"1P 3m 5d 7d\", \"diminished seventh\", \"dim7 °7 o7\"],\n [\"1P 3m 5d 7m\", \"half-diminished\", \"m7b5 ø -7b5 h7 h\"],\n // ==Dominant/Seventh==\n // '''Normal'''\n [\"1P 3M 5P 7m\", \"dominant seventh\", \"7 dom\"],\n [\"1P 3M 5P 7m 9M\", \"dominant ninth\", \"9\"],\n [\"1P 3M 5P 7m 9M 13M\", \"dominant thirteenth\", \"13\"],\n [\"1P 3M 5P 7m 11A\", \"lydian dominant seventh\", \"7#11 7#4\"],\n // '''Altered'''\n [\"1P 3M 5P 7m 9m\", \"dominant flat ninth\", \"7b9\"],\n [\"1P 3M 5P 7m 9A\", \"dominant sharp ninth\", \"7#9\"],\n [\"1P 3M 7m 9m\", \"altered\", \"alt7\"],\n // '''Suspended'''\n [\"1P 4P 5P\", \"suspended fourth\", \"sus4 sus\"],\n [\"1P 2M 5P\", \"suspended second\", \"sus2\"],\n [\"1P 4P 5P 7m\", \"suspended fourth seventh\", \"7sus4 7sus\"],\n [\"1P 5P 7m 9M 11P\", \"eleventh\", \"11\"],\n [\n \"1P 4P 5P 7m 9m\",\n \"suspended fourth flat ninth\",\n \"b9sus phryg 7b9sus 7b9sus4\",\n ],\n // ==Other==\n [\"1P 5P\", \"fifth\", \"5\"],\n [\"1P 3M 5A\", \"augmented\", \"aug + +5 ^#5\"],\n [\"1P 3m 5A\", \"minor augmented\", \"m#5 -#5 m+\"],\n [\"1P 3M 5A 7M\", \"augmented seventh\", \"maj7#5 maj7+5 +maj7 ^7#5\"],\n [\n \"1P 3M 5P 7M 9M 11A\",\n \"major sharp eleventh (lydian)\",\n \"maj9#11 Δ9#11 ^9#11\",\n ],\n // ==Legacy==\n [\"1P 2M 4P 5P\", \"\", \"sus24 sus4add9\"],\n [\"1P 3M 5A 7M 9M\", \"\", \"maj9#5 Maj9#5\"],\n [\"1P 3M 5A 7m\", \"\", \"7#5 +7 7+ 7aug aug7\"],\n [\"1P 3M 5A 7m 9A\", \"\", \"7#5#9 7#9#5 7alt\"],\n [\"1P 3M 5A 7m 9M\", \"\", \"9#5 9+\"],\n [\"1P 3M 5A 7m 9M 11A\", \"\", \"9#5#11\"],\n [\"1P 3M 5A 7m 9m\", \"\", \"7#5b9 7b9#5\"],\n [\"1P 3M 5A 7m 9m 11A\", \"\", \"7#5b9#11\"],\n [\"1P 3M 5A 9A\", \"\", \"+add#9\"],\n [\"1P 3M 5A 9M\", \"\", \"M#5add9 +add9\"],\n [\"1P 3M 5P 6M 11A\", \"\", \"M6#11 M6b5 6#11 6b5\"],\n [\"1P 3M 5P 6M 7M 9M\", \"\", \"M7add13\"],\n [\"1P 3M 5P 6M 9M 11A\", \"\", \"69#11\"],\n [\"1P 3m 5P 6M 9M\", \"\", \"m69 -69\"],\n [\"1P 3M 5P 6m 7m\", \"\", \"7b6\"],\n [\"1P 3M 5P 7M 9A 11A\", \"\", \"maj7#9#11\"],\n [\"1P 3M 5P 7M 9M 11A 13M\", \"\", \"M13#11 maj13#11 M13+4 M13#4\"],\n [\"1P 3M 5P 7M 9m\", \"\", \"M7b9\"],\n [\"1P 3M 5P 7m 11A 13m\", \"\", \"7#11b13 7b5b13\"],\n [\"1P 3M 5P 7m 13M\", \"\", \"7add6 67 7add13\"],\n [\"1P 3M 5P 7m 9A 11A\", \"\", \"7#9#11 7b5#9 7#9b5\"],\n [\"1P 3M 5P 7m 9A 11A 13M\", \"\", \"13#9#11\"],\n [\"1P 3M 5P 7m 9A 11A 13m\", \"\", \"7#9#11b13\"],\n [\"1P 3M 5P 7m 9A 13M\", \"\", \"13#9\"],\n [\"1P 3M 5P 7m 9A 13m\", \"\", \"7#9b13\"],\n [\"1P 3M 5P 7m 9M 11A\", \"\", \"9#11 9+4 9#4\"],\n [\"1P 3M 5P 7m 9M 11A 13M\", \"\", \"13#11 13+4 13#4\"],\n [\"1P 3M 5P 7m 9M 11A 13m\", \"\", \"9#11b13 9b5b13\"],\n [\"1P 3M 5P 7m 9m 11A\", \"\", \"7b9#11 7b5b9 7b9b5\"],\n [\"1P 3M 5P 7m 9m 11A 13M\", \"\", \"13b9#11\"],\n [\"1P 3M 5P 7m 9m 11A 13m\", \"\", \"7b9b13#11 7b9#11b13 7b5b9b13\"],\n [\"1P 3M 5P 7m 9m 13M\", \"\", \"13b9\"],\n [\"1P 3M 5P 7m 9m 13m\", \"\", \"7b9b13\"],\n [\"1P 3M 5P 7m 9m 9A\", \"\", \"7b9#9\"],\n [\"1P 3M 5P 9M\", \"\", \"Madd9 2 add9 add2\"],\n [\"1P 3M 5P 9m\", \"\", \"Maddb9\"],\n [\"1P 3M 5d\", \"\", \"Mb5\"],\n [\"1P 3M 5d 6M 7m 9M\", \"\", \"13b5\"],\n [\"1P 3M 5d 7M\", \"\", \"M7b5\"],\n [\"1P 3M 5d 7M 9M\", \"\", \"M9b5\"],\n [\"1P 3M 5d 7m\", \"\", \"7b5\"],\n [\"1P 3M 5d 7m 9M\", \"\", \"9b5\"],\n [\"1P 3M 7m\", \"\", \"7no5\"],\n [\"1P 3M 7m 13m\", \"\", \"7b13\"],\n [\"1P 3M 7m 9M\", \"\", \"9no5\"],\n [\"1P 3M 7m 9M 13M\", \"\", \"13no5\"],\n [\"1P 3M 7m 9M 13m\", \"\", \"9b13\"],\n [\"1P 3m 4P 5P\", \"\", \"madd4\"],\n [\"1P 3m 5P 6m 7M\", \"\", \"mMaj7b6\"],\n [\"1P 3m 5P 6m 7M 9M\", \"\", \"mMaj9b6\"],\n [\"1P 3m 5P 7m 11P\", \"\", \"m7add11 m7add4\"],\n [\"1P 3m 5P 9M\", \"\", \"madd9\"],\n [\"1P 3m 5d 6M 7M\", \"\", \"o7M7\"],\n [\"1P 3m 5d 7M\", \"\", \"oM7\"],\n [\"1P 3m 6m 7M\", \"\", \"mb6M7\"],\n [\"1P 3m 6m 7m\", \"\", \"m7#5\"],\n [\"1P 3m 6m 7m 9M\", \"\", \"m9#5\"],\n [\"1P 3m 5A 7m 9M 11P\", \"\", \"m11A\"],\n [\"1P 3m 6m 9m\", \"\", \"mb6b9\"],\n [\"1P 2M 3m 5d 7m\", \"\", \"m9b5\"],\n [\"1P 4P 5A 7M\", \"\", \"M7#5sus4\"],\n [\"1P 4P 5A 7M 9M\", \"\", \"M9#5sus4\"],\n [\"1P 4P 5A 7m\", \"\", \"7#5sus4\"],\n [\"1P 4P 5P 7M\", \"\", \"M7sus4\"],\n [\"1P 4P 5P 7M 9M\", \"\", \"M9sus4\"],\n [\"1P 4P 5P 7m 9M\", \"\", \"9sus4 9sus\"],\n [\"1P 4P 5P 7m 9M 13M\", \"\", \"13sus4 13sus\"],\n [\"1P 4P 5P 7m 9m 13m\", \"\", \"7sus4b9b13 7b9b13sus4\"],\n [\"1P 4P 7m 10m\", \"\", \"4 quartal\"],\n [\"1P 5P 7m 9m 11P\", \"\", \"11b9\"],\n];\n\nexport default CHORDS;\n", "import { all, ChordType } from \"@tonaljs/chord-type\";\nimport { note } from \"@tonaljs/core\";\nimport { modes } from \"@tonaljs/pcset\";\n\ninterface FoundChord {\n readonly weight: number;\n readonly name: string;\n}\n\nconst namedSet = (notes: string[]) => {\n const pcToName = notes.reduce>((record, n) => {\n const chroma = note(n).chroma;\n if (chroma !== undefined) {\n record[chroma] = record[chroma] || note(n).name;\n }\n return record;\n }, {});\n\n return (chroma: number) => pcToName[chroma];\n};\n\ntype DetectOptions = {\n assumePerfectFifth: boolean;\n};\nexport function detect(\n source: string[],\n options: Partial = {},\n): string[] {\n const notes = source.map((n) => note(n).pc).filter((x) => x);\n if (note.length === 0) {\n return [];\n }\n\n const found: FoundChord[] = findMatches(notes, 1, options);\n\n return found\n .filter((chord) => chord.weight)\n .sort((a, b) => b.weight - a.weight)\n .map((chord) => chord.name);\n}\n\n/* tslint:disable:no-bitwise */\nconst BITMASK = {\n // 3m 000100000000\n // 3M 000010000000\n anyThirds: 384,\n // 5P 000000010000\n perfectFifth: 16,\n // 5d 000000100000\n // 5A 000000001000\n nonPerfectFifths: 40,\n anySeventh: 3,\n};\n\nconst testChromaNumber = (bitmask: number) => (chromaNumber: number) =>\n Boolean(chromaNumber & bitmask);\nconst hasAnyThird = testChromaNumber(BITMASK.anyThirds);\nconst hasPerfectFifth = testChromaNumber(BITMASK.perfectFifth);\nconst hasAnySeventh = testChromaNumber(BITMASK.anySeventh);\nconst hasNonPerfectFifth = testChromaNumber(BITMASK.nonPerfectFifths);\n\nfunction hasAnyThirdAndPerfectFifthAndAnySeventh(chordType: ChordType) {\n const chromaNumber = parseInt(chordType.chroma, 2);\n return (\n hasAnyThird(chromaNumber) &&\n hasPerfectFifth(chromaNumber) &&\n hasAnySeventh(chromaNumber)\n );\n}\n\nfunction withPerfectFifth(chroma: string): string {\n const chromaNumber = parseInt(chroma, 2);\n return hasNonPerfectFifth(chromaNumber)\n ? chroma\n : (chromaNumber | 16).toString(2);\n}\n\n/* tslint:enable:no-bitwise */\n\ntype FindMatchesOptions = {\n assumePerfectFifth: boolean;\n};\nfunction findMatches(\n notes: string[],\n weight: number,\n options: Partial,\n): FoundChord[] {\n const tonic = notes[0];\n const tonicChroma = note(tonic).chroma;\n const noteName = namedSet(notes);\n // we need to test all chromas to get the correct baseNote\n const allModes = modes(notes, false);\n\n const found: FoundChord[] = [];\n allModes.forEach((mode, index) => {\n const modeWithPerfectFifth =\n options.assumePerfectFifth && withPerfectFifth(mode);\n // some chords could have the same chroma but different interval spelling\n const chordTypes = all().filter((chordType) => {\n if (\n options.assumePerfectFifth &&\n hasAnyThirdAndPerfectFifthAndAnySeventh(chordType)\n ) {\n return chordType.chroma === modeWithPerfectFifth;\n }\n return chordType.chroma === mode;\n });\n\n chordTypes.forEach((chordType) => {\n const chordName = chordType.aliases[0];\n const baseNote = noteName(index);\n const isInversion = index !== tonicChroma;\n if (isInversion) {\n found.push({\n weight: 0.5 * weight,\n name: `${baseNote}${chordName}/${tonic}`,\n });\n } else {\n found.push({ weight: 1 * weight, name: `${baseNote}${chordName}` });\n }\n });\n });\n\n return found;\n}\n\nexport default { detect };\n", "import { deprecate } from \"@tonaljs/core\";\nimport {\n EmptyPcset,\n get as pcset,\n Pcset,\n PcsetChroma,\n PcsetNum,\n} from \"@tonaljs/pcset\";\nimport data from \"./data\";\n\n/**\n * Properties for a scale in the scale dictionary. It's a pitch class set\n * properties with the following additional information:\n * - name: the scale name\n * - aliases: alternative list of names\n * - intervals: an array of interval names\n */\nexport interface ScaleType extends Pcset {\n readonly name: string;\n readonly aliases: string[];\n}\n\nexport const NoScaleType: ScaleType = {\n ...EmptyPcset,\n intervals: [],\n aliases: [],\n};\n\ntype ScaleTypeName = string | PcsetChroma | PcsetNum;\n\nlet dictionary: ScaleType[] = [];\nlet index: Record = {};\n\nexport function names() {\n return dictionary.map((scale) => scale.name);\n}\n\n/**\n * Given a scale name or chroma, return the scale properties\n *\n * @param {string} type - scale name or pitch class set chroma\n * @example\n * import { get } from 'tonaljs/scale-type'\n * get('major') // => { name: 'major', ... }\n */\nexport function get(type: ScaleTypeName): ScaleType {\n return index[type] || NoScaleType;\n}\n\nexport const scaleType = deprecate(\n \"ScaleDictionary.scaleType\",\n \"ScaleType.get\",\n get,\n);\n\n/**\n * Return a list of all scale types\n */\nexport function all() {\n return dictionary.slice();\n}\n\nexport const entries = deprecate(\n \"ScaleDictionary.entries\",\n \"ScaleType.all\",\n all,\n);\n\n/**\n * Keys used to reference scale types\n */\nexport function keys() {\n return Object.keys(index);\n}\n\n/**\n * Clear the dictionary\n */\nexport function removeAll() {\n dictionary = [];\n index = {};\n}\n\n/**\n * Add a scale into dictionary\n * @param intervals\n * @param name\n * @param aliases\n */\nexport function add(\n intervals: string[],\n name: string,\n aliases: string[] = [],\n): ScaleType {\n const scale = { ...pcset(intervals), name, intervals, aliases };\n dictionary.push(scale);\n index[scale.name] = scale;\n index[scale.setNum] = scale;\n index[scale.chroma] = scale;\n scale.aliases.forEach((alias) => addAlias(scale, alias));\n return scale;\n}\n\nexport function addAlias(scale: ScaleType, alias: string) {\n index[alias] = scale;\n}\n\ndata.forEach(([ivls, name, ...aliases]: string[]) =>\n add(ivls.split(\" \"), name, aliases),\n);\n\nexport default {\n names,\n get,\n all,\n add,\n removeAll,\n keys,\n\n // deprecated\n entries,\n scaleType,\n};\n", "// SCALES\n// Format: [\"intervals\", \"name\", \"alias1\", \"alias2\", ...]\nconst SCALES: string[][] = [\n // Basic scales\n [\"1P 2M 3M 5P 6M\", \"major pentatonic\", \"pentatonic\"],\n [\"1P 2M 3M 4P 5P 6M 7M\", \"major\", \"ionian\"],\n [\"1P 2M 3m 4P 5P 6m 7m\", \"minor\", \"aeolian\"],\n\n // Jazz common scales\n [\"1P 2M 3m 3M 5P 6M\", \"major blues\"],\n [\"1P 3m 4P 5d 5P 7m\", \"minor blues\", \"blues\"],\n [\"1P 2M 3m 4P 5P 6M 7M\", \"melodic minor\"],\n [\"1P 2M 3m 4P 5P 6m 7M\", \"harmonic minor\"],\n [\"1P 2M 3M 4P 5P 6M 7m 7M\", \"bebop\"],\n [\"1P 2M 3m 4P 5d 6m 6M 7M\", \"diminished\", \"whole-half diminished\"],\n\n // Modes\n [\"1P 2M 3m 4P 5P 6M 7m\", \"dorian\"],\n [\"1P 2M 3M 4A 5P 6M 7M\", \"lydian\"],\n [\"1P 2M 3M 4P 5P 6M 7m\", \"mixolydian\", \"dominant\"],\n [\"1P 2m 3m 4P 5P 6m 7m\", \"phrygian\"],\n [\"1P 2m 3m 4P 5d 6m 7m\", \"locrian\"],\n\n // 5-note scales\n [\"1P 3M 4P 5P 7M\", \"ionian pentatonic\"],\n [\"1P 3M 4P 5P 7m\", \"mixolydian pentatonic\", \"indian\"],\n [\"1P 2M 4P 5P 6M\", \"ritusen\"],\n [\"1P 2M 4P 5P 7m\", \"egyptian\"],\n [\"1P 3M 4P 5d 7m\", \"neopolitan major pentatonic\"],\n [\"1P 3m 4P 5P 6m\", \"vietnamese 1\"],\n [\"1P 2m 3m 5P 6m\", \"pelog\"],\n [\"1P 2m 4P 5P 6m\", \"kumoijoshi\"],\n [\"1P 2M 3m 5P 6m\", \"hirajoshi\"],\n [\"1P 2m 4P 5d 7m\", \"iwato\"],\n [\"1P 2m 4P 5P 7m\", \"in-sen\"],\n [\"1P 3M 4A 5P 7M\", \"lydian pentatonic\", \"chinese\"],\n [\"1P 3m 4P 6m 7m\", \"malkos raga\"],\n [\"1P 3m 4P 5d 7m\", \"locrian pentatonic\", \"minor seven flat five pentatonic\"],\n [\"1P 3m 4P 5P 7m\", \"minor pentatonic\", \"vietnamese 2\"],\n [\"1P 3m 4P 5P 6M\", \"minor six pentatonic\"],\n [\"1P 2M 3m 5P 6M\", \"flat three pentatonic\", \"kumoi\"],\n [\"1P 2M 3M 5P 6m\", \"flat six pentatonic\"],\n [\"1P 2m 3M 5P 6M\", \"scriabin\"],\n [\"1P 3M 5d 6m 7m\", \"whole tone pentatonic\"],\n [\"1P 3M 4A 5A 7M\", \"lydian #5P pentatonic\"],\n [\"1P 3M 4A 5P 7m\", \"lydian dominant pentatonic\"],\n [\"1P 3m 4P 5P 7M\", \"minor #7M pentatonic\"],\n [\"1P 3m 4d 5d 7m\", \"super locrian pentatonic\"],\n\n // 6-note scales\n [\"1P 2M 3m 4P 5P 7M\", \"minor hexatonic\"],\n [\"1P 2A 3M 5P 5A 7M\", \"augmented\"],\n [\"1P 2M 4P 5P 6M 7m\", \"piongio\"],\n [\"1P 2m 3M 4A 6M 7m\", \"prometheus neopolitan\"],\n [\"1P 2M 3M 4A 6M 7m\", \"prometheus\"],\n [\"1P 2m 3M 5d 6m 7m\", \"mystery #1\"],\n [\"1P 2m 3M 4P 5A 6M\", \"six tone symmetric\"],\n [\"1P 2M 3M 4A 5A 6A\", \"whole tone\", \"messiaen's mode #1\"],\n [\"1P 2m 4P 4A 5P 7M\", \"messiaen's mode #5\"],\n\n // 7-note scales\n [\"1P 2M 3M 4P 5d 6m 7m\", \"locrian major\", \"arabian\"],\n [\"1P 2m 3M 4A 5P 6m 7M\", \"double harmonic lydian\"],\n [\n \"1P 2m 2A 3M 4A 6m 7m\",\n \"altered\",\n \"super locrian\",\n \"diminished whole tone\",\n \"pomeroy\",\n ],\n [\"1P 2M 3m 4P 5d 6m 7m\", \"locrian #2\", \"half-diminished\", \"aeolian b5\"],\n [\n \"1P 2M 3M 4P 5P 6m 7m\",\n \"mixolydian b6\",\n \"melodic minor fifth mode\",\n \"hindu\",\n ],\n [\"1P 2M 3M 4A 5P 6M 7m\", \"lydian dominant\", \"lydian b7\", \"overtone\"],\n [\"1P 2M 3M 4A 5A 6M 7M\", \"lydian augmented\"],\n [\n \"1P 2m 3m 4P 5P 6M 7m\",\n \"dorian b2\",\n \"phrygian #6\",\n \"melodic minor second mode\",\n ],\n [\n \"1P 2m 3m 4d 5d 6m 7d\",\n \"ultralocrian\",\n \"superlocrian bb7\",\n \"superlocrian diminished\",\n ],\n [\"1P 2m 3m 4P 5d 6M 7m\", \"locrian 6\", \"locrian natural 6\", \"locrian sharp 6\"],\n [\"1P 2A 3M 4P 5P 5A 7M\", \"augmented heptatonic\"],\n // Source https://en.wikipedia.org/wiki/Ukrainian_Dorian_scale\n [\n \"1P 2M 3m 4A 5P 6M 7m\",\n \"dorian #4\",\n \"ukrainian dorian\",\n \"romanian minor\",\n \"altered dorian\",\n ],\n [\"1P 2M 3m 4A 5P 6M 7M\", \"lydian diminished\"],\n [\"1P 2M 3M 4A 5A 7m 7M\", \"leading whole tone\"],\n [\"1P 2M 3M 4A 5P 6m 7m\", \"lydian minor\"],\n [\"1P 2m 3M 4P 5P 6m 7m\", \"phrygian dominant\", \"spanish\", \"phrygian major\"],\n [\"1P 2m 3m 4P 5P 6m 7M\", \"balinese\"],\n [\"1P 2m 3m 4P 5P 6M 7M\", \"neopolitan major\"],\n [\"1P 2M 3M 4P 5P 6m 7M\", \"harmonic major\"],\n [\"1P 2m 3M 4P 5P 6m 7M\", \"double harmonic major\", \"gypsy\"],\n [\"1P 2M 3m 4A 5P 6m 7M\", \"hungarian minor\"],\n [\"1P 2A 3M 4A 5P 6M 7m\", \"hungarian major\"],\n [\"1P 2m 3M 4P 5d 6M 7m\", \"oriental\"],\n [\"1P 2m 3m 3M 4A 5P 7m\", \"flamenco\"],\n [\"1P 2m 3m 4A 5P 6m 7M\", \"todi raga\"],\n [\"1P 2m 3M 4P 5d 6m 7M\", \"persian\"],\n [\"1P 2m 3M 5d 6m 7m 7M\", \"enigmatic\"],\n [\n \"1P 2M 3M 4P 5A 6M 7M\",\n \"major augmented\",\n \"major #5\",\n \"ionian augmented\",\n \"ionian #5\",\n ],\n [\"1P 2A 3M 4A 5P 6M 7M\", \"lydian #9\"],\n\n // 8-note scales\n [\"1P 2m 2M 4P 4A 5P 6m 7M\", \"messiaen's mode #4\"],\n [\"1P 2m 3M 4P 4A 5P 6m 7M\", \"purvi raga\"],\n [\"1P 2m 3m 3M 4P 5P 6m 7m\", \"spanish heptatonic\"],\n [\"1P 2M 3m 3M 4P 5P 6M 7m\", \"bebop minor\"],\n [\"1P 2M 3M 4P 5P 5A 6M 7M\", \"bebop major\"],\n [\"1P 2m 3m 4P 5d 5P 6m 7m\", \"bebop locrian\"],\n [\"1P 2M 3m 4P 5P 6m 7m 7M\", \"minor bebop\"],\n [\"1P 2M 3M 4P 5d 5P 6M 7M\", \"ichikosucho\"],\n [\"1P 2M 3m 4P 5P 6m 6M 7M\", \"minor six diminished\"],\n [\n \"1P 2m 3m 3M 4A 5P 6M 7m\",\n \"half-whole diminished\",\n \"dominant diminished\",\n \"messiaen's mode #2\",\n ],\n [\"1P 3m 3M 4P 5P 6M 7m 7M\", \"kafi raga\"],\n [\"1P 2M 3M 4P 4A 5A 6A 7M\", \"messiaen's mode #6\"],\n\n // 9-note scales\n [\"1P 2M 3m 3M 4P 5d 5P 6M 7m\", \"composite blues\"],\n [\"1P 2M 3m 3M 4A 5P 6m 7m 7M\", \"messiaen's mode #3\"],\n\n // 10-note scales\n [\"1P 2m 2M 3m 4P 4A 5P 6m 6M 7M\", \"messiaen's mode #7\"],\n\n // 12-note scales\n [\"1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M\", \"chromatic\"],\n];\n\nexport default SCALES;\n", "import { detect } from \"@tonaljs/chord-detect\";\nimport {\n ChordType,\n all as chordTypes,\n get as getChordType,\n} from \"@tonaljs/chord-type\";\nimport { tonicIntervalsTransposer } from \"@tonaljs/core\";\n\nimport {\n deprecate,\n distance,\n note,\n NoteName,\n tokenizeNote,\n transpose as transposeNote,\n} from \"@tonaljs/core\";\n\nimport { isSubsetOf, isSupersetOf } from \"@tonaljs/pcset\";\n\nimport { all as scaleTypes } from \"@tonaljs/scale-type\";\nexport { detect } from \"@tonaljs/chord-detect\";\n\ntype ChordName = string;\ntype ChordNameTokens = [string, string]; // [TONIC, SCALE TYPE]\n\nexport interface Chord extends ChordType {\n tonic: string | null;\n type: string;\n root: string;\n rootDegree: number;\n symbol: string;\n notes: NoteName[];\n}\n\nconst NoChord: Chord = {\n empty: true,\n name: \"\",\n symbol: \"\",\n root: \"\",\n rootDegree: 0,\n type: \"\",\n tonic: null,\n setNum: NaN,\n quality: \"Unknown\",\n chroma: \"\",\n normalized: \"\",\n aliases: [],\n notes: [],\n intervals: [],\n};\n\n// 6, 64, 7, 9, 11 and 13 are consider part of the chord\n// (see https://github.com/danigb/tonal/issues/55)\n//const NUM_TYPES = /^(6|64|7|9|11|13)$/;\n/**\n * Tokenize a chord name. It returns an array with the tonic and chord type\n * If not tonic is found, all the name is considered the chord name.\n *\n * This function does NOT check if the chord type exists or not. It only tries\n * to split the tonic and chord type.\n *\n * @function\n * @param {string} name - the chord name\n * @return {Array} an array with [tonic, type]\n * @example\n * tokenize(\"Cmaj7\") // => [ \"C\", \"maj7\" ]\n * tokenize(\"C7\") // => [ \"C\", \"7\" ]\n * tokenize(\"mMaj7\") // => [ null, \"mMaj7\" ]\n * tokenize(\"Cnonsense\") // => [ null, \"nonsense\" ]\n */\nexport function tokenize(name: string): ChordNameTokens {\n const [letter, acc, oct, type] = tokenizeNote(name);\n if (letter === \"\") {\n return [\"\", name];\n }\n // aug is augmented (see https://github.com/danigb/tonal/issues/55)\n if (letter === \"A\" && type === \"ug\") {\n return [\"\", \"aug\"];\n }\n return [letter + acc, oct + type];\n}\n\n/**\n * Get a Chord from a chord name.\n */\nexport function get(src: ChordName | ChordNameTokens): Chord {\n if (src === \"\") {\n return NoChord;\n }\n if (Array.isArray(src) && src.length === 2) {\n return getChord(src[1], src[0]);\n } else {\n const [tonic, type] = tokenize(src);\n const chord = getChord(type, tonic);\n return chord.empty ? getChord(src) : chord;\n }\n}\n\n/**\n * Get chord properties\n *\n * @param typeName - the chord type name\n * @param [tonic] - Optional tonic\n * @param [root] - Optional root (requires a tonic)\n */\nexport function getChord(\n typeName: string,\n optionalTonic?: string,\n optionalRoot?: string,\n): Chord {\n const type = getChordType(typeName);\n const tonic = note(optionalTonic || \"\");\n const root = note(optionalRoot || \"\");\n\n if (\n type.empty ||\n (optionalTonic && tonic.empty) ||\n (optionalRoot && root.empty)\n ) {\n return NoChord;\n }\n\n const rootInterval = distance(tonic.pc, root.pc);\n const rootDegree = type.intervals.indexOf(rootInterval) + 1;\n if (!root.empty && !rootDegree) {\n return NoChord;\n }\n\n const intervals = Array.from(type.intervals);\n\n for (let i = 1; i < rootDegree; i++) {\n const num = intervals[0][0];\n const quality = intervals[0][1];\n const newNum = parseInt(num, 10) + 7;\n intervals.push(`${newNum}${quality}`);\n intervals.shift();\n }\n\n const notes = tonic.empty\n ? []\n : intervals.map((i) => transposeNote(tonic, i));\n\n typeName = type.aliases.indexOf(typeName) !== -1 ? typeName : type.aliases[0];\n const symbol = `${tonic.empty ? \"\" : tonic.pc}${typeName}${\n root.empty || rootDegree <= 1 ? \"\" : \"/\" + root.pc\n }`;\n const name = `${optionalTonic ? tonic.pc + \" \" : \"\"}${type.name}${\n rootDegree > 1 && optionalRoot ? \" over \" + root.pc : \"\"\n }`;\n return {\n ...type,\n name,\n symbol,\n type: type.name,\n root: root.name,\n intervals,\n rootDegree,\n tonic: tonic.name,\n notes,\n };\n}\n\nexport const chord = deprecate(\"Chord.chord\", \"Chord.get\", get);\n\n/**\n * Transpose a chord name\n *\n * @param {string} chordName - the chord name\n * @return {string} the transposed chord\n *\n * @example\n * transpose('Dm7', 'P4') // => 'Gm7\n */\nexport function transpose(chordName: string, interval: string): string {\n const [tonic, type] = tokenize(chordName);\n if (!tonic) {\n return chordName;\n }\n return transposeNote(tonic, interval) + type;\n}\n\n/**\n * Get all scales where the given chord fits\n *\n * @example\n * chordScales('C7b9')\n * // => [\"phrygian dominant\", \"flamenco\", \"spanish heptatonic\", \"half-whole diminished\", \"chromatic\"]\n */\nexport function chordScales(name: string): string[] {\n const s = get(name);\n const isChordIncluded = isSupersetOf(s.chroma);\n return scaleTypes()\n .filter((scale) => isChordIncluded(scale.chroma))\n .map((scale) => scale.name);\n}\n/**\n * Get all chords names that are a superset of the given one\n * (has the same notes and at least one more)\n *\n * @function\n * @example\n * extended(\"CMaj7\")\n * // => [ 'Cmaj#4', 'Cmaj7#9#11', 'Cmaj9', 'CM7add13', 'Cmaj13', 'Cmaj9#11', 'CM13#11', 'CM7b9' ]\n */\nexport function extended(chordName: string): string[] {\n const s = get(chordName);\n const isSuperset = isSupersetOf(s.chroma);\n return chordTypes()\n .filter((chord) => isSuperset(chord.chroma))\n .map((chord) => s.tonic + chord.aliases[0]);\n}\n\n/**\n * Find all chords names that are a subset of the given one\n * (has less notes but all from the given chord)\n *\n * @example\n */\nexport function reduced(chordName: string): string[] {\n const s = get(chordName);\n const isSubset = isSubsetOf(s.chroma);\n return chordTypes()\n .filter((chord) => isSubset(chord.chroma))\n .map((chord) => s.tonic + chord.aliases[0]);\n}\n\n/**\n * Returns a function to get a note name from the scale degree.\n *\n * @example\n * [1, 2, 3, 4].map(Chord.degrees(\"C\")) => [\"C\", \"E\", \"G\", \"C\"]\n * [1, 2, 3, 4].map(Chord.degrees(\"C4\")) => [\"C4\", \"E4\", \"G4\", \"C5\"]\n */\nexport function degrees(chordName: string | ChordNameTokens) {\n const { intervals, tonic } = get(chordName);\n const transpose = tonicIntervalsTransposer(intervals, tonic);\n return (degree: number) =>\n degree ? transpose(degree > 0 ? degree - 1 : degree) : \"\";\n}\n\n/**\n * Sames as `degree` but with 0-based index\n */\nexport function steps(chordName: string | ChordNameTokens) {\n const { intervals, tonic } = get(chordName);\n return tonicIntervalsTransposer(intervals, tonic);\n}\n\nexport default {\n getChord,\n get,\n detect,\n chordScales,\n extended,\n reduced,\n tokenize,\n transpose,\n degrees,\n steps,\n\n // deprecate\n chord,\n};\n", "// source: https://en.wikipedia.org/wiki/Note_value\nconst DATA: [number, string, string[]][] = [\n [\n 0.125,\n \"dl\",\n [\"large\", \"duplex longa\", \"maxima\", \"octuple\", \"octuple whole\"],\n ],\n [0.25, \"l\", [\"long\", \"longa\"]],\n [0.5, \"d\", [\"double whole\", \"double\", \"breve\"]],\n [1, \"w\", [\"whole\", \"semibreve\"]],\n [2, \"h\", [\"half\", \"minim\"]],\n [4, \"q\", [\"quarter\", \"crotchet\"]],\n [8, \"e\", [\"eighth\", \"quaver\"]],\n [16, \"s\", [\"sixteenth\", \"semiquaver\"]],\n [32, \"t\", [\"thirty-second\", \"demisemiquaver\"]],\n [64, \"sf\", [\"sixty-fourth\", \"hemidemisemiquaver\"]],\n [128, \"h\", [\"hundred twenty-eighth\"]],\n [256, \"th\", [\"two hundred fifty-sixth\"]],\n];\n\nexport default DATA;\n", "import DATA from \"./data\";\n\ntype Fraction = [number, number];\n\nconst VALUES: DurationValue[] = [];\n\nDATA.forEach(([denominator, shorthand, names]) =>\n add(denominator, shorthand, names),\n);\n\nexport interface DurationValue {\n empty: boolean;\n value: number;\n name: string;\n fraction: Fraction;\n shorthand: string;\n dots: string;\n names: string[];\n}\n\nconst NoDuration: DurationValue = {\n empty: true,\n name: \"\",\n value: 0,\n fraction: [0, 0],\n shorthand: \"\",\n dots: \"\",\n names: [],\n};\n\nexport function names(): string[] {\n return VALUES.reduce((names, duration) => {\n duration.names.forEach((name) => names.push(name));\n return names;\n }, [] as string[]);\n}\n\nexport function shorthands(): string[] {\n return VALUES.map((dur) => dur.shorthand);\n}\n\nconst REGEX = /^([^.]+)(\\.*)$/;\n\nexport function get(name: string): DurationValue {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, simple, dots] = REGEX.exec(name) || [];\n const base = VALUES.find(\n (dur) => dur.shorthand === simple || dur.names.includes(simple),\n );\n if (!base) {\n return NoDuration;\n }\n\n const fraction = calcDots(base.fraction, dots.length);\n const value = fraction[0] / fraction[1];\n\n return { ...base, name, dots, value, fraction };\n}\n\nexport const value = (name: string) => get(name).value;\nexport const fraction = (name: string) => get(name).fraction;\n\nexport default { names, shorthands, get, value, fraction };\n\n//// PRIVATE ////\n\nfunction add(denominator: number, shorthand: string, names: string[]) {\n VALUES.push({\n empty: false,\n dots: \"\",\n name: \"\",\n value: 1 / denominator,\n fraction: denominator < 1 ? [1 / denominator, 1] : [1, denominator],\n shorthand,\n names,\n });\n}\n\nfunction calcDots(fraction: Fraction, dots: number): Fraction {\n const pow = Math.pow(2, dots);\n\n let numerator = fraction[0] * pow;\n let denominator = fraction[1] * pow;\n const base = numerator;\n\n // add fractions\n for (let i = 0; i < dots; i++) {\n numerator += base / Math.pow(2, i + 1);\n }\n\n // simplify\n while (numerator % 2 === 0 && denominator % 2 === 0) {\n numerator /= 2;\n denominator /= 2;\n }\n return [numerator, denominator];\n}\n", "import {\n IntervalCoordinates,\n IntervalName,\n NoteCoordinates,\n coordToInterval,\n distance as dist,\n interval as props,\n} from \"@tonaljs/core\";\n\n/**\n * Get the natural list of names\n */\nexport function names(): IntervalName[] {\n return \"1P 2M 3M 4P 5P 6m 7m\".split(\" \");\n}\n\n/**\n * Get properties of an interval\n *\n * @function\n * @example\n * Interval.get('P4') // => {\"alt\": 0, \"dir\": 1, \"name\": \"4P\", \"num\": 4, \"oct\": 0, \"q\": \"P\", \"semitones\": 5, \"simple\": 4, \"step\": 3, \"type\": \"perfectable\"}\n */\nexport const get = props;\n\n/**\n * Get name of an interval\n *\n * @function\n * @example\n * Interval.name('4P') // => \"4P\"\n * Interval.name('P4') // => \"4P\"\n * Interval.name('C4') // => \"\"\n */\nexport const name = (name: string) => props(name).name;\n\n/**\n * Get semitones of an interval\n * @function\n * @example\n * Interval.semitones('P4') // => 5\n */\nexport const semitones = (name: string) => props(name).semitones;\n\n/**\n * Get quality of an interval\n * @function\n * @example\n * Interval.quality('P4') // => \"P\"\n */\nexport const quality = (name: string) => props(name).q;\n\n/**\n * Get number of an interval\n * @function\n * @example\n * Interval.num('P4') // => 4\n */\nexport const num = (name: string) => props(name).num;\n\n/**\n * Get the simplified version of an interval.\n *\n * @function\n * @param {string} interval - the interval to simplify\n * @return {string} the simplified interval\n *\n * @example\n * Interval.simplify(\"9M\") // => \"2M\"\n * Interval.simplify(\"2M\") // => \"2M\"\n * Interval.simplify(\"-2M\") // => \"7m\"\n * [\"8P\", \"9M\", \"10M\", \"11P\", \"12P\", \"13M\", \"14M\", \"15P\"].map(Interval.simplify)\n * // => [ \"8P\", \"2M\", \"3M\", \"4P\", \"5P\", \"6M\", \"7M\", \"8P\" ]\n */\nexport function simplify(name: IntervalName): IntervalName {\n const i = props(name);\n return i.empty ? \"\" : i.simple + i.q;\n}\n\n/**\n * Get the inversion (https://en.wikipedia.org/wiki/Inversion_(music)#Intervals)\n * of an interval.\n *\n * @function\n * @param {string} interval - the interval to invert in interval shorthand\n * notation or interval array notation\n * @return {string} the inverted interval\n *\n * @example\n * Interval.invert(\"3m\") // => \"6M\"\n * Interval.invert(\"2M\") // => \"7m\"\n */\nexport function invert(name: IntervalName): IntervalName {\n const i = props(name);\n if (i.empty) {\n return \"\";\n }\n const step = (7 - i.step) % 7;\n const alt = i.type === \"perfectable\" ? -i.alt : -(i.alt + 1);\n return props({ step, alt, oct: i.oct, dir: i.dir }).name;\n}\n\n// interval numbers\nconst IN = [1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7];\n// interval qualities\nconst IQ = \"P m M m M P d P m M m M\".split(\" \");\n\n/**\n * Get interval name from semitones number. Since there are several interval\n * names for the same number, the name it's arbitrary, but deterministic.\n *\n * @param {Integer} num - the number of semitones (can be negative)\n * @return {string} the interval name\n * @example\n * Interval.fromSemitones(7) // => \"5P\"\n * Interval.fromSemitones(-7) // => \"-5P\"\n */\nexport function fromSemitones(semitones: number): IntervalName {\n const d = semitones < 0 ? -1 : 1;\n const n = Math.abs(semitones);\n const c = n % 12;\n const o = Math.floor(n / 12);\n return d * (IN[c] + 7 * o) + IQ[c];\n}\n\n/**\n * Find interval between two notes\n *\n * @example\n * Interval.distance(\"C4\", \"G4\"); // => \"5P\"\n */\nexport const distance = dist;\n\n/**\n * Adds two intervals\n *\n * @function\n * @param {string} interval1\n * @param {string} interval2\n * @return {string} the added interval name\n * @example\n * Interval.add(\"3m\", \"5P\") // => \"7m\"\n */\nexport const add = combinator((a, b) => [a[0] + b[0], a[1] + b[1]]);\n\n/**\n * Returns a function that adds an interval\n *\n * @function\n * @example\n * ['1P', '2M', '3M'].map(Interval.addTo('5P')) // => [\"5P\", \"6M\", \"7M\"]\n */\nexport const addTo = (interval: string) => (other: string) =>\n add(interval, other);\n\n/**\n * Subtracts two intervals\n *\n * @function\n * @param {string} minuendInterval\n * @param {string} subtrahendInterval\n * @return {string} the substracted interval name\n * @example\n * Interval.substract('5P', '3M') // => '3m'\n * Interval.substract('3M', '5P') // => '-3m'\n */\nexport const substract = combinator((a, b) => [a[0] - b[0], a[1] - b[1]]);\n\nexport function transposeFifths(\n interval: IntervalName,\n fifths: number,\n): IntervalName {\n const ivl = get(interval);\n if (ivl.empty) return \"\";\n\n const [nFifths, nOcts, dir] = ivl.coord;\n return coordToInterval([nFifths + fifths, nOcts, dir]).name;\n}\n\nexport default {\n names,\n get,\n name,\n num,\n semitones,\n quality,\n fromSemitones,\n distance,\n invert,\n simplify,\n add,\n addTo,\n substract,\n transposeFifths,\n};\n\n//// PRIVATE ////\n\ntype Operation = (\n a: IntervalCoordinates,\n b: IntervalCoordinates,\n) => NoteCoordinates;\n\nfunction combinator(fn: Operation) {\n return (a: IntervalName, b: IntervalName): IntervalName | undefined => {\n const coordA = props(a).coord;\n const coordB = props(b).coord;\n if (coordA && coordB) {\n const coord = fn(coordA, coordB);\n return coordToInterval(coord).name;\n }\n };\n}\n", "import { NoteName, note as props } from \"@tonaljs/core\";\n\ntype Midi = number;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isMidi(arg: any): arg is Midi {\n return +arg >= 0 && +arg <= 127;\n}\n\n/**\n * Get the note midi number (a number between 0 and 127)\n *\n * It returns undefined if not valid note name\n *\n * @function\n * @param {string|number} note - the note name or midi number\n * @return {Integer} the midi number or undefined if not valid note\n * @example\n * import { toMidi } from '@tonaljs/midi'\n * toMidi(\"C4\") // => 60\n * toMidi(60) // => 60\n * toMidi('60') // => 60\n */\nexport function toMidi(note: NoteName | number): number | null {\n if (isMidi(note)) {\n return +note;\n }\n const n = props(note);\n return n.empty ? null : n.midi;\n}\n\n/**\n * Get the frequency in hertzs from midi number\n *\n * @param {number} midi - the note midi number\n * @param {number} [tuning = 440] - A4 tuning frequency in Hz (440 by default)\n * @return {number} the frequency or null if not valid note midi\n * @example\n * import { midiToFreq} from '@tonaljs/midi'\n * midiToFreq(69) // => 440\n */\nexport function midiToFreq(midi: number, tuning = 440): number {\n return Math.pow(2, (midi - 69) / 12) * tuning;\n}\n\nconst L2 = Math.log(2);\nconst L440 = Math.log(440);\n\n/**\n * Get the midi number from a frequency in hertz. The midi number can\n * contain decimals (with two digits precision)\n *\n * @param {number} frequency\n * @return {number}\n * @example\n * import { freqToMidi} from '@tonaljs/midi'\n * freqToMidi(220)); //=> 57\n * freqToMidi(261.62)); //=> 60\n * freqToMidi(261)); //=> 59.96\n */\nexport function freqToMidi(freq: number): number {\n const v = (12 * (Math.log(freq) - L440)) / L2 + 69;\n return Math.round(v * 100) / 100;\n}\n\nexport interface ToNoteNameOptions {\n pitchClass?: boolean;\n sharps?: boolean;\n}\n\nconst SHARPS = \"C C# D D# E F F# G G# A A# B\".split(\" \");\nconst FLATS = \"C Db D Eb E F Gb G Ab A Bb B\".split(\" \");\n/**\n * Given a midi number, returns a note name. The altered notes will have\n * flats unless explicitly set with the optional `useSharps` parameter.\n *\n * @function\n * @param {number} midi - the midi note number\n * @param {Object} options = default: `{ sharps: false, pitchClass: false }`\n * @param {boolean} useSharps - (Optional) set to true to use sharps instead of flats\n * @return {string} the note name\n * @example\n * import { midiToNoteName } from '@tonaljs/midi'\n * midiToNoteName(61) // => \"Db4\"\n * midiToNoteName(61, { pitchClass: true }) // => \"Db\"\n * midiToNoteName(61, { sharps: true }) // => \"C#4\"\n * midiToNoteName(61, { pitchClass: true, sharps: true }) // => \"C#\"\n * // it rounds to nearest note\n * midiToNoteName(61.7) // => \"D4\"\n */\nexport function midiToNoteName(midi: number, options: ToNoteNameOptions = {}) {\n if (isNaN(midi) || midi === -Infinity || midi === Infinity) return \"\";\n midi = Math.round(midi);\n const pcs = options.sharps === true ? SHARPS : FLATS;\n const pc = pcs[midi % 12];\n if (options.pitchClass) {\n return pc;\n }\n const o = Math.floor(midi / 12) - 1;\n return pc + o;\n}\n\nexport function chroma(midi: number): number {\n return midi % 12;\n}\n\nfunction pcsetFromChroma(chroma: string): number[] {\n return chroma.split(\"\").reduce((pcset, val, index) => {\n if (index < 12 && val === \"1\") pcset.push(index);\n return pcset;\n }, [] as number[]);\n}\n\nfunction pcsetFromMidi(midi: number[]): number[] {\n return midi\n .map(chroma)\n .sort((a, b) => a - b)\n .filter((n, i, a) => i === 0 || n !== a[i - 1]);\n}\n\n/**\n * Given a list of midi numbers, returns the pitch class set (unique chroma numbers)\n * @param midi\n * @example\n *\n */\nexport function pcset(notes: number[] | string): number[] {\n return Array.isArray(notes) ? pcsetFromMidi(notes) : pcsetFromChroma(notes);\n}\n\nexport function pcsetNearest(notes: number[] | string) {\n const set = pcset(notes);\n return (midi: number): number | undefined => {\n const ch = chroma(midi);\n for (let i = 0; i < 12; i++) {\n if (set.includes(ch + i)) return midi + i;\n if (set.includes(ch - i)) return midi - i;\n }\n return undefined;\n };\n}\n\nexport function pcsetSteps(notes: number[] | string, tonic: number) {\n const set = pcset(notes);\n const len = set.length;\n return (step: number): number => {\n const index = step < 0 ? (len - (-step % len)) % len : step % len;\n const octaves = Math.floor(step / len);\n return set[index] + octaves * 12 + tonic;\n };\n}\n\nexport function pcsetDegrees(notes: number[] | string, tonic: number) {\n const steps = pcsetSteps(notes, tonic);\n return (degree: number): number | undefined => {\n if (degree === 0) return undefined;\n return steps(degree > 0 ? degree - 1 : degree);\n };\n}\n\nexport default {\n chroma,\n freqToMidi,\n isMidi,\n midiToFreq,\n midiToNoteName,\n pcsetNearest,\n pcset,\n pcsetDegrees,\n pcsetSteps,\n toMidi,\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IntervalName,\n Note,\n NoteLiteral,\n NoteName,\n Pitch,\n transpose as _tr,\n note as props,\n} from \"@tonaljs/core\";\nimport { freqToMidi, midiToNoteName } from \"@tonaljs/midi\";\n\nconst NAMES = [\"C\", \"D\", \"E\", \"F\", \"G\", \"A\", \"B\"];\n\nconst toName = (n: Note) => n.name;\nconst onlyNotes = (array: any[]) =>\n array.map(props).filter((n) => !n.empty) as Note[];\n\n/**\n * Return the natural note names without octave\n * @function\n * @example\n * Note.names(); // => [\"C\", \"D\", \"E\", \"F\", \"G\", \"A\", \"B\"]\n */\nexport function names(array?: any[]): string[] {\n if (array === undefined) {\n return NAMES.slice();\n } else if (!Array.isArray(array)) {\n return [];\n } else {\n return onlyNotes(array).map(toName);\n }\n}\n\n/**\n * Get a note from a note name\n *\n * @function\n * @example\n * Note.get('Bb4') // => { name: \"Bb4\", midi: 70, chroma: 10, ... }\n */\nexport const get = props;\n\n/**\n * Get the note name\n * @function\n */\nexport const name = (note: NoteLiteral) => get(note).name;\n\n/**\n * Get the note pitch class name\n * @function\n */\nexport const pitchClass = (note: NoteLiteral) => get(note).pc;\n\n/**\n * Get the note accidentals\n * @function\n */\nexport const accidentals = (note: NoteLiteral) => get(note).acc;\n\n/**\n * Get the note octave\n * @function\n */\nexport const octave = (note: NoteLiteral) => get(note).oct;\n\n/**\n * Get the note midi\n * @function\n */\nexport const midi = (note: NoteLiteral) => get(note).midi;\n\n/**\n * Get the note midi\n * @function\n */\nexport const freq = (note: NoteLiteral) => get(note).freq;\n\n/**\n * Get the note chroma\n * @function\n */\nexport const chroma = (note: NoteLiteral) => get(note).chroma;\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n *\n * @function\n * @param {number} midi - the midi note number\n * @return {string} the note name\n * @example\n * Note.fromMidi(61) // => \"Db4\"\n * Note.fromMidi(61.7) // => \"D4\"\n */\nexport function fromMidi(midi: number) {\n return midiToNoteName(midi);\n}\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n */\nexport function fromFreq(freq: number) {\n return midiToNoteName(freqToMidi(freq));\n}\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n */\nexport function fromFreqSharps(freq: number) {\n return midiToNoteName(freqToMidi(freq), { sharps: true });\n}\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n *\n * @function\n * @param {number} midi - the midi note number\n * @return {string} the note name\n * @example\n * Note.fromMidiSharps(61) // => \"C#4\"\n */\n\nexport function fromMidiSharps(midi: number) {\n return midiToNoteName(midi, { sharps: true });\n}\n\n/**\n * Transpose a note by an interval\n */\nexport const transpose = _tr;\nexport const tr = _tr;\n\n/**\n * Transpose by an interval.\n * @function\n * @param {string} interval\n * @return {function} a function that transposes by the given interval\n * @example\n * [\"C\", \"D\", \"E\"].map(Note.transposeBy(\"5P\"));\n * // => [\"G\", \"A\", \"B\"]\n */\nexport const transposeBy = (interval: IntervalName) => (note: NoteName) =>\n transpose(note, interval);\nexport const trBy = transposeBy;\n\n/**\n * Transpose from a note\n * @function\n * @param {string} note\n * @return {function} a function that transposes the the note by an interval\n * [\"1P\", \"3M\", \"5P\"].map(Note.transposeFrom(\"C\"));\n * // => [\"C\", \"E\", \"G\"]\n */\nexport const transposeFrom = (note: NoteName) => (interval: IntervalName) =>\n transpose(note, interval);\nexport const trFrom = transposeFrom;\n\n/**\n * Transpose a note by a number of perfect fifths.\n *\n * @function\n * @param {string} note - the note name\n * @param {number} fifhts - the number of fifths\n * @return {string} the transposed note name\n *\n * @example\n * import { transposeFifths } from \"@tonaljs/note\"\n * transposeFifths(\"G4\", 1) // => \"D\"\n * [0, 1, 2, 3, 4].map(fifths => transposeFifths(\"C\", fifths)) // => [\"C\", \"G\", \"D\", \"A\", \"E\"]\n */\nexport function transposeFifths(noteName: NoteName, fifths: number): NoteName {\n return transpose(noteName, [fifths, 0]);\n}\nexport const trFifths = transposeFifths;\n\n// TODO: documentation\nexport function transposeOctaves(\n noteName: NoteName,\n octaves: number,\n): NoteName {\n return transpose(noteName, [0, octaves]);\n}\n\nexport type NoteComparator = (a: Note, b: Note) => number;\n\nexport const ascending: NoteComparator = (a, b) => a.height - b.height;\nexport const descending: NoteComparator = (a, b) => b.height - a.height;\n\nexport function sortedNames(\n notes: any[],\n comparator?: NoteComparator,\n): string[] {\n comparator = comparator || ascending;\n return onlyNotes(notes).sort(comparator).map(toName);\n}\n\nexport function sortedUniqNames(notes: any[]): string[] {\n return sortedNames(notes, ascending).filter(\n (n, i, a) => i === 0 || n !== a[i - 1],\n );\n}\n\n/**\n * Simplify a note\n *\n * @function\n * @param {string} note - the note to be simplified\n * - sameAccType: default true. Use same kind of accidentals that source\n * @return {string} the simplified note or '' if not valid note\n * @example\n * simplify(\"C##\") // => \"D\"\n * simplify(\"C###\") // => \"D#\"\n * simplify(\"C###\")\n * simplify(\"B#4\") // => \"C5\"\n */\nexport const simplify = (noteName: NoteName | Pitch): string => {\n const note = get(noteName);\n if (note.empty) {\n return \"\";\n }\n return midiToNoteName(note.midi || note.chroma, {\n sharps: note.alt > 0,\n pitchClass: note.midi === null,\n });\n};\n/**\n * Get enharmonic of a note\n *\n * @function\n * @param {string} note\n * @param [string] - [optional] Destination pitch class\n * @return {string} the enharmonic note name or '' if not valid note\n * @example\n * Note.enharmonic(\"Db\") // => \"C#\"\n * Note.enharmonic(\"C\") // => \"C\"\n * Note.enharmonic(\"F2\",\"E#\") // => \"E#2\"\n */\nexport function enharmonic(noteName: string, destName?: string) {\n const src = get(noteName);\n if (src.empty) {\n return \"\";\n }\n\n // destination: use given or generate one\n const dest = get(\n destName ||\n midiToNoteName(src.midi || src.chroma, {\n sharps: src.alt < 0,\n pitchClass: true,\n }),\n );\n\n // ensure destination is valid\n if (dest.empty || dest.chroma !== src.chroma) {\n return \"\";\n }\n\n // if src has no octave, no need to calculate anything else\n if (src.oct === undefined) {\n return dest.pc;\n }\n\n // detect any octave overflow\n const srcChroma = src.chroma - src.alt;\n const destChroma = dest.chroma - dest.alt;\n const destOctOffset =\n srcChroma > 11 || destChroma < 0\n ? -1\n : srcChroma < 0 || destChroma > 11\n ? +1\n : 0;\n // calculate the new octave\n const destOct = src.oct + destOctOffset;\n return dest.pc + destOct;\n}\n\nexport default {\n names,\n get,\n name,\n pitchClass,\n accidentals,\n octave,\n midi,\n ascending,\n descending,\n sortedNames,\n sortedUniqNames,\n fromMidi,\n fromMidiSharps,\n freq,\n fromFreq,\n fromFreqSharps,\n chroma,\n transpose,\n tr,\n transposeBy,\n trBy,\n transposeFrom,\n trFrom,\n transposeFifths,\n transposeOctaves,\n trFifths,\n simplify,\n enharmonic,\n};\n", "import {\n accToAlt,\n altToAcc,\n deprecate,\n interval,\n isNamed,\n isPitch,\n Pitch,\n} from \"@tonaljs/core\";\n\nexport interface RomanNumeral extends Pitch {\n readonly name: string;\n readonly empty: boolean;\n readonly roman: string;\n readonly interval: string;\n readonly acc: string;\n readonly chordType: string;\n readonly major: boolean;\n readonly dir: 1;\n}\n\nexport interface NoRomanNumeral extends Partial {\n readonly empty: true;\n readonly name: \"\";\n readonly chordType: \"\";\n}\nconst NoRomanNumeral: NoRomanNumeral = { empty: true, name: \"\", chordType: \"\" };\n\nconst cache: Record = {};\n\n/**\n * Get properties of a roman numeral string\n *\n * @function\n * @param {string} - the roman numeral string (can have type, like: Imaj7)\n * @return {Object} - the roman numeral properties\n * @param {string} name - the roman numeral (tonic)\n * @param {string} type - the chord type\n * @param {string} num - the number (1 = I, 2 = II...)\n * @param {boolean} major - major or not\n *\n * @example\n * romanNumeral(\"VIIb5\") // => { name: \"VII\", type: \"b5\", num: 7, major: true }\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function get(src: any): RomanNumeral | NoRomanNumeral {\n return typeof src === \"string\"\n ? cache[src] || (cache[src] = parse(src))\n : typeof src === \"number\"\n ? get(NAMES[src] || \"\")\n : isPitch(src)\n ? fromPitch(src)\n : isNamed(src)\n ? get(src.name)\n : NoRomanNumeral;\n}\n\nconst romanNumeral = deprecate(\n \"RomanNumeral.romanNumeral\",\n \"RomanNumeral.get\",\n get,\n);\n\n/**\n * Get roman numeral names\n *\n * @function\n * @param {boolean} [isMajor=true]\n * @return {Array}\n *\n * @example\n * names() // => [\"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\"]\n */\nexport function names(major = true) {\n return (major ? NAMES : NAMES_MINOR).slice();\n}\n\nfunction fromPitch(pitch: Pitch): RomanNumeral | NoRomanNumeral {\n return get(altToAcc(pitch.alt) + NAMES[pitch.step]);\n}\n\nconst REGEX =\n /^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;\n\n// [name, accidentals, romanNumeral, chordType]\ntype RomanNumeralTokens = [string, string, string, string];\nexport function tokenize(str: string): RomanNumeralTokens {\n return (REGEX.exec(str) || [\"\", \"\", \"\", \"\"]) as RomanNumeralTokens;\n}\n\nconst ROMANS = \"I II III IV V VI VII\";\nconst NAMES = ROMANS.split(\" \");\nconst NAMES_MINOR = ROMANS.toLowerCase().split(\" \");\n\nfunction parse(src: string): RomanNumeral | NoRomanNumeral {\n const [name, acc, roman, chordType] = tokenize(src);\n if (!roman) {\n return NoRomanNumeral;\n }\n\n const upperRoman = roman.toUpperCase();\n const step = NAMES.indexOf(upperRoman);\n const alt = accToAlt(acc);\n const dir = 1;\n return {\n empty: false,\n name,\n roman,\n interval: interval({ step, alt, dir }).name,\n acc,\n chordType,\n alt,\n step,\n major: roman === upperRoman,\n oct: 0,\n dir,\n };\n}\n\nexport default {\n names,\n get,\n // deprecated\n romanNumeral,\n};\n", "import { accToAlt, altToAcc, note, transpose } from \"@tonaljs/core\";\nimport { transposeFifths } from \"@tonaljs/note\";\nimport { get as roman } from \"@tonaljs/roman-numeral\";\n\nconst Empty: readonly string[] = Object.freeze([] as string[]);\n\nexport interface Key {\n readonly type: \"major\" | \"minor\";\n readonly tonic: string;\n readonly alteration: number;\n readonly keySignature: string;\n}\n\nconst NoKey: Key = {\n type: \"major\",\n tonic: \"\",\n alteration: 0,\n keySignature: \"\",\n};\n\nexport interface KeyScale {\n readonly tonic: string;\n readonly grades: readonly string[];\n readonly intervals: readonly string[];\n readonly scale: readonly string[];\n readonly triads: readonly string[];\n readonly chords: readonly string[];\n readonly chordsHarmonicFunction: readonly string[];\n readonly chordScales: readonly string[];\n}\n\nconst NoKeyScale: KeyScale = {\n tonic: \"\",\n grades: Empty,\n intervals: Empty,\n scale: Empty,\n triads: Empty,\n chords: Empty,\n chordsHarmonicFunction: Empty,\n chordScales: Empty,\n};\n\nexport interface MajorKey extends Key, KeyScale {\n readonly type: \"major\";\n readonly minorRelative: string;\n readonly scale: readonly string[];\n readonly secondaryDominants: readonly string[];\n readonly secondaryDominantsMinorRelative: readonly string[];\n readonly substituteDominants: readonly string[];\n readonly substituteDominantsMinorRelative: readonly string[];\n}\n\nconst NoMajorKey: MajorKey = {\n ...NoKey,\n ...NoKeyScale,\n type: \"major\",\n minorRelative: \"\",\n scale: Empty,\n secondaryDominants: Empty,\n secondaryDominantsMinorRelative: Empty,\n substituteDominants: Empty,\n substituteDominantsMinorRelative: Empty,\n};\n\nexport interface MinorKey extends Key {\n readonly type: \"minor\";\n readonly relativeMajor: string;\n readonly natural: KeyScale;\n readonly harmonic: KeyScale;\n readonly melodic: KeyScale;\n}\n\nconst NoMinorKey: MinorKey = {\n ...NoKey,\n type: \"minor\",\n relativeMajor: \"\",\n natural: NoKeyScale,\n harmonic: NoKeyScale,\n melodic: NoKeyScale,\n};\n\nconst mapScaleToType = (scale: string[], list: string[], sep = \"\") =>\n list.map((type, i) => `${scale[i]}${sep}${type}`);\n\nfunction keyScale(\n grades: string[],\n triads: string[],\n chords: string[],\n harmonicFunctions: string[],\n chordScales: string[],\n) {\n return (tonic: string): KeyScale => {\n const intervals = grades.map((gr) => roman(gr).interval || \"\");\n const scale = intervals.map((interval) => transpose(tonic, interval));\n\n return {\n tonic,\n grades,\n intervals,\n scale,\n triads: mapScaleToType(scale, triads),\n chords: mapScaleToType(scale, chords),\n chordsHarmonicFunction: harmonicFunctions.slice(),\n chordScales: mapScaleToType(scale, chordScales, \" \"),\n };\n };\n}\n\nconst distInFifths = (from: string, to: string) => {\n const f = note(from);\n const t = note(to);\n return f.empty || t.empty ? 0 : t.coord[0] - f.coord[0];\n};\n\nconst MajorScale = keyScale(\n \"I II III IV V VI VII\".split(\" \"),\n \" m m m dim\".split(\" \"),\n \"maj7 m7 m7 maj7 7 m7 m7b5\".split(\" \"),\n \"T SD T SD D T D\".split(\" \"),\n \"major,dorian,phrygian,lydian,mixolydian,minor,locrian\".split(\",\"),\n);\nconst NaturalScale = keyScale(\n \"I II bIII IV V bVI bVII\".split(\" \"),\n \"m dim m m \".split(\" \"),\n \"m7 m7b5 maj7 m7 m7 maj7 7\".split(\" \"),\n \"T SD T SD D SD SD\".split(\" \"),\n \"minor,locrian,major,dorian,phrygian,lydian,mixolydian\".split(\",\"),\n);\nconst HarmonicScale = keyScale(\n \"I II bIII IV V bVI VII\".split(\" \"),\n \"m dim aug m dim\".split(\" \"),\n \"mMaj7 m7b5 +maj7 m7 7 maj7 o7\".split(\" \"),\n \"T SD T SD D SD D\".split(\" \"),\n \"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian\".split(\n \",\",\n ),\n);\nconst MelodicScale = keyScale(\n \"I II bIII IV V VI VII\".split(\" \"),\n \"m m aug dim dim\".split(\" \"),\n \"m6 m7 +maj7 7 7 m7b5 m7b5\".split(\" \"),\n \"T SD T SD D \".split(\" \"),\n \"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered\".split(\n \",\",\n ),\n);\n\n/**\n * Get a major key properties in a given tonic\n * @param tonic\n */\nexport function majorKey(tonic: string): MajorKey {\n const pc = note(tonic).pc;\n if (!pc) return NoMajorKey;\n\n const keyScale = MajorScale(pc);\n const alteration = distInFifths(\"C\", pc);\n const romanInTonic = (src: string) => {\n const r = roman(src);\n if (r.empty) return \"\";\n\n return transpose(tonic, r.interval) + r.chordType;\n };\n\n return {\n ...keyScale,\n type: \"major\",\n minorRelative: transpose(pc, \"-3m\"),\n alteration,\n keySignature: altToAcc(alteration),\n secondaryDominants: \"- VI7 VII7 I7 II7 III7 -\".split(\" \").map(romanInTonic),\n secondaryDominantsMinorRelative: \"- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -\"\n .split(\" \")\n .map(romanInTonic),\n substituteDominants: \"- bIII7 IV7 bV7 bVI7 bVII7 -\"\n .split(\" \")\n .map(romanInTonic),\n substituteDominantsMinorRelative: \"- IIIm7 Im7 IIbm7 VIm7 IVm7 -\"\n .split(\" \")\n .map(romanInTonic),\n };\n}\n\n/**\n * Get minor key properties in a given tonic\n * @param tonic\n */\nexport function minorKey(tnc: string): MinorKey {\n const pc = note(tnc).pc;\n if (!pc) return NoMinorKey;\n\n const alteration = distInFifths(\"C\", pc) - 3;\n return {\n type: \"minor\",\n tonic: pc,\n relativeMajor: transpose(pc, \"3m\"),\n alteration,\n keySignature: altToAcc(alteration),\n natural: NaturalScale(pc),\n harmonic: HarmonicScale(pc),\n melodic: MelodicScale(pc),\n };\n}\n\n/**\n * Given a key signature, returns the tonic of the major key\n * @param sigature\n * @example\n * majorTonicFromKeySignature('###') // => 'A'\n */\nexport function majorTonicFromKeySignature(\n sig: string | number,\n): string | null {\n if (typeof sig === \"number\") {\n return transposeFifths(\"C\", sig);\n } else if (typeof sig === \"string\" && /^b+|#+$/.test(sig)) {\n return transposeFifths(\"C\", accToAlt(sig));\n }\n return null;\n}\n\nexport default { majorKey, majorTonicFromKeySignature, minorKey };\n", "import { rotate } from \"@tonaljs/collection\";\nimport { deprecate, NamedPitch, NoteName, transpose } from \"@tonaljs/core\";\nimport { simplify, transposeFifths } from \"@tonaljs/interval\";\nimport { EmptyPcset, Pcset } from \"@tonaljs/pcset\";\nimport { get as getType } from \"@tonaljs/scale-type\";\n\nconst MODES = [\n [0, 2773, 0, \"ionian\", \"\", \"Maj7\", \"major\"],\n [1, 2902, 2, \"dorian\", \"m\", \"m7\"],\n [2, 3418, 4, \"phrygian\", \"m\", \"m7\"],\n [3, 2741, -1, \"lydian\", \"\", \"Maj7\"],\n [4, 2774, 1, \"mixolydian\", \"\", \"7\"],\n [5, 2906, 3, \"aeolian\", \"m\", \"m7\", \"minor\"],\n [6, 3434, 5, \"locrian\", \"dim\", \"m7b5\"],\n] as const;\n\ntype ModeDatum = (typeof MODES)[number];\n\nexport interface Mode extends Pcset {\n readonly name: string;\n readonly modeNum: number;\n readonly alt: number; // number of alterations === number of fiths\n readonly triad: string;\n readonly seventh: string;\n readonly aliases: string[];\n}\n\nconst NoMode: Mode = {\n ...EmptyPcset,\n name: \"\",\n alt: 0,\n modeNum: NaN,\n triad: \"\",\n seventh: \"\",\n aliases: [],\n};\n\nconst modes: Mode[] = MODES.map(toMode);\nconst index: Record = {};\nmodes.forEach((mode) => {\n index[mode.name] = mode;\n mode.aliases.forEach((alias) => {\n index[alias] = mode;\n });\n});\n\ntype ModeLiteral = string | NamedPitch;\n\n/**\n * Get a Mode by it's name\n *\n * @example\n * get('dorian')\n * // =>\n * // {\n * // intervals: [ '1P', '2M', '3m', '4P', '5P', '6M', '7m' ],\n * // modeNum: 1,\n * // chroma: '101101010110',\n * // normalized: '101101010110',\n * // name: 'dorian',\n * // setNum: 2902,\n * // alt: 2,\n * // triad: 'm',\n * // seventh: 'm7',\n * // aliases: []\n * // }\n */\nexport function get(name: ModeLiteral): Mode {\n return typeof name === \"string\"\n ? index[name.toLowerCase()] || NoMode\n : name && name.name\n ? get(name.name)\n : NoMode;\n}\n\nexport const mode = deprecate(\"Mode.mode\", \"Mode.get\", get);\n\n/**\n * Get a list of all modes\n */\nexport function all() {\n return modes.slice();\n}\nexport const entries = deprecate(\"Mode.mode\", \"Mode.all\", all);\n\n/**\n * Get a list of all mode names\n */\nexport function names() {\n return modes.map((mode) => mode.name);\n}\n\nfunction toMode(mode: ModeDatum): Mode {\n const [modeNum, setNum, alt, name, triad, seventh, alias] = mode;\n const aliases = alias ? [alias] : [];\n const chroma = Number(setNum).toString(2);\n const intervals = getType(name).intervals;\n return {\n empty: false,\n intervals,\n modeNum,\n chroma,\n normalized: chroma,\n name,\n setNum,\n alt,\n triad,\n seventh,\n aliases,\n };\n}\n\nexport function notes(modeName: ModeLiteral, tonic: NoteName) {\n return get(modeName).intervals.map((ivl) => transpose(tonic, ivl));\n}\n\nfunction chords(chords: string[]) {\n return (modeName: ModeLiteral, tonic: NoteName) => {\n const mode = get(modeName);\n if (mode.empty) return [];\n const triads = rotate(mode.modeNum, chords);\n const tonics = mode.intervals.map((i) => transpose(tonic, i));\n return triads.map((triad, i) => tonics[i] + triad);\n };\n}\n\nexport const triads = chords(MODES.map((x) => x[4]));\nexport const seventhChords = chords(MODES.map((x) => x[5]));\n\nexport function distance(destination: ModeLiteral, source: ModeLiteral) {\n const from = get(source);\n const to = get(destination);\n if (from.empty || to.empty) return \"\";\n return simplify(transposeFifths(\"1P\", to.alt - from.alt));\n}\n\nexport function relativeTonic(\n destination: ModeLiteral,\n source: ModeLiteral,\n tonic: NoteName,\n) {\n return transpose(tonic, distance(destination, source));\n}\n\nexport default {\n get,\n names,\n all,\n distance,\n relativeTonic,\n notes,\n triads,\n seventhChords,\n // deprecated\n entries,\n mode,\n};\n", "import { tokenize } from \"@tonaljs/chord\";\nimport { distance, interval, NoteLiteral, transpose } from \"@tonaljs/core\";\nimport { get as romanNumeral } from \"@tonaljs/roman-numeral\";\n\n/**\n * Given a tonic and a chord list expressed with roman numeral notation\n * returns the progression expressed with leadsheet chords symbols notation\n * @example\n * fromRomanNumerals(\"C\", [\"I\", \"IIm7\", \"V7\"]);\n * // => [\"C\", \"Dm7\", \"G7\"]\n */\nexport function fromRomanNumerals(\n tonic: NoteLiteral,\n chords: string[],\n): string[] {\n const romanNumerals = chords.map(romanNumeral);\n return romanNumerals.map(\n (rn) => transpose(tonic, interval(rn)) + rn.chordType,\n );\n}\n\n/**\n * Given a tonic and a chord list with leadsheet symbols notation,\n * return the chord list with roman numeral notation\n * @example\n * toRomanNumerals(\"C\", [\"CMaj7\", \"Dm7\", \"G7\"]);\n * // => [\"IMaj7\", \"IIm7\", \"V7\"]\n */\nexport function toRomanNumerals(\n tonic: NoteLiteral,\n chords: string[],\n): string[] {\n return chords.map((chord) => {\n const [note, chordType] = tokenize(chord);\n const intervalName = distance(tonic, note);\n const roman = romanNumeral(interval(intervalName));\n return roman.name + chordType;\n });\n}\n\nexport default { fromRomanNumerals, toRomanNumerals };\n", "import { compact, range } from \"@tonaljs/collection\";\nimport { midiToNoteName, toMidi, ToNoteNameOptions } from \"@tonaljs/midi\";\n\n/**\n * Create a numeric range. You supply a list of notes or numbers and it will\n * be connected to create complex ranges.\n *\n * @param {Array} notes - the list of notes or midi numbers used\n * @return {Array} an array of numbers or empty array if not valid parameters\n *\n * @example\n * numeric([\"C5\", \"C4\"]) // => [ 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60 ]\n * // it works midi notes\n * numeric([10, 5]) // => [ 10, 9, 8, 7, 6, 5 ]\n * // complex range\n * numeric([\"C4\", \"E4\", \"Bb3\"]) // => [60, 61, 62, 63, 64, 63, 62, 61, 60, 59, 58]\n */\nexport function numeric(notes: (string | number)[]): number[] {\n const midi: number[] = compact(\n notes.map((note) => (typeof note === \"number\" ? note : toMidi(note))),\n );\n if (!notes.length || midi.length !== notes.length) {\n // there is no valid notes\n return [];\n }\n\n return midi.reduce(\n (result, note) => {\n const last: number = result[result.length - 1];\n return result.concat(range(last, note).slice(1));\n },\n [midi[0]],\n );\n}\n\n/**\n * Create a range of chromatic notes. The altered notes will use flats.\n *\n * @function\n * @param {Array} notes - the list of notes or midi note numbers to create a range from\n * @param {Object} options - The same as `midiToNoteName` (`{ sharps: boolean, pitchClass: boolean }`)\n * @return {Array} an array of note names\n *\n * @example\n * Range.chromatic([\"C2, \"E2\", \"D2\"]) // => [\"C2\", \"Db2\", \"D2\", \"Eb2\", \"E2\", \"Eb2\", \"D2\"]\n * // with sharps\n * Range.chromatic([\"C2\", \"C3\"], { sharps: true }) // => [ \"C2\", \"C#2\", \"D2\", \"D#2\", \"E2\", \"F2\", \"F#2\", \"G2\", \"G#2\", \"A2\", \"A#2\", \"B2\", \"C3\" ]\n */\nexport function chromatic(\n notes: (string | number)[],\n options?: ToNoteNameOptions,\n): string[] {\n return numeric(notes).map((midi) => midiToNoteName(midi, options));\n}\n\nexport default { numeric, chromatic };\n", "/**\n * References:\n * - https://www.researchgate.net/publication/327567188_An_Algorithm_for_Spelling_the_Pitches_of_Any_Musical_Scale\n * @module scale\n */\nimport { all as chordTypes } from \"@tonaljs/chord-type\";\nimport { range as nums, rotate } from \"@tonaljs/collection\";\nimport {\n deprecate,\n note,\n NoteName,\n tonicIntervalsTransposer,\n transpose,\n} from \"@tonaljs/core\";\nimport { enharmonic, fromMidi, sortedUniqNames } from \"@tonaljs/note\";\nimport {\n chroma,\n isChroma,\n isSubsetOf,\n isSupersetOf,\n modes,\n} from \"@tonaljs/pcset\";\nimport {\n all,\n all as scaleTypes,\n get as getScaleType,\n names as scaleTypeNames,\n ScaleType,\n} from \"@tonaljs/scale-type\";\n\ntype ScaleName = string;\ntype ScaleNameTokens = [string, string]; // [TONIC, SCALE TYPE]\n\nexport interface Scale extends ScaleType {\n tonic: string | null;\n type: string;\n notes: NoteName[];\n}\n\nconst NoScale: Scale = {\n empty: true,\n name: \"\",\n type: \"\",\n tonic: null,\n setNum: NaN,\n chroma: \"\",\n normalized: \"\",\n aliases: [],\n notes: [],\n intervals: [],\n};\n\n/**\n * Given a string with a scale name and (optionally) a tonic, split\n * that components.\n *\n * It retuns an array with the form [ name, tonic ] where tonic can be a\n * note name or null and name can be any arbitrary string\n * (this function doesn\"t check if that scale name exists)\n *\n * @function\n * @param {string} name - the scale name\n * @return {Array} an array [tonic, name]\n * @example\n * tokenize(\"C mixolydean\") // => [\"C\", \"mixolydean\"]\n * tokenize(\"anything is valid\") // => [\"\", \"anything is valid\"]\n * tokenize() // => [\"\", \"\"]\n */\nexport function tokenize(name: ScaleName): ScaleNameTokens {\n if (typeof name !== \"string\") {\n return [\"\", \"\"];\n }\n const i = name.indexOf(\" \");\n const tonic = note(name.substring(0, i));\n if (tonic.empty) {\n const n = note(name);\n return n.empty ? [\"\", name] : [n.name, \"\"];\n }\n\n const type = name.substring(tonic.name.length + 1);\n return [tonic.name, type.length ? type : \"\"];\n}\n\n/**\n * Get all scale names\n * @function\n */\nexport const names = scaleTypeNames;\n\n/**\n * Get a Scale from a scale name.\n */\nexport function get(src: ScaleName | ScaleNameTokens): Scale {\n const tokens = Array.isArray(src) ? src : tokenize(src);\n const tonic = note(tokens[0]).name;\n const st = getScaleType(tokens[1]);\n if (st.empty) {\n return NoScale;\n }\n\n const type = st.name;\n const notes: string[] = tonic\n ? st.intervals.map((i) => transpose(tonic, i))\n : [];\n\n const name = tonic ? tonic + \" \" + type : type;\n\n return { ...st, name, type, tonic, notes };\n}\n\nexport const scale = deprecate(\"Scale.scale\", \"Scale.get\", get);\n\nexport function detect(\n notes: string[],\n options: { tonic?: string; match?: \"exact\" | \"fit\" } = {},\n): string[] {\n const notesChroma = chroma(notes);\n const tonic = note(options.tonic ?? notes[0] ?? \"\");\n const tonicChroma = tonic.chroma;\n if (tonicChroma === undefined) {\n return [];\n }\n\n const pitchClasses = notesChroma.split(\"\");\n pitchClasses[tonicChroma] = \"1\";\n const scaleChroma = rotate(tonicChroma, pitchClasses).join(\"\");\n const match = all().find((scaleType) => scaleType.chroma === scaleChroma);\n\n const results: string[] = [];\n if (match) {\n results.push(tonic.name + \" \" + match.name);\n }\n if (options.match === \"exact\") {\n return results;\n }\n\n extended(scaleChroma).forEach((scaleName) => {\n results.push(tonic.name + \" \" + scaleName);\n });\n\n return results;\n}\n\n/**\n * Get all chords that fits a given scale\n *\n * @function\n * @param {string} name - the scale name\n * @return {Array} - the chord names\n *\n * @example\n * scaleChords(\"pentatonic\") // => [\"5\", \"64\", \"M\", \"M6\", \"Madd9\", \"Msus2\"]\n */\nexport function scaleChords(name: string): string[] {\n const s = get(name);\n const inScale = isSubsetOf(s.chroma);\n return chordTypes()\n .filter((chord) => inScale(chord.chroma))\n .map((chord) => chord.aliases[0]);\n}\n/**\n * Get all scales names that are a superset of the given one\n * (has the same notes and at least one more)\n *\n * @function\n * @param {string} name\n * @return {Array} a list of scale names\n * @example\n * extended(\"major\") // => [\"bebop\", \"bebop dominant\", \"bebop major\", \"chromatic\", \"ichikosucho\"]\n */\nexport function extended(name: string): string[] {\n const chroma = isChroma(name) ? name : get(name).chroma;\n const isSuperset = isSupersetOf(chroma);\n return scaleTypes()\n .filter((scale) => isSuperset(scale.chroma))\n .map((scale) => scale.name);\n}\n\n/**\n * Find all scales names that are a subset of the given one\n * (has less notes but all from the given scale)\n *\n * @function\n * @param {string} name\n * @return {Array} a list of scale names\n *\n * @example\n * reduced(\"major\") // => [\"ionian pentatonic\", \"major pentatonic\", \"ritusen\"]\n */\nexport function reduced(name: string): string[] {\n const isSubset = isSubsetOf(get(name).chroma);\n return scaleTypes()\n .filter((scale) => isSubset(scale.chroma))\n .map((scale) => scale.name);\n}\n\n/**\n * Given an array of notes, return the scale: a pitch class set starting from\n * the first note of the array\n *\n * @function\n * @param {string[]} notes\n * @return {string[]} pitch classes with same tonic\n * @example\n * scaleNotes(['C4', 'c3', 'C5', 'C4', 'c4']) // => [\"C\"]\n * scaleNotes(['D4', 'c#5', 'A5', 'F#6']) // => [\"D\", \"F#\", \"A\", \"C#\"]\n */\nexport function scaleNotes(notes: NoteName[]) {\n const pcset: string[] = notes.map((n) => note(n).pc).filter((x) => x);\n const tonic = pcset[0];\n const scale = sortedUniqNames(pcset);\n return rotate(scale.indexOf(tonic), scale);\n}\n\ntype ScaleMode = [string, string];\n/**\n * Find mode names of a scale\n *\n * @function\n * @param {string} name - scale name\n * @example\n * modeNames(\"C pentatonic\") // => [\n * [\"C\", \"major pentatonic\"],\n * [\"D\", \"egyptian\"],\n * [\"E\", \"malkos raga\"],\n * [\"G\", \"ritusen\"],\n * [\"A\", \"minor pentatonic\"]\n * ]\n */\nexport function modeNames(name: string): ScaleMode[] {\n const s = get(name);\n if (s.empty) {\n return [];\n }\n\n const tonics = s.tonic ? s.notes : s.intervals;\n return modes(s.chroma)\n .map((chroma: string, i: number): ScaleMode => {\n const modeName = get(chroma).name;\n return modeName ? [tonics[i], modeName] : [\"\", \"\"];\n })\n .filter((x) => x[0]);\n}\n\nfunction getNoteNameOf(scale: string | string[]) {\n const names = Array.isArray(scale) ? scaleNotes(scale) : get(scale).notes;\n const chromas = names.map((name) => note(name).chroma);\n\n return (noteOrMidi: string | number): string | undefined => {\n const currNote =\n typeof noteOrMidi === \"number\"\n ? note(fromMidi(noteOrMidi))\n : note(noteOrMidi);\n const height = currNote.height;\n\n if (height === undefined) return undefined;\n const chroma = height % 12;\n const position = chromas.indexOf(chroma);\n if (position === -1) return undefined;\n return enharmonic(currNote.name, names[position]);\n };\n}\n\nexport function rangeOf(scale: string | string[]) {\n const getName = getNoteNameOf(scale);\n return (fromNote: string, toNote: string) => {\n const from = note(fromNote).height;\n const to = note(toNote).height;\n if (from === undefined || to === undefined) return [];\n\n return nums(from, to)\n .map(getName)\n .filter((x) => x);\n };\n}\n\n/**\n * Returns a function to get a note name from the scale degree.\n *\n * @example\n * [1, 2, 3].map(Scale.degrees(\"C major\")) => [\"C\", \"D\", \"E\"]\n * [1, 2, 3].map(Scale.degrees(\"C4 major\")) => [\"C4\", \"D4\", \"E4\"]\n */\nexport function degrees(scaleName: string | ScaleNameTokens) {\n const { intervals, tonic } = get(scaleName);\n const transpose = tonicIntervalsTransposer(intervals, tonic);\n return (degree: number) =>\n degree ? transpose(degree > 0 ? degree - 1 : degree) : \"\";\n}\n\n/**\n * Sames as `degree` but with 0-based index\n */\nexport function steps(scaleName: string | ScaleNameTokens) {\n const { intervals, tonic } = get(scaleName);\n return tonicIntervalsTransposer(intervals, tonic);\n}\n\nexport default {\n degrees,\n detect,\n extended,\n get,\n modeNames,\n names,\n rangeOf,\n reduced,\n scaleChords,\n scaleNotes,\n steps,\n tokenize,\n\n // deprecated\n scale,\n};\n", "// TYPES: PARSING\nexport type TimeSignatureLiteral = string | [number, number] | [string, string];\ntype ParsedTimeSignature = [number | number[], number];\n\n// TYPES: PROPERTIES\nexport type ValidTimeSignature = {\n readonly empty: false;\n readonly name: string;\n readonly upper: number | number[];\n readonly lower: number;\n readonly type: \"simple\" | \"compound\" | \"irregular\" | \"irrational\";\n readonly additive: number[];\n};\n\nexport type InvalidTimeSignature = {\n readonly empty: true;\n readonly name: \"\";\n readonly upper: undefined;\n readonly lower: undefined;\n readonly type: undefined;\n readonly additive: [];\n};\n\nexport type TimeSignature = ValidTimeSignature | InvalidTimeSignature;\n\n// CONSTANTS\nconst NONE: InvalidTimeSignature = {\n empty: true,\n name: \"\",\n upper: undefined,\n lower: undefined,\n type: undefined,\n additive: [],\n};\n\nconst NAMES = [\"4/4\", \"3/4\", \"2/4\", \"2/2\", \"12/8\", \"9/8\", \"6/8\", \"3/8\"];\n\n// PUBLIC API\n\nexport function names() {\n return NAMES.slice();\n}\n\nconst REGEX = /^(\\d*\\d(?:\\+\\d)*)\\/(\\d+)$/;\nconst CACHE = new Map();\n\nexport function get(literal: TimeSignatureLiteral): TimeSignature {\n const stringifiedLiteral = JSON.stringify(literal);\n const cached = CACHE.get(stringifiedLiteral);\n if (cached) {\n return cached;\n }\n\n const ts = build(parse(literal));\n CACHE.set(stringifiedLiteral, ts);\n return ts;\n}\n\nexport function parse(literal: TimeSignatureLiteral): ParsedTimeSignature {\n if (typeof literal === \"string\") {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, up, low] = REGEX.exec(literal) || [];\n return parse([up, low]);\n }\n\n const [up, down] = literal;\n const denominator = +down;\n if (typeof up === \"number\") {\n return [up, denominator];\n }\n\n const list = up.split(\"+\").map((n) => +n);\n return list.length === 1 ? [list[0], denominator] : [list, denominator];\n}\n\nexport default { names, parse, get };\n\n// PRIVATE\n\nconst isPowerOfTwo = (x: number) => (Math.log(x) / Math.log(2)) % 1 === 0;\n\nfunction build([up, down]: ParsedTimeSignature): TimeSignature {\n const upper = Array.isArray(up) ? up.reduce((a, b) => a + b, 0) : up;\n const lower = down;\n if (upper === 0 || lower === 0) {\n return NONE;\n }\n\n const name = Array.isArray(up) ? `${up.join(\"+\")}/${down}` : `${up}/${down}`;\n const additive = Array.isArray(up) ? up : [];\n const type =\n lower === 4 || lower === 2\n ? \"simple\"\n : lower === 8 && upper % 3 === 0\n ? \"compound\"\n : isPowerOfTwo(lower)\n ? \"irregular\"\n : \"irrational\";\n\n return {\n empty: false,\n name,\n type,\n upper,\n lower,\n additive,\n };\n}\n", "import Note from \"@tonaljs/note\";\n\n// A function that decides which of a set of voicings is picked as a follow up to lastVoicing.\nexport declare type VoiceLeadingFunction = (\n voicings: string[][],\n lastVoicing: string[],\n) => string[];\n\nexport const topNoteDiff: VoiceLeadingFunction = (voicings, lastVoicing) => {\n if (!lastVoicing || !lastVoicing.length) {\n return voicings[0];\n }\n const topNoteMidi = (voicing: string[]) =>\n Note.midi(voicing[voicing.length - 1]) || 0;\n const diff = (voicing: string[]) =>\n Math.abs(topNoteMidi(lastVoicing) - topNoteMidi(voicing));\n return voicings.sort((a, b) => diff(a) - diff(b))[0];\n};\n\nexport default {\n topNoteDiff,\n};\n", "import Chord from \"@tonaljs/chord\";\nimport { lefthand, VoicingDictionary, triads, all } from \"./data\";\n\nconst defaultDictionary: VoicingDictionary = lefthand;\n\nfunction lookup(\n symbol: string,\n dictionary = defaultDictionary,\n): string[] | undefined {\n if (dictionary[symbol]) {\n return dictionary[symbol];\n }\n const { aliases } = Chord.get(\"C\" + symbol);\n // TODO: find other way to get aliases of symbol\n const match =\n Object.keys(dictionary).find((_symbol) => aliases.includes(_symbol)) || \"\";\n if (match !== undefined) {\n return dictionary[match];\n }\n return undefined;\n}\n\nexport default {\n lookup,\n lefthand,\n triads,\n all,\n defaultDictionary,\n};\n", "export type VoicingDictionary = { [symbol: string]: string[] };\n\nexport const triads: VoicingDictionary = {\n M: [\"1P 3M 5P\", \"3M 5P 8P\", \"5P 8P 10M\"],\n m: [\"1P 3m 5P\", \"3m 5P 8P\", \"5P 8P 10m\"],\n o: [\"1P 3m 5d\", \"3m 5d 8P\", \"5d 8P 10m\"],\n aug: [\"1P 3m 5A\", \"3m 5A 8P\", \"5A 8P 10m\"],\n};\nexport const lefthand: VoicingDictionary = {\n m7: [\"3m 5P 7m 9M\", \"7m 9M 10m 12P\"],\n \"7\": [\"3M 6M 7m 9M\", \"7m 9M 10M 13M\"],\n \"^7\": [\"3M 5P 7M 9M\", \"7M 9M 10M 12P\"],\n \"69\": [\"3M 5P 6A 9M\"],\n m7b5: [\"3m 5d 7m 8P\", \"7m 8P 10m 12d\"],\n \"7b9\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n \"7b13\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n o7: [\"1P 3m 5d 6M\", \"5d 6M 8P 10m\"],\n \"7#11\": [\"7m 9M 11A 13A\"],\n \"7#9\": [\"3M 7m 9A\"],\n mM7: [\"3m 5P 7M 9M\", \"7M 9M 10m 12P\"],\n m6: [\"3m 5P 6M 9M\", \"6M 9M 10m 12P\"],\n};\nexport const all: VoicingDictionary = {\n M: [\"1P 3M 5P\", \"3M 5P 8P\", \"5P 8P 10M\"],\n m: [\"1P 3m 5P\", \"3m 5P 8P\", \"5P 8P 10m\"],\n o: [\"1P 3m 5d\", \"3m 5d 8P\", \"5d 8P 10m\"],\n aug: [\"1P 3m 5A\", \"3m 5A 8P\", \"5A 8P 10m\"],\n m7: [\"3m 5P 7m 9M\", \"7m 9M 10m 12P\"],\n \"7\": [\"3M 6M 7m 9M\", \"7m 9M 10M 13M\"],\n \"^7\": [\"3M 5P 7M 9M\", \"7M 9M 10M 12P\"],\n \"69\": [\"3M 5P 6A 9M\"],\n m7b5: [\"3m 5d 7m 8P\", \"7m 8P 10m 12d\"],\n \"7b9\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n \"7b13\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n o7: [\"1P 3m 5d 6M\", \"5d 6M 8P 10m\"],\n \"7#11\": [\"7m 9M 11A 13A\"],\n \"7#9\": [\"3M 7m 9A\"],\n mM7: [\"3m 5P 7M 9M\", \"7M 9M 10m 12P\"],\n m6: [\"3m 5P 6M 9M\", \"6M 9M 10m 12P\"],\n};\n", "import Chord from \"@tonaljs/chord\";\nimport Note from \"@tonaljs/note\";\nimport Range from \"@tonaljs/range\";\nimport Interval from \"@tonaljs/interval\";\nimport VoicingDictionary from \"@tonaljs/voicing-dictionary\";\nimport VoiceLeading from \"@tonaljs/voice-leading\";\n\nconst defaultRange = [\"C3\", \"C5\"];\nconst defaultDictionary = VoicingDictionary.all;\nconst defaultVoiceLeading = VoiceLeading.topNoteDiff;\n\nfunction get(\n chord: string,\n range: string[] = defaultRange,\n dictionary = defaultDictionary,\n voiceLeading = defaultVoiceLeading,\n lastVoicing?: string[],\n) {\n const voicings = search(chord, range, dictionary);\n if (!lastVoicing || !lastVoicing.length) {\n // notes = voicings[Math.ceil(voicings.length / 2)]; // pick middle voicing..\n return voicings[0]; // pick lowest voicing..\n } else {\n // calculates the distance between the last note and the given voicings top note\n // sort voicings with differ\n return voiceLeading(voicings, lastVoicing);\n }\n}\n\nfunction search(\n chord: string,\n range = defaultRange,\n dictionary = VoicingDictionary.triads,\n): string[][] {\n const [tonic, symbol] = Chord.tokenize(chord);\n const sets = VoicingDictionary.lookup(symbol, dictionary);\n // find equivalent symbol that is used as a key in dictionary:\n if (!sets) {\n return [];\n }\n // resolve array of interval arrays for the wanted symbol\n const voicings = sets.map((intervals) => intervals.split(\" \"));\n const notesInRange = Range.chromatic(range); // gives array of notes inside range\n return voicings.reduce((voiced: string[][], voicing: string[]) => {\n // transpose intervals relative to first interval (e.g. 3m 5P > 1P 3M)\n const relativeIntervals = voicing.map(\n (interval) => Interval.substract(interval, voicing[0]) || \"\",\n );\n // get enharmonic correct pitch class the bottom note\n const bottomPitchClass = Note.transpose(tonic, voicing[0]);\n // get all possible start notes for voicing\n const starts = notesInRange\n // only get the start notes:\n .filter((note) => Note.chroma(note) === Note.chroma(bottomPitchClass))\n // filter out start notes that will overshoot the top end of the range\n .filter(\n (note) =>\n (Note.midi(\n Note.transpose(\n note,\n relativeIntervals[relativeIntervals.length - 1],\n ),\n ) || 0) <= (Note.midi(range[1]) || 0),\n )\n // replace Range.chromatic notes with the correct enharmonic equivalents\n .map((note) => Note.enharmonic(note, bottomPitchClass));\n // render one voicing for each start note\n const notes = starts.map((start) =>\n relativeIntervals.map((interval) => Note.transpose(start, interval)),\n );\n return voiced.concat(notes);\n }, []);\n}\n\nfunction sequence(\n chords: string[],\n range = defaultRange,\n dictionary = defaultDictionary,\n voiceLeading = defaultVoiceLeading,\n lastVoicing?: string[],\n) {\n const { voicings } = chords.reduce<{\n voicings: string[][];\n lastVoicing: string[] | undefined;\n }>(\n ({ voicings, lastVoicing }, chord) => {\n const voicing = get(chord, range, dictionary, voiceLeading, lastVoicing);\n lastVoicing = voicing;\n voicings.push(voicing);\n return { voicings, lastVoicing };\n },\n { voicings: [], lastVoicing },\n );\n return voicings;\n}\n\nexport default {\n get,\n search,\n sequence,\n};\n"], - "mappings": "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", + "sourcesContent": ["import AbcNotation from \"@tonaljs/abc-notation\";\nimport * as Array from \"@tonaljs/array\";\nimport Chord from \"@tonaljs/chord\";\nimport ChordType from \"@tonaljs/chord-type\";\nimport Collection from \"@tonaljs/collection\";\nimport * as Core from \"@tonaljs/core\";\nimport DurationValue from \"@tonaljs/duration-value\";\nimport Interval from \"@tonaljs/interval\";\nimport Key from \"@tonaljs/key\";\nimport Midi from \"@tonaljs/midi\";\nimport Mode from \"@tonaljs/mode\";\nimport Note from \"@tonaljs/note\";\nimport Pcset from \"@tonaljs/pcset\";\nimport Progression from \"@tonaljs/progression\";\nimport Range from \"@tonaljs/range\";\nimport RomanNumeral from \"@tonaljs/roman-numeral\";\nimport Scale from \"@tonaljs/scale\";\nimport ScaleType from \"@tonaljs/scale-type\";\nimport TimeSignature from \"@tonaljs/time-signature\";\nimport VoiceLeading from \"@tonaljs/voice-leading\";\nimport Voicing from \"@tonaljs/voicing\";\nimport VoicingDictionary from \"@tonaljs/voicing-dictionary\";\n\nexport * from \"@tonaljs/core\";\n\n// deprecated (backwards compatibility)\nconst Tonal = Core;\nconst PcSet = Pcset;\nconst ChordDictionary = ChordType;\nconst ScaleDictionary = ScaleType;\n\nexport {\n AbcNotation,\n Array,\n Chord,\n ChordDictionary,\n ChordType,\n Collection,\n Core,\n DurationValue,\n Interval,\n Key,\n Midi,\n Mode,\n Note,\n PcSet,\n Pcset,\n Progression,\n Range,\n RomanNumeral,\n Scale,\n ScaleDictionary,\n ScaleType,\n TimeSignature,\n Tonal,\n VoiceLeading,\n Voicing,\n VoicingDictionary,\n};\n", "export interface NamedPitch {\n readonly name: string;\n}\n\n/*** @deprecated use NamedPitch */\nexport interface Named {\n readonly name: string;\n}\n\nexport interface NotFound extends NamedPitch {\n readonly empty: true;\n readonly name: \"\";\n}\n\nexport function isNamedPitch(src: unknown): src is NamedPitch {\n return src !== null &&\n typeof src === \"object\" &&\n \"name\" in src &&\n typeof src.name === \"string\"\n ? true\n : false;\n}\n\ntype Fifths = number;\ntype Octaves = number;\nexport type Direction = 1 | -1;\n\nexport type PitchClassCoordinates = [Fifths];\nexport type NoteCoordinates = [Fifths, Octaves];\nexport type IntervalCoordinates = [Fifths, Octaves, Direction];\nexport type PitchCoordinates =\n | PitchClassCoordinates\n | NoteCoordinates\n | IntervalCoordinates;\n\n/**\n * Pitch properties\n *\n * - {number} step - The step number: 0 = C, 1 = D, ... 6 = B\n * - {number} alt - Number of alterations: -2 = 'bb', -1 = 'b', 0 = '', 1 = '#', ...\n * - {number} [oct] = The octave (undefined when is a coord class)\n * - {number} [dir] = Interval direction (undefined when is not an interval)\n */\nexport interface Pitch {\n readonly step: number;\n readonly alt: number;\n readonly oct?: number; // undefined for pitch classes\n readonly dir?: Direction; // undefined for notes\n}\n\nconst SIZES = [0, 2, 4, 5, 7, 9, 11];\nexport const chroma = ({ step, alt }: Pitch) => (SIZES[step] + alt + 120) % 12;\n\nexport const height = ({ step, alt, oct, dir = 1 }: Pitch) =>\n dir * (SIZES[step] + alt + 12 * (oct === undefined ? -100 : oct));\n\nexport const midi = (pitch: Pitch) => {\n const h = height(pitch);\n return pitch.oct !== undefined && h >= -12 && h <= 115 ? h + 12 : null;\n};\n\nexport function isPitch(pitch: unknown): pitch is Pitch {\n return pitch !== null &&\n typeof pitch === \"object\" &&\n \"step\" in pitch &&\n typeof pitch.step === \"number\" &&\n \"alt\" in pitch &&\n typeof pitch.alt === \"number\"\n ? true\n : false;\n}\n\n// The number of fifths of [C, D, E, F, G, A, B]\nconst FIFTHS = [0, 2, 4, -1, 1, 3, 5];\n// The number of octaves it span each step\nconst STEPS_TO_OCTS = FIFTHS.map((fifths: number) =>\n Math.floor((fifths * 7) / 12),\n);\n\n/**\n * Get coordinates from pitch object\n */\nexport function coordinates(pitch: Pitch): PitchCoordinates {\n const { step, alt, oct, dir = 1 } = pitch;\n const f = FIFTHS[step] + 7 * alt;\n if (oct === undefined) {\n return [dir * f];\n }\n const o = oct - STEPS_TO_OCTS[step] - 4 * alt;\n return [dir * f, dir * o];\n}\n\n// We need to get the steps from fifths\n// Fifths for CDEFGAB are [ 0, 2, 4, -1, 1, 3, 5 ]\n// We add 1 to fifths to avoid negative numbers, so:\n// for [\"F\", \"C\", \"G\", \"D\", \"A\", \"E\", \"B\"] we have:\nconst FIFTHS_TO_STEPS = [3, 0, 4, 1, 5, 2, 6];\n\n/**\n * Get pitch from coordinate objects\n */\nexport function pitch(coord: PitchCoordinates): Pitch {\n const [f, o, dir] = coord;\n const step = FIFTHS_TO_STEPS[unaltered(f)];\n const alt = Math.floor((f + 1) / 7);\n if (o === undefined) {\n return { step, alt, dir };\n }\n const oct = o + 4 * alt + STEPS_TO_OCTS[step];\n return { step, alt, oct, dir };\n}\n\n// Return the number of fifths as if it were unaltered\nfunction unaltered(f: number): number {\n const i = (f + 1) % 7;\n return i < 0 ? 7 + i : i;\n}\n", "import {\n coordinates,\n Direction,\n IntervalCoordinates,\n isNamedPitch,\n isPitch,\n NamedPitch,\n Pitch,\n pitch,\n PitchCoordinates,\n} from \"@tonaljs/pitch\";\n\nconst fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport type IntervalName = string;\nexport type IntervalLiteral = IntervalName | Pitch | NamedPitch;\n\ntype Quality =\n | \"dddd\"\n | \"ddd\"\n | \"dd\"\n | \"d\"\n | \"m\"\n | \"M\"\n | \"P\"\n | \"A\"\n | \"AA\"\n | \"AAA\"\n | \"AAAA\";\ntype Type = \"perfectable\" | \"majorable\";\n\nexport interface Interval extends Pitch, NamedPitch {\n readonly empty: boolean;\n readonly name: IntervalName;\n readonly num: number;\n readonly q: Quality;\n readonly type: Type;\n readonly step: number;\n readonly alt: number;\n readonly dir: Direction;\n readonly simple: number;\n readonly semitones: number;\n readonly chroma: number;\n readonly coord: IntervalCoordinates;\n readonly oct: number;\n}\n\nexport interface NoInterval extends Partial {\n readonly empty: true;\n readonly name: \"\";\n readonly acc: \"\";\n}\n\nconst NoInterval: NoInterval = { empty: true, name: \"\", acc: \"\" };\n\n// shorthand tonal notation (with quality after number)\nconst INTERVAL_TONAL_REGEX = \"([-+]?\\\\d+)(d{1,4}|m|M|P|A{1,4})\";\n// standard shorthand notation (with quality before number)\nconst INTERVAL_SHORTHAND_REGEX = \"(AA|A|P|M|m|d|dd)([-+]?\\\\d+)\";\nconst REGEX = new RegExp(\n \"^\" + INTERVAL_TONAL_REGEX + \"|\" + INTERVAL_SHORTHAND_REGEX + \"$\",\n);\n\ntype IntervalTokens = [string, string];\n\n/**\n * @private\n */\nexport function tokenizeInterval(str?: IntervalName): IntervalTokens {\n const m = REGEX.exec(`${str}`);\n if (m === null) {\n return [\"\", \"\"];\n }\n return m[1] ? [m[1], m[2]] : [m[4], m[3]];\n}\n\nconst cache: { [key in string]: Interval | NoInterval } = {};\n\n/**\n * Get interval properties. It returns an object with:\n *\n * - name: the interval name\n * - num: the interval number\n * - type: 'perfectable' or 'majorable'\n * - q: the interval quality (d, m, M, A)\n * - dir: interval direction (1 ascending, -1 descending)\n * - simple: the simplified number\n * - semitones: the size in semitones\n * - chroma: the interval chroma\n *\n * @param {string} interval - the interval name\n * @return {Object} the interval properties\n *\n * @example\n * import { interval } from '@tonaljs/core'\n * interval('P5').semitones // => 7\n * interval('m3').type // => 'majorable'\n */\nexport function interval(src: IntervalLiteral): Interval | NoInterval {\n return typeof src === \"string\"\n ? cache[src] || (cache[src] = parse(src))\n : isPitch(src)\n ? interval(pitchName(src))\n : isNamedPitch(src)\n ? interval(src.name)\n : NoInterval;\n}\n\nconst SIZES = [0, 2, 4, 5, 7, 9, 11];\nconst TYPES = \"PMMPPMM\";\nfunction parse(str?: string): Interval | NoInterval {\n const tokens = tokenizeInterval(str);\n if (tokens[0] === \"\") {\n return NoInterval;\n }\n const num = +tokens[0];\n const q = tokens[1] as Quality;\n const step = (Math.abs(num) - 1) % 7;\n const t = TYPES[step];\n if (t === \"M\" && q === \"P\") {\n return NoInterval;\n }\n const type = t === \"M\" ? \"majorable\" : \"perfectable\";\n\n const name = \"\" + num + q;\n const dir = num < 0 ? -1 : 1;\n const simple = num === 8 || num === -8 ? num : dir * (step + 1);\n const alt = qToAlt(type, q);\n const oct = Math.floor((Math.abs(num) - 1) / 7);\n const semitones = dir * (SIZES[step] + alt + 12 * oct);\n const chroma = (((dir * (SIZES[step] + alt)) % 12) + 12) % 12;\n const coord = coordinates({ step, alt, oct, dir }) as IntervalCoordinates;\n return {\n empty: false,\n name,\n num,\n q,\n step,\n alt,\n dir,\n type,\n simple,\n semitones,\n chroma,\n coord,\n oct,\n };\n}\n\n/**\n * @private\n *\n * forceDescending is used in the case of unison (#243)\n */\nexport function coordToInterval(\n coord: PitchCoordinates,\n forceDescending?: boolean,\n): Interval {\n const [f, o = 0] = coord;\n const isDescending = f * 7 + o * 12 < 0;\n const ivl: IntervalCoordinates =\n forceDescending || isDescending ? [-f, -o, -1] : [f, o, 1];\n return interval(pitch(ivl)) as Interval;\n}\n\nfunction qToAlt(type: Type, q: string): number {\n return (q === \"M\" && type === \"majorable\") ||\n (q === \"P\" && type === \"perfectable\")\n ? 0\n : q === \"m\" && type === \"majorable\"\n ? -1\n : /^A+$/.test(q)\n ? q.length\n : /^d+$/.test(q)\n ? -1 * (type === \"perfectable\" ? q.length : q.length + 1)\n : 0;\n}\n\n// return the interval name of a pitch\nfunction pitchName(props: Pitch): string {\n const { step, alt, oct = 0, dir } = props;\n if (!dir) {\n return \"\";\n }\n const calcNum = step + 1 + 7 * oct;\n // this is an edge case: descending pitch class unison (see #243)\n const num = calcNum === 0 ? step + 1 : calcNum;\n const d = dir < 0 ? \"-\" : \"\";\n const type = TYPES[step] === \"M\" ? \"majorable\" : \"perfectable\";\n const name = d + num + altToQ(type, alt);\n return name;\n}\n\nfunction altToQ(type: Type, alt: number): Quality {\n if (alt === 0) {\n return type === \"majorable\" ? \"M\" : \"P\";\n } else if (alt === -1 && type === \"majorable\") {\n return \"m\";\n } else if (alt > 0) {\n return fillStr(\"A\", alt) as Quality;\n } else {\n return fillStr(\"d\", type === \"perfectable\" ? alt : alt + 1) as Quality;\n }\n}\n", "import {\n coordinates,\n isNamedPitch,\n isPitch,\n NamedPitch,\n Pitch,\n pitch,\n PitchCoordinates,\n} from \"@tonaljs/pitch\";\n\nconst fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport type NoteWithOctave = string;\nexport type PcName = string;\nexport type NoteName = NoteWithOctave | PcName;\nexport type NoteLiteral = NoteName | Pitch | NamedPitch;\n\nexport interface Note extends Pitch, NamedPitch {\n readonly empty: boolean;\n readonly name: NoteName;\n readonly letter: string;\n readonly acc: string;\n readonly pc: PcName;\n readonly chroma: number;\n readonly height: number;\n readonly coord: PitchCoordinates;\n readonly midi: number | null;\n readonly freq: number | null;\n}\n\nexport interface NoNote extends Partial {\n empty: true;\n name: \"\";\n pc: \"\";\n acc: \"\";\n}\nconst NoNote: NoNote = { empty: true, name: \"\", pc: \"\", acc: \"\" };\n\nconst cache: Map = new Map();\n\nexport const stepToLetter = (step: number) => \"CDEFGAB\".charAt(step);\nexport const altToAcc = (alt: number): string =>\n alt < 0 ? fillStr(\"b\", -alt) : fillStr(\"#\", alt);\nexport const accToAlt = (acc: string): number =>\n acc[0] === \"b\" ? -acc.length : acc.length;\n\n/**\n * Given a note literal (a note name or a note object), returns the Note object\n * @example\n * note('Bb4') // => { name: \"Bb4\", midi: 70, chroma: 10, ... }\n */\nexport function note(src: NoteLiteral): Note | NoNote {\n const stringSrc = JSON.stringify(src);\n\n const cached = cache.get(stringSrc);\n if (cached) {\n return cached;\n }\n\n const value =\n typeof src === \"string\"\n ? parse(src)\n : isPitch(src)\n ? note(pitchName(src))\n : isNamedPitch(src)\n ? note(src.name)\n : NoNote;\n cache.set(stringSrc, value);\n return value;\n}\n\ntype NoteTokens = [string, string, string, string];\n\nconst REGEX = /^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\\d*)\\s*(.*)$/;\n\n/**\n * @private\n */\nexport function tokenizeNote(str: string): NoteTokens {\n const m = REGEX.exec(str) as string[];\n return [m[1].toUpperCase(), m[2].replace(/x/g, \"##\"), m[3], m[4]];\n}\n\n/**\n * @private\n */\nexport function coordToNote(noteCoord: PitchCoordinates): Note {\n return note(pitch(noteCoord)) as Note;\n}\n\nconst mod = (n: number, m: number) => ((n % m) + m) % m;\n\nconst SEMI = [0, 2, 4, 5, 7, 9, 11];\nfunction parse(noteName: NoteName): Note | NoNote {\n const tokens = tokenizeNote(noteName);\n if (tokens[0] === \"\" || tokens[3] !== \"\") {\n return NoNote;\n }\n\n const letter = tokens[0];\n const acc = tokens[1];\n const octStr = tokens[2];\n\n const step = (letter.charCodeAt(0) + 3) % 7;\n const alt = accToAlt(acc);\n const oct = octStr.length ? +octStr : undefined;\n const coord = coordinates({ step, alt, oct });\n\n const name = letter + acc + octStr;\n const pc = letter + acc;\n const chroma = (SEMI[step] + alt + 120) % 12;\n const height =\n oct === undefined\n ? mod(SEMI[step] + alt, 12) - 12 * 99\n : SEMI[step] + alt + 12 * (oct + 1);\n const midi = height >= 0 && height <= 127 ? height : null;\n const freq = oct === undefined ? null : Math.pow(2, (height - 69) / 12) * 440;\n\n return {\n empty: false,\n acc,\n alt,\n chroma,\n coord,\n freq,\n height,\n letter,\n midi,\n name,\n oct,\n pc,\n step,\n };\n}\n\nfunction pitchName(props: Pitch): NoteName {\n const { step, alt, oct } = props;\n const letter = stepToLetter(step);\n if (!letter) {\n return \"\";\n }\n\n const pc = letter + altToAcc(alt);\n return oct || oct === 0 ? pc + oct : pc;\n}\n", "import { PitchCoordinates } from \"@tonaljs/pitch\";\nimport {\n IntervalLiteral,\n IntervalName,\n interval as asInterval,\n coordToInterval,\n} from \"@tonaljs/pitch-interval\";\nimport {\n NoteLiteral,\n NoteName,\n note as asNote,\n coordToNote,\n} from \"@tonaljs/pitch-note\";\n\n/**\n * Transpose a note by an interval.\n *\n * @param {string} note - the note or note name\n * @param {string} interval - the interval or interval name\n * @return {string} the transposed note name or empty string if not valid notes\n * @example\n * import { transpose } from \"@tonaljs/core\"\n * transpose(\"d3\", \"3M\") // => \"F#3\"\n * transpose(\"D\", \"3M\") // => \"F#\"\n * [\"C\", \"D\", \"E\", \"F\", \"G\"].map(pc => transpose(pc, \"M3)) // => [\"E\", \"F#\", \"G#\", \"A\", \"B\"]\n */\nexport function transpose(\n noteName: NoteLiteral,\n intervalName: IntervalLiteral | [number, number],\n): NoteName {\n const note = asNote(noteName);\n const intervalCoord = Array.isArray(intervalName)\n ? intervalName\n : asInterval(intervalName).coord;\n if (note.empty || !intervalCoord || intervalCoord.length < 2) {\n return \"\";\n }\n const noteCoord = note.coord;\n const tr: PitchCoordinates =\n noteCoord.length === 1\n ? [noteCoord[0] + intervalCoord[0]]\n : [noteCoord[0] + intervalCoord[0], noteCoord[1] + intervalCoord[1]];\n return coordToNote(tr).name;\n}\n\n// Private\nexport function tonicIntervalsTransposer(\n intervals: string[],\n tonic: string | undefined | null,\n) {\n const len = intervals.length;\n return (normalized: number) => {\n if (!tonic) return \"\";\n const index =\n normalized < 0 ? (len - (-normalized % len)) % len : normalized % len;\n const octaves = Math.floor(normalized / len);\n const root = transpose(tonic, [0, octaves]);\n return transpose(root, intervals[index]);\n };\n}\n\n/**\n * Find the interval distance between two notes or coord classes.\n *\n * To find distance between coord classes, both notes must be coord classes and\n * the interval is always ascending\n *\n * @param {Note|string} from - the note or note name to calculate distance from\n * @param {Note|string} to - the note or note name to calculate distance to\n * @return {string} the interval name or empty string if not valid notes\n *\n */\nexport function distance(\n fromNote: NoteLiteral,\n toNote: NoteLiteral,\n): IntervalName {\n const from = asNote(fromNote);\n const to = asNote(toNote);\n if (from.empty || to.empty) {\n return \"\";\n }\n\n const fcoord = from.coord;\n const tcoord = to.coord;\n const fifths = tcoord[0] - fcoord[0];\n const octs =\n fcoord.length === 2 && tcoord.length === 2\n ? tcoord[1] - fcoord[1]\n : -Math.floor((fifths * 7) / 12);\n\n // If it's unison and not pitch class, it can be descending interval (#243)\n const forceDescending =\n to.height === from.height &&\n to.midi !== null &&\n from.midi !== null &&\n from.step > to.step;\n return coordToInterval([fifths, octs], forceDescending).name;\n}\n", "import { isNamedPitch } from \"@tonaljs/pitch\";\n\nexport * from \"@tonaljs/pitch\";\nexport * from \"@tonaljs/pitch-distance\";\nexport * from \"@tonaljs/pitch-interval\";\nexport * from \"@tonaljs/pitch-note\";\n\nexport const fillStr = (s: string, n: number) => Array(Math.abs(n) + 1).join(s);\n\nexport function deprecate<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ResultFn extends (this: any, ...newArgs: any[]) => ReturnType,\n>(original: string, alternative: string, fn: ResultFn) {\n return function (this: unknown, ...args: unknown[]): ReturnType {\n // tslint:disable-next-line\n console.warn(`${original} is deprecated. Use ${alternative}.`);\n return fn.apply(this, args);\n };\n}\n\nexport const isNamed = deprecate(\"isNamed\", \"isNamedPitch\", isNamedPitch);\n", "import { distance as dist, note, transpose as tr } from \"@tonaljs/core\";\n\nconst fillStr = (character: string, times: number) =>\n Array(times + 1).join(character);\n\nconst REGEX = /^(_{1,}|=|\\^{1,}|)([abcdefgABCDEFG])([,']*)$/;\n\ntype AbcTokens = [string, string, string];\n\nexport function tokenize(str: string): AbcTokens {\n const m = REGEX.exec(str);\n if (!m) {\n return [\"\", \"\", \"\"];\n }\n return [m[1], m[2], m[3]];\n}\n\n/**\n * Convert a (string) note in ABC notation into a (string) note in scientific notation\n *\n * @example\n * abcToScientificNotation(\"c\") // => \"C5\"\n */\nexport function abcToScientificNotation(str: string): string {\n const [acc, letter, oct] = tokenize(str);\n if (letter === \"\") {\n return \"\";\n }\n let o = 4;\n for (let i = 0; i < oct.length; i++) {\n o += oct.charAt(i) === \",\" ? -1 : 1;\n }\n const a =\n acc[0] === \"_\"\n ? acc.replace(/_/g, \"b\")\n : acc[0] === \"^\"\n ? acc.replace(/\\^/g, \"#\")\n : \"\";\n return letter.charCodeAt(0) > 96\n ? letter.toUpperCase() + a + (o + 1)\n : letter + a + o;\n}\n\n/**\n * Convert a (string) note in scientific notation into a (string) note in ABC notation\n *\n * @example\n * scientificToAbcNotation(\"C#4\") // => \"^C\"\n */\nexport function scientificToAbcNotation(str: string): string {\n const n = note(str);\n if (n.empty || (!n.oct && n.oct !== 0)) {\n return \"\";\n }\n const { letter, acc, oct } = n;\n const a = acc[0] === \"b\" ? acc.replace(/b/g, \"_\") : acc.replace(/#/g, \"^\");\n const l = oct > 4 ? letter.toLowerCase() : letter;\n const o =\n oct === 5 ? \"\" : oct > 4 ? fillStr(\"'\", oct - 5) : fillStr(\",\", 4 - oct);\n return a + l + o;\n}\n\nexport function transpose(note: string, interval: string): string {\n return scientificToAbcNotation(tr(abcToScientificNotation(note), interval));\n}\n\nexport function distance(from: string, to: string): string {\n return dist(abcToScientificNotation(from), abcToScientificNotation(to));\n}\n\nexport default {\n abcToScientificNotation,\n scientificToAbcNotation,\n tokenize,\n transpose,\n distance,\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { note, Note } from \"@tonaljs/core\";\n\n// ascending range\nfunction ascR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = n + b);\n return a;\n}\n// descending range\nfunction descR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = b - n);\n return a;\n}\n\n/**\n * Creates a numeric range\n *\n * @param {number} from\n * @param {number} to\n * @return {Array}\n *\n * @example\n * range(-2, 2) // => [-2, -1, 0, 1, 2]\n * range(2, -2) // => [2, 1, 0, -1, -2]\n */\nexport function range(from: number, to: number): number[] {\n return from < to ? ascR(from, to - from + 1) : descR(from, from - to + 1);\n}\n\n/**\n * Rotates a list a number of times. It\"s completly agnostic about the\n * contents of the list.\n *\n * @param {Integer} times - the number of rotations\n * @param {Array} array\n * @return {Array} the rotated array\n *\n * @example\n * rotate(1, [1, 2, 3]) // => [2, 3, 1]\n */\nexport function rotate(times: number, arr: T[]): T[] {\n const len = arr.length;\n const n = ((times % len) + len) % len;\n return arr.slice(n, len).concat(arr.slice(0, n));\n}\n\n/**\n * Return a copy of the array with the null values removed\n * @function\n * @param {Array} array\n * @return {Array}\n *\n * @example\n * compact([\"a\", \"b\", null, \"c\"]) // => [\"a\", \"b\", \"c\"]\n */\nexport function compact(arr: any[]): any[] {\n return arr.filter((n) => n === 0 || n);\n}\n\n/**\n * Sort an array of notes in ascending order. Pitch classes are listed\n * before notes. Any string that is not a note is removed.\n *\n * @param {string[]} notes\n * @return {string[]} sorted array of notes\n *\n * @example\n * sortedNoteNames(['c2', 'c5', 'c1', 'c0', 'c6', 'c'])\n * // => ['C', 'C0', 'C1', 'C2', 'C5', 'C6']\n * sortedNoteNames(['c', 'F', 'G', 'a', 'b', 'h', 'J'])\n * // => ['C', 'F', 'G', 'A', 'B']\n */\nexport function sortedNoteNames(notes: string[]): string[] {\n const valid = notes.map((n) => note(n)).filter((n) => !n.empty) as Note[];\n return valid.sort((a, b) => a.height - b.height).map((n) => n.name);\n}\n\n/**\n * Get sorted notes with duplicates removed. Pitch classes are listed\n * before notes.\n *\n * @function\n * @param {string[]} array\n * @return {string[]} unique sorted notes\n *\n * @example\n * Array.sortedUniqNoteNames(['a', 'b', 'c2', '1p', 'p2', 'c2', 'b', 'c', 'c3' ])\n * // => [ 'C', 'A', 'B', 'C2', 'C3' ]\n */\nexport function sortedUniqNoteNames(arr: string[]): string[] {\n return sortedNoteNames(arr).filter((n, i, a) => i === 0 || n !== a[i - 1]);\n}\n\n/**\n * Randomizes the order of the specified array in-place, using the Fisher–Yates shuffle.\n *\n * @function\n * @param {Array} array\n * @return {Array} the array shuffled\n *\n * @example\n * shuffle([\"C\", \"D\", \"E\", \"F\"]) // => [...]\n */\nexport function shuffle(arr: any[], rnd = Math.random): any[] {\n let i: number;\n let t: any;\n let m: number = arr.length;\n while (m) {\n i = Math.floor(rnd() * m--);\n t = arr[m];\n arr[m] = arr[i];\n arr[i] = t;\n }\n return arr;\n}\n\n/**\n * Get all permutations of an array\n *\n * @param {Array} array - the array\n * @return {Array} an array with all the permutations\n * @example\n * permutations([\"a\", \"b\", \"c\"])) // =>\n * [\n * [\"a\", \"b\", \"c\"],\n * [\"b\", \"a\", \"c\"],\n * [\"b\", \"c\", \"a\"],\n * [\"a\", \"c\", \"b\"],\n * [\"c\", \"a\", \"b\"],\n * [\"c\", \"b\", \"a\"]\n * ]\n */\nexport function permutations(arr: any[]): any[] {\n if (arr.length === 0) {\n return [[]];\n }\n return permutations(arr.slice(1)).reduce((acc, perm) => {\n return acc.concat(\n arr.map((e, pos) => {\n const newPerm = perm.slice();\n newPerm.splice(pos, 0, arr[0]);\n return newPerm;\n }),\n );\n }, []);\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n// ascending range\nfunction ascR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = n + b);\n return a;\n}\n// descending range\nfunction descR(b: number, n: number) {\n const a = [];\n // tslint:disable-next-line:curly\n for (; n--; a[n] = b - n);\n return a;\n}\n\n/**\n * Creates a numeric range\n *\n * @param {number} from\n * @param {number} to\n * @return {Array}\n *\n * @example\n * range(-2, 2) // => [-2, -1, 0, 1, 2]\n * range(2, -2) // => [2, 1, 0, -1, -2]\n */\nexport function range(from: number, to: number): number[] {\n return from < to ? ascR(from, to - from + 1) : descR(from, from - to + 1);\n}\n\n/**\n * Rotates a list a number of times. It\"s completly agnostic about the\n * contents of the list.\n *\n * @param {Integer} times - the number of rotations\n * @param {Array} collection\n * @return {Array} the rotated collection\n *\n * @example\n * rotate(1, [1, 2, 3]) // => [2, 3, 1]\n */\nexport function rotate(times: number, arr: T[]): T[] {\n const len = arr.length;\n const n = ((times % len) + len) % len;\n return arr.slice(n, len).concat(arr.slice(0, n));\n}\n\n/**\n * Return a copy of the collection with the null values removed\n * @function\n * @param {Array} collection\n * @return {Array}\n *\n * @example\n * compact([\"a\", \"b\", null, \"c\"]) // => [\"a\", \"b\", \"c\"]\n */\nexport function compact(arr: any[]): any[] {\n return arr.filter((n) => n === 0 || n);\n}\n\n/**\n * Randomizes the order of the specified collection in-place, using the Fisher–Yates shuffle.\n *\n * @function\n * @param {Array} collection\n * @return {Array} the collection shuffled\n *\n * @example\n * shuffle([\"C\", \"D\", \"E\", \"F\"]) // => [...]\n */\nexport function shuffle(arr: any[], rnd = Math.random): any[] {\n let i: number;\n let t: any;\n let m: number = arr.length;\n while (m) {\n i = Math.floor(rnd() * m--);\n t = arr[m];\n arr[m] = arr[i];\n arr[i] = t;\n }\n return arr;\n}\n\n/**\n * Get all permutations of an collection\n *\n * @param {Array} collection - the collection\n * @return {Array} an collection with all the permutations\n * @example\n * permutations([\"a\", \"b\", \"c\"])) // =>\n * [\n * [\"a\", \"b\", \"c\"],\n * [\"b\", \"a\", \"c\"],\n * [\"b\", \"c\", \"a\"],\n * [\"a\", \"c\", \"b\"],\n * [\"c\", \"a\", \"b\"],\n * [\"c\", \"b\", \"a\"]\n * ]\n */\nexport function permutations(arr: any[]): any[] {\n if (arr.length === 0) {\n return [[]];\n }\n return permutations(arr.slice(1)).reduce((acc, perm) => {\n return acc.concat(\n arr.map((e, pos) => {\n const newPerm = perm.slice();\n newPerm.splice(pos, 0, arr[0]);\n return newPerm;\n }),\n );\n }, []);\n}\n\nexport default {\n compact,\n permutations,\n range,\n rotate,\n shuffle,\n};\n", "import { compact, range, rotate } from \"@tonaljs/collection\";\nimport {\n Interval,\n IntervalName,\n NotFound,\n Note,\n NoteName,\n deprecate,\n interval,\n note,\n} from \"@tonaljs/core\";\n\n/**\n * The properties of a pitch class set\n * @param {number} num - a number between 1 and 4095 (both included) that\n * uniquely identifies the set. It's the decimal number of the chrom.\n * @param {string} chroma - a string representation of the set: a 12-char string\n * with either \"1\" or \"0\" as characters, representing a pitch class or not\n * for the given position in the octave. For example, a \"1\" at index 0 means 'C',\n * a \"1\" at index 2 means 'D', and so on...\n * @param {string} normalized - the chroma but shifted to the first 1\n * @param {number} length - the number of notes of the pitch class set\n * @param {IntervalName[]} intervals - the intervals of the pitch class set\n * *starting from C*\n */\nexport interface Pcset {\n readonly name: string;\n readonly empty: boolean;\n readonly setNum: number;\n readonly chroma: PcsetChroma;\n readonly normalized: PcsetChroma;\n readonly intervals: IntervalName[];\n}\n\nexport const EmptyPcset: Pcset = {\n empty: true,\n name: \"\",\n setNum: 0,\n chroma: \"000000000000\",\n normalized: \"000000000000\",\n intervals: [],\n};\n\nexport type PcsetChroma = string;\nexport type PcsetNum = number;\n\n// UTILITIES\nconst setNumToChroma = (num: number): string =>\n Number(num).toString(2).padStart(12, \"0\");\nconst chromaToNumber = (chroma: string): number => parseInt(chroma, 2);\nconst REGEX = /^[01]{12}$/;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isChroma(set: any): set is PcsetChroma {\n return REGEX.test(set);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isPcsetNum = (set: any): set is PcsetNum =>\n typeof set === \"number\" && set >= 0 && set <= 4095;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isPcset = (set: any): set is Pcset => set && isChroma(set.chroma);\n\nconst cache: { [key in string]: Pcset } = { [EmptyPcset.chroma]: EmptyPcset };\n\n/**\n * A definition of a pitch class set. It could be:\n * - The pitch class set chroma (a 12-length string with only 1s or 0s)\n * - The pitch class set number (an integer between 1 and 4095)\n * - An array of note names\n * - An array of interval names\n */\nexport type Set =\n | Partial\n | PcsetChroma\n | PcsetNum\n | NoteName[]\n | IntervalName[];\n\n/**\n * Get the pitch class set of a collection of notes or set number or chroma\n */\nexport function get(src: Set): Pcset {\n const chroma: PcsetChroma = isChroma(src)\n ? src\n : isPcsetNum(src)\n ? setNumToChroma(src)\n : Array.isArray(src)\n ? listToChroma(src)\n : isPcset(src)\n ? src.chroma\n : EmptyPcset.chroma;\n\n return (cache[chroma] = cache[chroma] || chromaToPcset(chroma));\n}\n\n/**\n * Use Pcset.properties\n * @function\n * @deprecated\n */\nexport const pcset = deprecate(\"Pcset.pcset\", \"Pcset.get\", get);\n\n/**\n * Get pitch class set chroma\n * @function\n * @example\n * Pcset.chroma([\"c\", \"d\", \"e\"]); //=> \"101010000000\"\n */\nexport const chroma = (set: Set) => get(set).chroma;\n\n/**\n * Get intervals (from C) of a set\n * @function\n * @example\n * Pcset.intervals([\"c\", \"d\", \"e\"]); //=>\n */\nconst intervals = (set: Set) => get(set).intervals;\n\n/**\n * Get pitch class set number\n * @function\n * @example\n * Pcset.num([\"c\", \"d\", \"e\"]); //=> 2192\n */\nconst num = (set: Set) => get(set).setNum;\n\nconst IVLS = [\n \"1P\",\n \"2m\",\n \"2M\",\n \"3m\",\n \"3M\",\n \"4P\",\n \"5d\",\n \"5P\",\n \"6m\",\n \"6M\",\n \"7m\",\n \"7M\",\n];\n\n/**\n * @private\n * Get the intervals of a pcset *starting from C*\n * @param {Set} set - the pitch class set\n * @return {IntervalName[]} an array of interval names or an empty array\n * if not a valid pitch class set\n */\nexport function chromaToIntervals(chroma: PcsetChroma): IntervalName[] {\n const intervals = [];\n for (let i = 0; i < 12; i++) {\n // tslint:disable-next-line:curly\n if (chroma.charAt(i) === \"1\") intervals.push(IVLS[i]);\n }\n return intervals;\n}\n\n/**\n * Get a list of all possible pitch class sets (all possible chromas) *having\n * C as root*. There are 2048 different chromas. If you want them with another\n * note you have to transpose it\n *\n * @see http://allthescales.org/\n * @return {Array} an array of possible chromas from '10000000000' to '11111111111'\n */\nexport function chromas(): PcsetChroma[] {\n return range(2048, 4095).map(setNumToChroma);\n}\n\n/**\n * Given a a list of notes or a pcset chroma, produce the rotations\n * of the chroma discarding the ones that starts with \"0\"\n *\n * This is used, for example, to get all the modes of a scale.\n *\n * @param {Array|string} set - the list of notes or pitchChr of the set\n * @param {boolean} normalize - (Optional, true by default) remove all\n * the rotations that starts with \"0\"\n * @return {Array} an array with all the modes of the chroma\n *\n * @example\n * Pcset.modes([\"C\", \"D\", \"E\"]).map(Pcset.intervals)\n */\nexport function modes(set: Set, normalize = true): PcsetChroma[] {\n const pcs = get(set);\n\n const binary = pcs.chroma.split(\"\");\n return compact(\n binary.map((_, i) => {\n const r = rotate(i, binary);\n return normalize && r[0] === \"0\" ? null : r.join(\"\");\n }),\n );\n}\n\n/**\n * Test if two pitch class sets are numentical\n *\n * @param {Array|string} set1 - one of the pitch class sets\n * @param {Array|string} set2 - the other pitch class set\n * @return {boolean} true if they are equal\n * @example\n * Pcset.isEqual([\"c2\", \"d3\"], [\"c5\", \"d2\"]) // => true\n */\nexport function isEqual(s1: Set, s2: Set) {\n return get(s1).setNum === get(s2).setNum;\n}\n\n/**\n * Create a function that test if a collection of notes is a\n * subset of a given set\n *\n * The function is curryfied.\n *\n * @param {PcsetChroma|NoteName[]} set - the superset to test against (chroma or\n * list of notes)\n * @return{function(PcsetChroma|NoteNames[]): boolean} a function accepting a set\n * to test against (chroma or list of notes)\n * @example\n * const inCMajor = Pcset.isSubsetOf([\"C\", \"E\", \"G\"])\n * inCMajor([\"e6\", \"c4\"]) // => true\n * inCMajor([\"e6\", \"c4\", \"d3\"]) // => false\n */\nexport function isSubsetOf(set: Set) {\n const s = get(set).setNum;\n\n return (notes: Set | Pcset) => {\n const o = get(notes).setNum;\n // tslint:disable-next-line: no-bitwise\n return s && s !== o && (o & s) === o;\n };\n}\n\n/**\n * Create a function that test if a collection of notes is a\n * superset of a given set (it contains all notes and at least one more)\n *\n * @param {Set} set - an array of notes or a chroma set string to test against\n * @return {(subset: Set): boolean} a function that given a set\n * returns true if is a subset of the first one\n * @example\n * const extendsCMajor = Pcset.isSupersetOf([\"C\", \"E\", \"G\"])\n * extendsCMajor([\"e6\", \"a\", \"c4\", \"g2\"]) // => true\n * extendsCMajor([\"c6\", \"e4\", \"g3\"]) // => false\n */\nexport function isSupersetOf(set: Set) {\n const s = get(set).setNum;\n return (notes: Set) => {\n const o = get(notes).setNum;\n // tslint:disable-next-line: no-bitwise\n return s && s !== o && (o | s) === o;\n };\n}\n\n/**\n * Test if a given pitch class set includes a note\n *\n * @param {Array} set - the base set to test against\n * @param {string} note - the note to test\n * @return {boolean} true if the note is included in the pcset\n *\n * Can be partially applied\n *\n * @example\n * const isNoteInCMajor = isNoteIncludedIn(['C', 'E', 'G'])\n * isNoteInCMajor('C4') // => true\n * isNoteInCMajor('C#4') // => false\n */\nexport function isNoteIncludedIn(set: Set) {\n const s = get(set);\n\n return (noteName: NoteName): boolean => {\n const n = note(noteName);\n return s && !n.empty && s.chroma.charAt(n.chroma) === \"1\";\n };\n}\n\n/** @deprecated use: isNoteIncludedIn */\nexport const includes = isNoteIncludedIn;\n\n/**\n * Filter a list with a pitch class set\n *\n * @param {Array|string} set - the pitch class set notes\n * @param {Array|string} notes - the note list to be filtered\n * @return {Array} the filtered notes\n *\n * @example\n * Pcset.filter([\"C\", \"D\", \"E\"], [\"c2\", \"c#2\", \"d2\", \"c3\", \"c#3\", \"d3\"]) // => [ \"c2\", \"d2\", \"c3\", \"d3\" ])\n * Pcset.filter([\"C2\"], [\"c2\", \"c#2\", \"d2\", \"c3\", \"c#3\", \"d3\"]) // => [ \"c2\", \"c3\" ])\n */\nexport function filter(set: Set) {\n const isIncluded = isNoteIncludedIn(set);\n return (notes: NoteName[]) => {\n return notes.filter(isIncluded);\n };\n}\n\nexport default {\n get,\n chroma,\n num,\n intervals,\n chromas,\n isSupersetOf,\n isSubsetOf,\n isNoteIncludedIn,\n isEqual,\n filter,\n modes,\n // deprecated\n pcset,\n};\n\n//// PRIVATE ////\n\nfunction chromaRotations(chroma: string): string[] {\n const binary = chroma.split(\"\");\n return binary.map((_, i) => rotate(i, binary).join(\"\"));\n}\n\nfunction chromaToPcset(chroma: PcsetChroma): Pcset {\n const setNum = chromaToNumber(chroma);\n const normalizedNum = chromaRotations(chroma)\n .map(chromaToNumber)\n .filter((n) => n >= 2048)\n .sort()[0];\n const normalized = setNumToChroma(normalizedNum);\n\n const intervals = chromaToIntervals(chroma);\n\n return {\n empty: false,\n name: \"\",\n setNum,\n chroma,\n normalized,\n intervals,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction listToChroma(set: any[]): PcsetChroma {\n if (set.length === 0) {\n return EmptyPcset.chroma;\n }\n\n let pitch: Note | Interval | NotFound;\n const binary = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < set.length; i++) {\n pitch = note(set[i]);\n // tslint:disable-next-line: curly\n if (pitch.empty) pitch = interval(set[i]);\n // tslint:disable-next-line: curly\n if (!pitch.empty) binary[pitch.chroma] = 1;\n }\n return binary.join(\"\");\n}\n", "import { deprecate } from \"@tonaljs/core\";\nimport {\n EmptyPcset,\n get as pcset,\n Pcset,\n PcsetChroma,\n PcsetNum,\n} from \"@tonaljs/pcset\";\nimport data from \"./data\";\n\nexport type ChordQuality =\n | \"Major\"\n | \"Minor\"\n | \"Augmented\"\n | \"Diminished\"\n | \"Unknown\";\n\nexport interface ChordType extends Pcset {\n name: string;\n quality: ChordQuality;\n aliases: string[];\n}\nconst NoChordType: ChordType = {\n ...EmptyPcset,\n name: \"\",\n quality: \"Unknown\",\n intervals: [],\n aliases: [],\n};\n\ntype ChordTypeName = string | PcsetChroma | PcsetNum;\n\nlet dictionary: ChordType[] = [];\nlet index: Record = {};\n\n/**\n * Given a chord name or chroma, return the chord properties\n * @param {string} source - chord name or pitch class set chroma\n * @example\n * import { get } from 'tonaljs/chord-type'\n * get('major') // => { name: 'major', ... }\n */\nexport function get(type: ChordTypeName): ChordType {\n return index[type] || NoChordType;\n}\n\nexport const chordType = deprecate(\"ChordType.chordType\", \"ChordType.get\", get);\n\n/**\n * Get all chord (long) names\n */\nexport function names() {\n return dictionary.map((chord) => chord.name).filter((x) => x);\n}\n\n/**\n * Get all chord symbols\n */\nexport function symbols() {\n return dictionary.map((chord) => chord.aliases[0]).filter((x) => x);\n}\n\n/**\n * Keys used to reference chord types\n */\nexport function keys() {\n return Object.keys(index);\n}\n\n/**\n * Return a list of all chord types\n */\nexport function all(): ChordType[] {\n return dictionary.slice();\n}\n\nexport const entries = deprecate(\"ChordType.entries\", \"ChordType.all\", all);\n\n/**\n * Clear the dictionary\n */\nexport function removeAll() {\n dictionary = [];\n index = {};\n}\n\n/**\n * Add a chord to the dictionary.\n * @param intervals\n * @param aliases\n * @param [fullName]\n */\nexport function add(intervals: string[], aliases: string[], fullName?: string) {\n const quality = getQuality(intervals);\n const chord = {\n ...pcset(intervals),\n name: fullName || \"\",\n quality,\n intervals,\n aliases,\n };\n dictionary.push(chord);\n if (chord.name) {\n index[chord.name] = chord;\n }\n index[chord.setNum] = chord;\n index[chord.chroma] = chord;\n chord.aliases.forEach((alias) => addAlias(chord, alias));\n}\n\nexport function addAlias(chord: ChordType, alias: string) {\n index[alias] = chord;\n}\n\nfunction getQuality(intervals: string[]): ChordQuality {\n const has = (interval: string) => intervals.indexOf(interval) !== -1;\n return has(\"5A\")\n ? \"Augmented\"\n : has(\"3M\")\n ? \"Major\"\n : has(\"5d\")\n ? \"Diminished\"\n : has(\"3m\")\n ? \"Minor\"\n : \"Unknown\";\n}\n\ndata.forEach(([ivls, fullName, names]: string[]) =>\n add(ivls.split(\" \"), names.split(\" \"), fullName),\n);\ndictionary.sort((a, b) => a.setNum - b.setNum);\n\nexport default {\n names,\n symbols,\n get,\n all,\n add,\n removeAll,\n keys,\n // deprecated\n entries,\n chordType,\n};\n", "/**\n * @private\n * Chord List\n * Source: https://en.wikibooks.org/wiki/Music_Theory/Complete_List_of_Chord_Patterns\n * Format: [\"intervals\", \"full name\", \"abrv1 abrv2\"]\n */\nconst CHORDS: string[][] = [\n // ==Major==\n [\"1P 3M 5P\", \"major\", \"M ^ maj\"],\n [\"1P 3M 5P 7M\", \"major seventh\", \"maj7 Δ ma7 M7 Maj7 ^7\"],\n [\"1P 3M 5P 7M 9M\", \"major ninth\", \"maj9 Δ9 ^9\"],\n [\"1P 3M 5P 7M 9M 13M\", \"major thirteenth\", \"maj13 Maj13 ^13\"],\n [\"1P 3M 5P 6M\", \"sixth\", \"6 add6 add13 M6\"],\n [\"1P 3M 5P 6M 9M\", \"sixth added ninth\", \"6add9 6/9 69 M69\"],\n [\"1P 3M 6m 7M\", \"major seventh flat sixth\", \"M7b6 ^7b6\"],\n [\n \"1P 3M 5P 7M 11A\",\n \"major seventh sharp eleventh\",\n \"maj#4 Δ#4 Δ#11 M7#11 ^7#11 maj7#11\",\n ],\n // ==Minor==\n // '''Normal'''\n [\"1P 3m 5P\", \"minor\", \"m min -\"],\n [\"1P 3m 5P 7m\", \"minor seventh\", \"m7 min7 mi7 -7\"],\n [\n \"1P 3m 5P 7M\",\n \"minor/major seventh\",\n \"m/ma7 m/maj7 mM7 mMaj7 m/M7 -Δ7 mΔ -^7 -maj7\",\n ],\n [\"1P 3m 5P 6M\", \"minor sixth\", \"m6 -6\"],\n [\"1P 3m 5P 7m 9M\", \"minor ninth\", \"m9 -9\"],\n [\"1P 3m 5P 7M 9M\", \"minor/major ninth\", \"mM9 mMaj9 -^9\"],\n [\"1P 3m 5P 7m 9M 11P\", \"minor eleventh\", \"m11 -11\"],\n [\"1P 3m 5P 7m 9M 13M\", \"minor thirteenth\", \"m13 -13\"],\n // '''Diminished'''\n [\"1P 3m 5d\", \"diminished\", \"dim ° o\"],\n [\"1P 3m 5d 7d\", \"diminished seventh\", \"dim7 °7 o7\"],\n [\"1P 3m 5d 7m\", \"half-diminished\", \"m7b5 ø -7b5 h7 h\"],\n // ==Dominant/Seventh==\n // '''Normal'''\n [\"1P 3M 5P 7m\", \"dominant seventh\", \"7 dom\"],\n [\"1P 3M 5P 7m 9M\", \"dominant ninth\", \"9\"],\n [\"1P 3M 5P 7m 9M 13M\", \"dominant thirteenth\", \"13\"],\n [\"1P 3M 5P 7m 11A\", \"lydian dominant seventh\", \"7#11 7#4\"],\n // '''Altered'''\n [\"1P 3M 5P 7m 9m\", \"dominant flat ninth\", \"7b9\"],\n [\"1P 3M 5P 7m 9A\", \"dominant sharp ninth\", \"7#9\"],\n [\"1P 3M 7m 9m\", \"altered\", \"alt7\"],\n // '''Suspended'''\n [\"1P 4P 5P\", \"suspended fourth\", \"sus4 sus\"],\n [\"1P 2M 5P\", \"suspended second\", \"sus2\"],\n [\"1P 4P 5P 7m\", \"suspended fourth seventh\", \"7sus4 7sus\"],\n [\"1P 5P 7m 9M 11P\", \"eleventh\", \"11\"],\n [\n \"1P 4P 5P 7m 9m\",\n \"suspended fourth flat ninth\",\n \"b9sus phryg 7b9sus 7b9sus4\",\n ],\n // ==Other==\n [\"1P 5P\", \"fifth\", \"5\"],\n [\"1P 3M 5A\", \"augmented\", \"aug + +5 ^#5\"],\n [\"1P 3m 5A\", \"minor augmented\", \"m#5 -#5 m+\"],\n [\"1P 3M 5A 7M\", \"augmented seventh\", \"maj7#5 maj7+5 +maj7 ^7#5\"],\n [\n \"1P 3M 5P 7M 9M 11A\",\n \"major sharp eleventh (lydian)\",\n \"maj9#11 Δ9#11 ^9#11\",\n ],\n // ==Legacy==\n [\"1P 2M 4P 5P\", \"\", \"sus24 sus4add9\"],\n [\"1P 3M 5A 7M 9M\", \"\", \"maj9#5 Maj9#5\"],\n [\"1P 3M 5A 7m\", \"\", \"7#5 +7 7+ 7aug aug7\"],\n [\"1P 3M 5A 7m 9A\", \"\", \"7#5#9 7#9#5 7alt\"],\n [\"1P 3M 5A 7m 9M\", \"\", \"9#5 9+\"],\n [\"1P 3M 5A 7m 9M 11A\", \"\", \"9#5#11\"],\n [\"1P 3M 5A 7m 9m\", \"\", \"7#5b9 7b9#5\"],\n [\"1P 3M 5A 7m 9m 11A\", \"\", \"7#5b9#11\"],\n [\"1P 3M 5A 9A\", \"\", \"+add#9\"],\n [\"1P 3M 5A 9M\", \"\", \"M#5add9 +add9\"],\n [\"1P 3M 5P 6M 11A\", \"\", \"M6#11 M6b5 6#11 6b5\"],\n [\"1P 3M 5P 6M 7M 9M\", \"\", \"M7add13\"],\n [\"1P 3M 5P 6M 9M 11A\", \"\", \"69#11\"],\n [\"1P 3m 5P 6M 9M\", \"\", \"m69 -69\"],\n [\"1P 3M 5P 6m 7m\", \"\", \"7b6\"],\n [\"1P 3M 5P 7M 9A 11A\", \"\", \"maj7#9#11\"],\n [\"1P 3M 5P 7M 9M 11A 13M\", \"\", \"M13#11 maj13#11 M13+4 M13#4\"],\n [\"1P 3M 5P 7M 9m\", \"\", \"M7b9\"],\n [\"1P 3M 5P 7m 11A 13m\", \"\", \"7#11b13 7b5b13\"],\n [\"1P 3M 5P 7m 13M\", \"\", \"7add6 67 7add13\"],\n [\"1P 3M 5P 7m 9A 11A\", \"\", \"7#9#11 7b5#9 7#9b5\"],\n [\"1P 3M 5P 7m 9A 11A 13M\", \"\", \"13#9#11\"],\n [\"1P 3M 5P 7m 9A 11A 13m\", \"\", \"7#9#11b13\"],\n [\"1P 3M 5P 7m 9A 13M\", \"\", \"13#9\"],\n [\"1P 3M 5P 7m 9A 13m\", \"\", \"7#9b13\"],\n [\"1P 3M 5P 7m 9M 11A\", \"\", \"9#11 9+4 9#4\"],\n [\"1P 3M 5P 7m 9M 11A 13M\", \"\", \"13#11 13+4 13#4\"],\n [\"1P 3M 5P 7m 9M 11A 13m\", \"\", \"9#11b13 9b5b13\"],\n [\"1P 3M 5P 7m 9m 11A\", \"\", \"7b9#11 7b5b9 7b9b5\"],\n [\"1P 3M 5P 7m 9m 11A 13M\", \"\", \"13b9#11\"],\n [\"1P 3M 5P 7m 9m 11A 13m\", \"\", \"7b9b13#11 7b9#11b13 7b5b9b13\"],\n [\"1P 3M 5P 7m 9m 13M\", \"\", \"13b9\"],\n [\"1P 3M 5P 7m 9m 13m\", \"\", \"7b9b13\"],\n [\"1P 3M 5P 7m 9m 9A\", \"\", \"7b9#9\"],\n [\"1P 3M 5P 9M\", \"\", \"Madd9 2 add9 add2\"],\n [\"1P 3M 5P 9m\", \"\", \"Maddb9\"],\n [\"1P 3M 5d\", \"\", \"Mb5\"],\n [\"1P 3M 5d 6M 7m 9M\", \"\", \"13b5\"],\n [\"1P 3M 5d 7M\", \"\", \"M7b5\"],\n [\"1P 3M 5d 7M 9M\", \"\", \"M9b5\"],\n [\"1P 3M 5d 7m\", \"\", \"7b5\"],\n [\"1P 3M 5d 7m 9M\", \"\", \"9b5\"],\n [\"1P 3M 7m\", \"\", \"7no5\"],\n [\"1P 3M 7m 13m\", \"\", \"7b13\"],\n [\"1P 3M 7m 9M\", \"\", \"9no5\"],\n [\"1P 3M 7m 9M 13M\", \"\", \"13no5\"],\n [\"1P 3M 7m 9M 13m\", \"\", \"9b13\"],\n [\"1P 3m 4P 5P\", \"\", \"madd4\"],\n [\"1P 3m 5P 6m 7M\", \"\", \"mMaj7b6\"],\n [\"1P 3m 5P 6m 7M 9M\", \"\", \"mMaj9b6\"],\n [\"1P 3m 5P 7m 11P\", \"\", \"m7add11 m7add4\"],\n [\"1P 3m 5P 9M\", \"\", \"madd9\"],\n [\"1P 3m 5d 6M 7M\", \"\", \"o7M7\"],\n [\"1P 3m 5d 7M\", \"\", \"oM7\"],\n [\"1P 3m 6m 7M\", \"\", \"mb6M7\"],\n [\"1P 3m 6m 7m\", \"\", \"m7#5\"],\n [\"1P 3m 6m 7m 9M\", \"\", \"m9#5\"],\n [\"1P 3m 5A 7m 9M 11P\", \"\", \"m11A\"],\n [\"1P 3m 6m 9m\", \"\", \"mb6b9\"],\n [\"1P 2M 3m 5d 7m\", \"\", \"m9b5\"],\n [\"1P 4P 5A 7M\", \"\", \"M7#5sus4\"],\n [\"1P 4P 5A 7M 9M\", \"\", \"M9#5sus4\"],\n [\"1P 4P 5A 7m\", \"\", \"7#5sus4\"],\n [\"1P 4P 5P 7M\", \"\", \"M7sus4\"],\n [\"1P 4P 5P 7M 9M\", \"\", \"M9sus4\"],\n [\"1P 4P 5P 7m 9M\", \"\", \"9sus4 9sus\"],\n [\"1P 4P 5P 7m 9M 13M\", \"\", \"13sus4 13sus\"],\n [\"1P 4P 5P 7m 9m 13m\", \"\", \"7sus4b9b13 7b9b13sus4\"],\n [\"1P 4P 7m 10m\", \"\", \"4 quartal\"],\n [\"1P 5P 7m 9m 11P\", \"\", \"11b9\"],\n];\n\nexport default CHORDS;\n", "import { all, ChordType } from \"@tonaljs/chord-type\";\nimport { note } from \"@tonaljs/core\";\nimport { modes } from \"@tonaljs/pcset\";\n\ninterface FoundChord {\n readonly weight: number;\n readonly name: string;\n}\n\nconst namedSet = (notes: string[]) => {\n const pcToName = notes.reduce>((record, n) => {\n const chroma = note(n).chroma;\n if (chroma !== undefined) {\n record[chroma] = record[chroma] || note(n).name;\n }\n return record;\n }, {});\n\n return (chroma: number) => pcToName[chroma];\n};\n\ntype DetectOptions = {\n assumePerfectFifth: boolean;\n};\nexport function detect(\n source: string[],\n options: Partial = {},\n): string[] {\n const notes = source.map((n) => note(n).pc).filter((x) => x);\n if (note.length === 0) {\n return [];\n }\n\n const found: FoundChord[] = findMatches(notes, 1, options);\n\n return found\n .filter((chord) => chord.weight)\n .sort((a, b) => b.weight - a.weight)\n .map((chord) => chord.name);\n}\n\n/* tslint:disable:no-bitwise */\nconst BITMASK = {\n // 3m 000100000000\n // 3M 000010000000\n anyThirds: 384,\n // 5P 000000010000\n perfectFifth: 16,\n // 5d 000000100000\n // 5A 000000001000\n nonPerfectFifths: 40,\n anySeventh: 3,\n};\n\nconst testChromaNumber = (bitmask: number) => (chromaNumber: number) =>\n Boolean(chromaNumber & bitmask);\nconst hasAnyThird = testChromaNumber(BITMASK.anyThirds);\nconst hasPerfectFifth = testChromaNumber(BITMASK.perfectFifth);\nconst hasAnySeventh = testChromaNumber(BITMASK.anySeventh);\nconst hasNonPerfectFifth = testChromaNumber(BITMASK.nonPerfectFifths);\n\nfunction hasAnyThirdAndPerfectFifthAndAnySeventh(chordType: ChordType) {\n const chromaNumber = parseInt(chordType.chroma, 2);\n return (\n hasAnyThird(chromaNumber) &&\n hasPerfectFifth(chromaNumber) &&\n hasAnySeventh(chromaNumber)\n );\n}\n\nfunction withPerfectFifth(chroma: string): string {\n const chromaNumber = parseInt(chroma, 2);\n return hasNonPerfectFifth(chromaNumber)\n ? chroma\n : (chromaNumber | 16).toString(2);\n}\n\n/* tslint:enable:no-bitwise */\n\ntype FindMatchesOptions = {\n assumePerfectFifth: boolean;\n};\nfunction findMatches(\n notes: string[],\n weight: number,\n options: Partial,\n): FoundChord[] {\n const tonic = notes[0];\n const tonicChroma = note(tonic).chroma;\n const noteName = namedSet(notes);\n // we need to test all chromas to get the correct baseNote\n const allModes = modes(notes, false);\n\n const found: FoundChord[] = [];\n allModes.forEach((mode, index) => {\n const modeWithPerfectFifth =\n options.assumePerfectFifth && withPerfectFifth(mode);\n // some chords could have the same chroma but different interval spelling\n const chordTypes = all().filter((chordType) => {\n if (\n options.assumePerfectFifth &&\n hasAnyThirdAndPerfectFifthAndAnySeventh(chordType)\n ) {\n return chordType.chroma === modeWithPerfectFifth;\n }\n return chordType.chroma === mode;\n });\n\n chordTypes.forEach((chordType) => {\n const chordName = chordType.aliases[0];\n const baseNote = noteName(index);\n const isInversion = index !== tonicChroma;\n if (isInversion) {\n found.push({\n weight: 0.5 * weight,\n name: `${baseNote}${chordName}/${tonic}`,\n });\n } else {\n found.push({ weight: 1 * weight, name: `${baseNote}${chordName}` });\n }\n });\n });\n\n return found;\n}\n\nexport default { detect };\n", "import { deprecate } from \"@tonaljs/core\";\nimport {\n EmptyPcset,\n get as pcset,\n Pcset,\n PcsetChroma,\n PcsetNum,\n} from \"@tonaljs/pcset\";\nimport data from \"./data\";\n\n/**\n * Properties for a scale in the scale dictionary. It's a pitch class set\n * properties with the following additional information:\n * - name: the scale name\n * - aliases: alternative list of names\n * - intervals: an array of interval names\n */\nexport interface ScaleType extends Pcset {\n readonly name: string;\n readonly aliases: string[];\n}\n\nexport const NoScaleType: ScaleType = {\n ...EmptyPcset,\n intervals: [],\n aliases: [],\n};\n\ntype ScaleTypeName = string | PcsetChroma | PcsetNum;\n\nlet dictionary: ScaleType[] = [];\nlet index: Record = {};\n\nexport function names() {\n return dictionary.map((scale) => scale.name);\n}\n\n/**\n * Given a scale name or chroma, return the scale properties\n *\n * @param {string} type - scale name or pitch class set chroma\n * @example\n * import { get } from 'tonaljs/scale-type'\n * get('major') // => { name: 'major', ... }\n */\nexport function get(type: ScaleTypeName): ScaleType {\n return index[type] || NoScaleType;\n}\n\nexport const scaleType = deprecate(\n \"ScaleDictionary.scaleType\",\n \"ScaleType.get\",\n get,\n);\n\n/**\n * Return a list of all scale types\n */\nexport function all() {\n return dictionary.slice();\n}\n\nexport const entries = deprecate(\n \"ScaleDictionary.entries\",\n \"ScaleType.all\",\n all,\n);\n\n/**\n * Keys used to reference scale types\n */\nexport function keys() {\n return Object.keys(index);\n}\n\n/**\n * Clear the dictionary\n */\nexport function removeAll() {\n dictionary = [];\n index = {};\n}\n\n/**\n * Add a scale into dictionary\n * @param intervals\n * @param name\n * @param aliases\n */\nexport function add(\n intervals: string[],\n name: string,\n aliases: string[] = [],\n): ScaleType {\n const scale = { ...pcset(intervals), name, intervals, aliases };\n dictionary.push(scale);\n index[scale.name] = scale;\n index[scale.setNum] = scale;\n index[scale.chroma] = scale;\n scale.aliases.forEach((alias) => addAlias(scale, alias));\n return scale;\n}\n\nexport function addAlias(scale: ScaleType, alias: string) {\n index[alias] = scale;\n}\n\ndata.forEach(([ivls, name, ...aliases]: string[]) =>\n add(ivls.split(\" \"), name, aliases),\n);\n\nexport default {\n names,\n get,\n all,\n add,\n removeAll,\n keys,\n\n // deprecated\n entries,\n scaleType,\n};\n", "// SCALES\n// Format: [\"intervals\", \"name\", \"alias1\", \"alias2\", ...]\nconst SCALES: string[][] = [\n // Basic scales\n [\"1P 2M 3M 5P 6M\", \"major pentatonic\", \"pentatonic\"],\n [\"1P 2M 3M 4P 5P 6M 7M\", \"major\", \"ionian\"],\n [\"1P 2M 3m 4P 5P 6m 7m\", \"minor\", \"aeolian\"],\n\n // Jazz common scales\n [\"1P 2M 3m 3M 5P 6M\", \"major blues\"],\n [\"1P 3m 4P 5d 5P 7m\", \"minor blues\", \"blues\"],\n [\"1P 2M 3m 4P 5P 6M 7M\", \"melodic minor\"],\n [\"1P 2M 3m 4P 5P 6m 7M\", \"harmonic minor\"],\n [\"1P 2M 3M 4P 5P 6M 7m 7M\", \"bebop\"],\n [\"1P 2M 3m 4P 5d 6m 6M 7M\", \"diminished\", \"whole-half diminished\"],\n\n // Modes\n [\"1P 2M 3m 4P 5P 6M 7m\", \"dorian\"],\n [\"1P 2M 3M 4A 5P 6M 7M\", \"lydian\"],\n [\"1P 2M 3M 4P 5P 6M 7m\", \"mixolydian\", \"dominant\"],\n [\"1P 2m 3m 4P 5P 6m 7m\", \"phrygian\"],\n [\"1P 2m 3m 4P 5d 6m 7m\", \"locrian\"],\n\n // 5-note scales\n [\"1P 3M 4P 5P 7M\", \"ionian pentatonic\"],\n [\"1P 3M 4P 5P 7m\", \"mixolydian pentatonic\", \"indian\"],\n [\"1P 2M 4P 5P 6M\", \"ritusen\"],\n [\"1P 2M 4P 5P 7m\", \"egyptian\"],\n [\"1P 3M 4P 5d 7m\", \"neopolitan major pentatonic\"],\n [\"1P 3m 4P 5P 6m\", \"vietnamese 1\"],\n [\"1P 2m 3m 5P 6m\", \"pelog\"],\n [\"1P 2m 4P 5P 6m\", \"kumoijoshi\"],\n [\"1P 2M 3m 5P 6m\", \"hirajoshi\"],\n [\"1P 2m 4P 5d 7m\", \"iwato\"],\n [\"1P 2m 4P 5P 7m\", \"in-sen\"],\n [\"1P 3M 4A 5P 7M\", \"lydian pentatonic\", \"chinese\"],\n [\"1P 3m 4P 6m 7m\", \"malkos raga\"],\n [\"1P 3m 4P 5d 7m\", \"locrian pentatonic\", \"minor seven flat five pentatonic\"],\n [\"1P 3m 4P 5P 7m\", \"minor pentatonic\", \"vietnamese 2\"],\n [\"1P 3m 4P 5P 6M\", \"minor six pentatonic\"],\n [\"1P 2M 3m 5P 6M\", \"flat three pentatonic\", \"kumoi\"],\n [\"1P 2M 3M 5P 6m\", \"flat six pentatonic\"],\n [\"1P 2m 3M 5P 6M\", \"scriabin\"],\n [\"1P 3M 5d 6m 7m\", \"whole tone pentatonic\"],\n [\"1P 3M 4A 5A 7M\", \"lydian #5P pentatonic\"],\n [\"1P 3M 4A 5P 7m\", \"lydian dominant pentatonic\"],\n [\"1P 3m 4P 5P 7M\", \"minor #7M pentatonic\"],\n [\"1P 3m 4d 5d 7m\", \"super locrian pentatonic\"],\n\n // 6-note scales\n [\"1P 2M 3m 4P 5P 7M\", \"minor hexatonic\"],\n [\"1P 2A 3M 5P 5A 7M\", \"augmented\"],\n [\"1P 2M 4P 5P 6M 7m\", \"piongio\"],\n [\"1P 2m 3M 4A 6M 7m\", \"prometheus neopolitan\"],\n [\"1P 2M 3M 4A 6M 7m\", \"prometheus\"],\n [\"1P 2m 3M 5d 6m 7m\", \"mystery #1\"],\n [\"1P 2m 3M 4P 5A 6M\", \"six tone symmetric\"],\n [\"1P 2M 3M 4A 5A 6A\", \"whole tone\", \"messiaen's mode #1\"],\n [\"1P 2m 4P 4A 5P 7M\", \"messiaen's mode #5\"],\n\n // 7-note scales\n [\"1P 2M 3M 4P 5d 6m 7m\", \"locrian major\", \"arabian\"],\n [\"1P 2m 3M 4A 5P 6m 7M\", \"double harmonic lydian\"],\n [\n \"1P 2m 2A 3M 4A 6m 7m\",\n \"altered\",\n \"super locrian\",\n \"diminished whole tone\",\n \"pomeroy\",\n ],\n [\"1P 2M 3m 4P 5d 6m 7m\", \"locrian #2\", \"half-diminished\", \"aeolian b5\"],\n [\n \"1P 2M 3M 4P 5P 6m 7m\",\n \"mixolydian b6\",\n \"melodic minor fifth mode\",\n \"hindu\",\n ],\n [\"1P 2M 3M 4A 5P 6M 7m\", \"lydian dominant\", \"lydian b7\", \"overtone\"],\n [\"1P 2M 3M 4A 5A 6M 7M\", \"lydian augmented\"],\n [\n \"1P 2m 3m 4P 5P 6M 7m\",\n \"dorian b2\",\n \"phrygian #6\",\n \"melodic minor second mode\",\n ],\n [\n \"1P 2m 3m 4d 5d 6m 7d\",\n \"ultralocrian\",\n \"superlocrian bb7\",\n \"superlocrian diminished\",\n ],\n [\"1P 2m 3m 4P 5d 6M 7m\", \"locrian 6\", \"locrian natural 6\", \"locrian sharp 6\"],\n [\"1P 2A 3M 4P 5P 5A 7M\", \"augmented heptatonic\"],\n // Source https://en.wikipedia.org/wiki/Ukrainian_Dorian_scale\n [\n \"1P 2M 3m 4A 5P 6M 7m\",\n \"dorian #4\",\n \"ukrainian dorian\",\n \"romanian minor\",\n \"altered dorian\",\n ],\n [\"1P 2M 3m 4A 5P 6M 7M\", \"lydian diminished\"],\n [\"1P 2M 3M 4A 5A 7m 7M\", \"leading whole tone\"],\n [\"1P 2M 3M 4A 5P 6m 7m\", \"lydian minor\"],\n [\"1P 2m 3M 4P 5P 6m 7m\", \"phrygian dominant\", \"spanish\", \"phrygian major\"],\n [\"1P 2m 3m 4P 5P 6m 7M\", \"balinese\"],\n [\"1P 2m 3m 4P 5P 6M 7M\", \"neopolitan major\"],\n [\"1P 2M 3M 4P 5P 6m 7M\", \"harmonic major\"],\n [\"1P 2m 3M 4P 5P 6m 7M\", \"double harmonic major\", \"gypsy\"],\n [\"1P 2M 3m 4A 5P 6m 7M\", \"hungarian minor\"],\n [\"1P 2A 3M 4A 5P 6M 7m\", \"hungarian major\"],\n [\"1P 2m 3M 4P 5d 6M 7m\", \"oriental\"],\n [\"1P 2m 3m 3M 4A 5P 7m\", \"flamenco\"],\n [\"1P 2m 3m 4A 5P 6m 7M\", \"todi raga\"],\n [\"1P 2m 3M 4P 5d 6m 7M\", \"persian\"],\n [\"1P 2m 3M 5d 6m 7m 7M\", \"enigmatic\"],\n [\n \"1P 2M 3M 4P 5A 6M 7M\",\n \"major augmented\",\n \"major #5\",\n \"ionian augmented\",\n \"ionian #5\",\n ],\n [\"1P 2A 3M 4A 5P 6M 7M\", \"lydian #9\"],\n\n // 8-note scales\n [\"1P 2m 2M 4P 4A 5P 6m 7M\", \"messiaen's mode #4\"],\n [\"1P 2m 3M 4P 4A 5P 6m 7M\", \"purvi raga\"],\n [\"1P 2m 3m 3M 4P 5P 6m 7m\", \"spanish heptatonic\"],\n [\"1P 2M 3m 3M 4P 5P 6M 7m\", \"bebop minor\"],\n [\"1P 2M 3M 4P 5P 5A 6M 7M\", \"bebop major\"],\n [\"1P 2m 3m 4P 5d 5P 6m 7m\", \"bebop locrian\"],\n [\"1P 2M 3m 4P 5P 6m 7m 7M\", \"minor bebop\"],\n [\"1P 2M 3M 4P 5d 5P 6M 7M\", \"ichikosucho\"],\n [\"1P 2M 3m 4P 5P 6m 6M 7M\", \"minor six diminished\"],\n [\n \"1P 2m 3m 3M 4A 5P 6M 7m\",\n \"half-whole diminished\",\n \"dominant diminished\",\n \"messiaen's mode #2\",\n ],\n [\"1P 3m 3M 4P 5P 6M 7m 7M\", \"kafi raga\"],\n [\"1P 2M 3M 4P 4A 5A 6A 7M\", \"messiaen's mode #6\"],\n\n // 9-note scales\n [\"1P 2M 3m 3M 4P 5d 5P 6M 7m\", \"composite blues\"],\n [\"1P 2M 3m 3M 4A 5P 6m 7m 7M\", \"messiaen's mode #3\"],\n\n // 10-note scales\n [\"1P 2m 2M 3m 4P 4A 5P 6m 6M 7M\", \"messiaen's mode #7\"],\n\n // 12-note scales\n [\"1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M\", \"chromatic\"],\n];\n\nexport default SCALES;\n", "import { detect } from \"@tonaljs/chord-detect\";\nimport {\n ChordType,\n all as chordTypes,\n get as getChordType,\n} from \"@tonaljs/chord-type\";\nimport { tonicIntervalsTransposer } from \"@tonaljs/core\";\n\nimport {\n deprecate,\n distance,\n note,\n NoteName,\n tokenizeNote,\n transpose as transposeNote,\n} from \"@tonaljs/core\";\n\nimport { isSubsetOf, isSupersetOf } from \"@tonaljs/pcset\";\n\nimport { all as scaleTypes } from \"@tonaljs/scale-type\";\nexport { detect } from \"@tonaljs/chord-detect\";\n\ntype ChordName = string;\ntype ChordNameTokens = [string, string]; // [TONIC, SCALE TYPE]\n\nexport interface Chord extends ChordType {\n tonic: string | null;\n type: string;\n root: string;\n rootDegree: number;\n symbol: string;\n notes: NoteName[];\n}\n\nconst NoChord: Chord = {\n empty: true,\n name: \"\",\n symbol: \"\",\n root: \"\",\n rootDegree: 0,\n type: \"\",\n tonic: null,\n setNum: NaN,\n quality: \"Unknown\",\n chroma: \"\",\n normalized: \"\",\n aliases: [],\n notes: [],\n intervals: [],\n};\n\n// 6, 64, 7, 9, 11 and 13 are consider part of the chord\n// (see https://github.com/danigb/tonal/issues/55)\n//const NUM_TYPES = /^(6|64|7|9|11|13)$/;\n/**\n * Tokenize a chord name. It returns an array with the tonic and chord type\n * If not tonic is found, all the name is considered the chord name.\n *\n * This function does NOT check if the chord type exists or not. It only tries\n * to split the tonic and chord type.\n *\n * @function\n * @param {string} name - the chord name\n * @return {Array} an array with [tonic, type]\n * @example\n * tokenize(\"Cmaj7\") // => [ \"C\", \"maj7\" ]\n * tokenize(\"C7\") // => [ \"C\", \"7\" ]\n * tokenize(\"mMaj7\") // => [ null, \"mMaj7\" ]\n * tokenize(\"Cnonsense\") // => [ null, \"nonsense\" ]\n */\nexport function tokenize(name: string): ChordNameTokens {\n const [letter, acc, oct, type] = tokenizeNote(name);\n if (letter === \"\") {\n return [\"\", name];\n }\n // aug is augmented (see https://github.com/danigb/tonal/issues/55)\n if (letter === \"A\" && type === \"ug\") {\n return [\"\", \"aug\"];\n }\n return [letter + acc, oct + type];\n}\n\n/**\n * Get a Chord from a chord name.\n */\nexport function get(src: ChordName | ChordNameTokens): Chord {\n if (src === \"\") {\n return NoChord;\n }\n if (Array.isArray(src) && src.length === 2) {\n return getChord(src[1], src[0]);\n } else {\n const [tonic, type] = tokenize(src);\n const chord = getChord(type, tonic);\n return chord.empty ? getChord(src) : chord;\n }\n}\n\n/**\n * Get chord properties\n *\n * @param typeName - the chord type name\n * @param [tonic] - Optional tonic\n * @param [root] - Optional root (requires a tonic)\n */\nexport function getChord(\n typeName: string,\n optionalTonic?: string,\n optionalRoot?: string,\n): Chord {\n const type = getChordType(typeName);\n const tonic = note(optionalTonic || \"\");\n const root = note(optionalRoot || \"\");\n\n if (\n type.empty ||\n (optionalTonic && tonic.empty) ||\n (optionalRoot && root.empty)\n ) {\n return NoChord;\n }\n\n const rootInterval = distance(tonic.pc, root.pc);\n const rootDegree = type.intervals.indexOf(rootInterval) + 1;\n if (!root.empty && !rootDegree) {\n return NoChord;\n }\n\n const intervals = Array.from(type.intervals);\n\n for (let i = 1; i < rootDegree; i++) {\n const num = intervals[0][0];\n const quality = intervals[0][1];\n const newNum = parseInt(num, 10) + 7;\n intervals.push(`${newNum}${quality}`);\n intervals.shift();\n }\n\n const notes = tonic.empty\n ? []\n : intervals.map((i) => transposeNote(tonic, i));\n\n typeName = type.aliases.indexOf(typeName) !== -1 ? typeName : type.aliases[0];\n const symbol = `${tonic.empty ? \"\" : tonic.pc}${typeName}${\n root.empty || rootDegree <= 1 ? \"\" : \"/\" + root.pc\n }`;\n const name = `${optionalTonic ? tonic.pc + \" \" : \"\"}${type.name}${\n rootDegree > 1 && optionalRoot ? \" over \" + root.pc : \"\"\n }`;\n return {\n ...type,\n name,\n symbol,\n type: type.name,\n root: root.name,\n intervals,\n rootDegree,\n tonic: tonic.name,\n notes,\n };\n}\n\nexport const chord = deprecate(\"Chord.chord\", \"Chord.get\", get);\n\n/**\n * Transpose a chord name\n *\n * @param {string} chordName - the chord name\n * @return {string} the transposed chord\n *\n * @example\n * transpose('Dm7', 'P4') // => 'Gm7\n */\nexport function transpose(chordName: string, interval: string): string {\n const [tonic, type] = tokenize(chordName);\n if (!tonic) {\n return chordName;\n }\n return transposeNote(tonic, interval) + type;\n}\n\n/**\n * Get all scales where the given chord fits\n *\n * @example\n * chordScales('C7b9')\n * // => [\"phrygian dominant\", \"flamenco\", \"spanish heptatonic\", \"half-whole diminished\", \"chromatic\"]\n */\nexport function chordScales(name: string): string[] {\n const s = get(name);\n const isChordIncluded = isSupersetOf(s.chroma);\n return scaleTypes()\n .filter((scale) => isChordIncluded(scale.chroma))\n .map((scale) => scale.name);\n}\n/**\n * Get all chords names that are a superset of the given one\n * (has the same notes and at least one more)\n *\n * @function\n * @example\n * extended(\"CMaj7\")\n * // => [ 'Cmaj#4', 'Cmaj7#9#11', 'Cmaj9', 'CM7add13', 'Cmaj13', 'Cmaj9#11', 'CM13#11', 'CM7b9' ]\n */\nexport function extended(chordName: string): string[] {\n const s = get(chordName);\n const isSuperset = isSupersetOf(s.chroma);\n return chordTypes()\n .filter((chord) => isSuperset(chord.chroma))\n .map((chord) => s.tonic + chord.aliases[0]);\n}\n\n/**\n * Find all chords names that are a subset of the given one\n * (has less notes but all from the given chord)\n *\n * @example\n */\nexport function reduced(chordName: string): string[] {\n const s = get(chordName);\n const isSubset = isSubsetOf(s.chroma);\n return chordTypes()\n .filter((chord) => isSubset(chord.chroma))\n .map((chord) => s.tonic + chord.aliases[0]);\n}\n\n/**\n * Returns a function to get a note name from the scale degree.\n *\n * @example\n * [1, 2, 3, 4].map(Chord.degrees(\"C\")) => [\"C\", \"E\", \"G\", \"C\"]\n * [1, 2, 3, 4].map(Chord.degrees(\"C4\")) => [\"C4\", \"E4\", \"G4\", \"C5\"]\n */\nexport function degrees(chordName: string | ChordNameTokens) {\n const { intervals, tonic } = get(chordName);\n const transpose = tonicIntervalsTransposer(intervals, tonic);\n return (degree: number) =>\n degree ? transpose(degree > 0 ? degree - 1 : degree) : \"\";\n}\n\n/**\n * Sames as `degree` but with 0-based index\n */\nexport function steps(chordName: string | ChordNameTokens) {\n const { intervals, tonic } = get(chordName);\n return tonicIntervalsTransposer(intervals, tonic);\n}\n\nexport default {\n getChord,\n get,\n detect,\n chordScales,\n extended,\n reduced,\n tokenize,\n transpose,\n degrees,\n steps,\n\n // deprecate\n chord,\n};\n", "// source: https://en.wikipedia.org/wiki/Note_value\nconst DATA: [number, string, string[]][] = [\n [\n 0.125,\n \"dl\",\n [\"large\", \"duplex longa\", \"maxima\", \"octuple\", \"octuple whole\"],\n ],\n [0.25, \"l\", [\"long\", \"longa\"]],\n [0.5, \"d\", [\"double whole\", \"double\", \"breve\"]],\n [1, \"w\", [\"whole\", \"semibreve\"]],\n [2, \"h\", [\"half\", \"minim\"]],\n [4, \"q\", [\"quarter\", \"crotchet\"]],\n [8, \"e\", [\"eighth\", \"quaver\"]],\n [16, \"s\", [\"sixteenth\", \"semiquaver\"]],\n [32, \"t\", [\"thirty-second\", \"demisemiquaver\"]],\n [64, \"sf\", [\"sixty-fourth\", \"hemidemisemiquaver\"]],\n [128, \"h\", [\"hundred twenty-eighth\"]],\n [256, \"th\", [\"two hundred fifty-sixth\"]],\n];\n\nexport default DATA;\n", "import DATA from \"./data\";\n\ntype Fraction = [number, number];\n\nconst VALUES: DurationValue[] = [];\n\nDATA.forEach(([denominator, shorthand, names]) =>\n add(denominator, shorthand, names),\n);\n\nexport interface DurationValue {\n empty: boolean;\n value: number;\n name: string;\n fraction: Fraction;\n shorthand: string;\n dots: string;\n names: string[];\n}\n\nconst NoDuration: DurationValue = {\n empty: true,\n name: \"\",\n value: 0,\n fraction: [0, 0],\n shorthand: \"\",\n dots: \"\",\n names: [],\n};\n\nexport function names(): string[] {\n return VALUES.reduce((names, duration) => {\n duration.names.forEach((name) => names.push(name));\n return names;\n }, [] as string[]);\n}\n\nexport function shorthands(): string[] {\n return VALUES.map((dur) => dur.shorthand);\n}\n\nconst REGEX = /^([^.]+)(\\.*)$/;\n\nexport function get(name: string): DurationValue {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, simple, dots] = REGEX.exec(name) || [];\n const base = VALUES.find(\n (dur) => dur.shorthand === simple || dur.names.includes(simple),\n );\n if (!base) {\n return NoDuration;\n }\n\n const fraction = calcDots(base.fraction, dots.length);\n const value = fraction[0] / fraction[1];\n\n return { ...base, name, dots, value, fraction };\n}\n\nexport const value = (name: string) => get(name).value;\nexport const fraction = (name: string) => get(name).fraction;\n\nexport default { names, shorthands, get, value, fraction };\n\n//// PRIVATE ////\n\nfunction add(denominator: number, shorthand: string, names: string[]) {\n VALUES.push({\n empty: false,\n dots: \"\",\n name: \"\",\n value: 1 / denominator,\n fraction: denominator < 1 ? [1 / denominator, 1] : [1, denominator],\n shorthand,\n names,\n });\n}\n\nfunction calcDots(fraction: Fraction, dots: number): Fraction {\n const pow = Math.pow(2, dots);\n\n let numerator = fraction[0] * pow;\n let denominator = fraction[1] * pow;\n const base = numerator;\n\n // add fractions\n for (let i = 0; i < dots; i++) {\n numerator += base / Math.pow(2, i + 1);\n }\n\n // simplify\n while (numerator % 2 === 0 && denominator % 2 === 0) {\n numerator /= 2;\n denominator /= 2;\n }\n return [numerator, denominator];\n}\n", "import {\n IntervalCoordinates,\n IntervalName,\n NoteCoordinates,\n coordToInterval,\n distance as dist,\n interval as props,\n} from \"@tonaljs/core\";\n\n/**\n * Get the natural list of names\n */\nexport function names(): IntervalName[] {\n return \"1P 2M 3M 4P 5P 6m 7m\".split(\" \");\n}\n\n/**\n * Get properties of an interval\n *\n * @function\n * @example\n * Interval.get('P4') // => {\"alt\": 0, \"dir\": 1, \"name\": \"4P\", \"num\": 4, \"oct\": 0, \"q\": \"P\", \"semitones\": 5, \"simple\": 4, \"step\": 3, \"type\": \"perfectable\"}\n */\nexport const get = props;\n\n/**\n * Get name of an interval\n *\n * @function\n * @example\n * Interval.name('4P') // => \"4P\"\n * Interval.name('P4') // => \"4P\"\n * Interval.name('C4') // => \"\"\n */\nexport const name = (name: string) => props(name).name;\n\n/**\n * Get semitones of an interval\n * @function\n * @example\n * Interval.semitones('P4') // => 5\n */\nexport const semitones = (name: string) => props(name).semitones;\n\n/**\n * Get quality of an interval\n * @function\n * @example\n * Interval.quality('P4') // => \"P\"\n */\nexport const quality = (name: string) => props(name).q;\n\n/**\n * Get number of an interval\n * @function\n * @example\n * Interval.num('P4') // => 4\n */\nexport const num = (name: string) => props(name).num;\n\n/**\n * Get the simplified version of an interval.\n *\n * @function\n * @param {string} interval - the interval to simplify\n * @return {string} the simplified interval\n *\n * @example\n * Interval.simplify(\"9M\") // => \"2M\"\n * Interval.simplify(\"2M\") // => \"2M\"\n * Interval.simplify(\"-2M\") // => \"7m\"\n * [\"8P\", \"9M\", \"10M\", \"11P\", \"12P\", \"13M\", \"14M\", \"15P\"].map(Interval.simplify)\n * // => [ \"8P\", \"2M\", \"3M\", \"4P\", \"5P\", \"6M\", \"7M\", \"8P\" ]\n */\nexport function simplify(name: IntervalName): IntervalName {\n const i = props(name);\n return i.empty ? \"\" : i.simple + i.q;\n}\n\n/**\n * Get the inversion (https://en.wikipedia.org/wiki/Inversion_(music)#Intervals)\n * of an interval.\n *\n * @function\n * @param {string} interval - the interval to invert in interval shorthand\n * notation or interval array notation\n * @return {string} the inverted interval\n *\n * @example\n * Interval.invert(\"3m\") // => \"6M\"\n * Interval.invert(\"2M\") // => \"7m\"\n */\nexport function invert(name: IntervalName): IntervalName {\n const i = props(name);\n if (i.empty) {\n return \"\";\n }\n const step = (7 - i.step) % 7;\n const alt = i.type === \"perfectable\" ? -i.alt : -(i.alt + 1);\n return props({ step, alt, oct: i.oct, dir: i.dir }).name;\n}\n\n// interval numbers\nconst IN = [1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7];\n// interval qualities\nconst IQ = \"P m M m M P d P m M m M\".split(\" \");\n\n/**\n * Get interval name from semitones number. Since there are several interval\n * names for the same number, the name it's arbitrary, but deterministic.\n *\n * @param {Integer} num - the number of semitones (can be negative)\n * @return {string} the interval name\n * @example\n * Interval.fromSemitones(7) // => \"5P\"\n * Interval.fromSemitones(-7) // => \"-5P\"\n */\nexport function fromSemitones(semitones: number): IntervalName {\n const d = semitones < 0 ? -1 : 1;\n const n = Math.abs(semitones);\n const c = n % 12;\n const o = Math.floor(n / 12);\n return d * (IN[c] + 7 * o) + IQ[c];\n}\n\n/**\n * Find interval between two notes\n *\n * @example\n * Interval.distance(\"C4\", \"G4\"); // => \"5P\"\n */\nexport const distance = dist;\n\n/**\n * Adds two intervals\n *\n * @function\n * @param {string} interval1\n * @param {string} interval2\n * @return {string} the added interval name\n * @example\n * Interval.add(\"3m\", \"5P\") // => \"7m\"\n */\nexport const add = combinator((a, b) => [a[0] + b[0], a[1] + b[1]]);\n\n/**\n * Returns a function that adds an interval\n *\n * @function\n * @example\n * ['1P', '2M', '3M'].map(Interval.addTo('5P')) // => [\"5P\", \"6M\", \"7M\"]\n */\nexport const addTo = (interval: string) => (other: string) =>\n add(interval, other);\n\n/**\n * Subtracts two intervals\n *\n * @function\n * @param {string} minuendInterval\n * @param {string} subtrahendInterval\n * @return {string} the substracted interval name\n * @example\n * Interval.substract('5P', '3M') // => '3m'\n * Interval.substract('3M', '5P') // => '-3m'\n */\nexport const substract = combinator((a, b) => [a[0] - b[0], a[1] - b[1]]);\n\nexport function transposeFifths(\n interval: IntervalName,\n fifths: number,\n): IntervalName {\n const ivl = get(interval);\n if (ivl.empty) return \"\";\n\n const [nFifths, nOcts, dir] = ivl.coord;\n return coordToInterval([nFifths + fifths, nOcts, dir]).name;\n}\n\nexport default {\n names,\n get,\n name,\n num,\n semitones,\n quality,\n fromSemitones,\n distance,\n invert,\n simplify,\n add,\n addTo,\n substract,\n transposeFifths,\n};\n\n//// PRIVATE ////\n\ntype Operation = (\n a: IntervalCoordinates,\n b: IntervalCoordinates,\n) => NoteCoordinates;\n\nfunction combinator(fn: Operation) {\n return (a: IntervalName, b: IntervalName): IntervalName | undefined => {\n const coordA = props(a).coord;\n const coordB = props(b).coord;\n if (coordA && coordB) {\n const coord = fn(coordA, coordB);\n return coordToInterval(coord).name;\n }\n };\n}\n", "import { NoteName, note as props } from \"@tonaljs/core\";\n\ntype Midi = number;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isMidi(arg: any): arg is Midi {\n return +arg >= 0 && +arg <= 127;\n}\n\n/**\n * Get the note midi number (a number between 0 and 127)\n *\n * It returns undefined if not valid note name\n *\n * @function\n * @param {string|number} note - the note name or midi number\n * @return {Integer} the midi number or undefined if not valid note\n * @example\n * import { toMidi } from '@tonaljs/midi'\n * toMidi(\"C4\") // => 60\n * toMidi(60) // => 60\n * toMidi('60') // => 60\n */\nexport function toMidi(note: NoteName | number): number | null {\n if (isMidi(note)) {\n return +note;\n }\n const n = props(note);\n return n.empty ? null : n.midi;\n}\n\n/**\n * Get the frequency in hertzs from midi number\n *\n * @param {number} midi - the note midi number\n * @param {number} [tuning = 440] - A4 tuning frequency in Hz (440 by default)\n * @return {number} the frequency or null if not valid note midi\n * @example\n * import { midiToFreq} from '@tonaljs/midi'\n * midiToFreq(69) // => 440\n */\nexport function midiToFreq(midi: number, tuning = 440): number {\n return Math.pow(2, (midi - 69) / 12) * tuning;\n}\n\nconst L2 = Math.log(2);\nconst L440 = Math.log(440);\n\n/**\n * Get the midi number from a frequency in hertz. The midi number can\n * contain decimals (with two digits precision)\n *\n * @param {number} frequency\n * @return {number}\n * @example\n * import { freqToMidi} from '@tonaljs/midi'\n * freqToMidi(220)); //=> 57\n * freqToMidi(261.62)); //=> 60\n * freqToMidi(261)); //=> 59.96\n */\nexport function freqToMidi(freq: number): number {\n const v = (12 * (Math.log(freq) - L440)) / L2 + 69;\n return Math.round(v * 100) / 100;\n}\n\nexport interface ToNoteNameOptions {\n pitchClass?: boolean;\n sharps?: boolean;\n}\n\nconst SHARPS = \"C C# D D# E F F# G G# A A# B\".split(\" \");\nconst FLATS = \"C Db D Eb E F Gb G Ab A Bb B\".split(\" \");\n/**\n * Given a midi number, returns a note name. The altered notes will have\n * flats unless explicitly set with the optional `useSharps` parameter.\n *\n * @function\n * @param {number} midi - the midi note number\n * @param {Object} options = default: `{ sharps: false, pitchClass: false }`\n * @param {boolean} useSharps - (Optional) set to true to use sharps instead of flats\n * @return {string} the note name\n * @example\n * import { midiToNoteName } from '@tonaljs/midi'\n * midiToNoteName(61) // => \"Db4\"\n * midiToNoteName(61, { pitchClass: true }) // => \"Db\"\n * midiToNoteName(61, { sharps: true }) // => \"C#4\"\n * midiToNoteName(61, { pitchClass: true, sharps: true }) // => \"C#\"\n * // it rounds to nearest note\n * midiToNoteName(61.7) // => \"D4\"\n */\nexport function midiToNoteName(midi: number, options: ToNoteNameOptions = {}) {\n if (isNaN(midi) || midi === -Infinity || midi === Infinity) return \"\";\n midi = Math.round(midi);\n const pcs = options.sharps === true ? SHARPS : FLATS;\n const pc = pcs[midi % 12];\n if (options.pitchClass) {\n return pc;\n }\n const o = Math.floor(midi / 12) - 1;\n return pc + o;\n}\n\nexport function chroma(midi: number): number {\n return midi % 12;\n}\n\nfunction pcsetFromChroma(chroma: string): number[] {\n return chroma.split(\"\").reduce((pcset, val, index) => {\n if (index < 12 && val === \"1\") pcset.push(index);\n return pcset;\n }, [] as number[]);\n}\n\nfunction pcsetFromMidi(midi: number[]): number[] {\n return midi\n .map(chroma)\n .sort((a, b) => a - b)\n .filter((n, i, a) => i === 0 || n !== a[i - 1]);\n}\n\n/**\n * Given a list of midi numbers, returns the pitch class set (unique chroma numbers)\n * @param midi\n * @example\n *\n */\nexport function pcset(notes: number[] | string): number[] {\n return Array.isArray(notes) ? pcsetFromMidi(notes) : pcsetFromChroma(notes);\n}\n\nexport function pcsetNearest(notes: number[] | string) {\n const set = pcset(notes);\n return (midi: number): number | undefined => {\n const ch = chroma(midi);\n for (let i = 0; i < 12; i++) {\n if (set.includes(ch + i)) return midi + i;\n if (set.includes(ch - i)) return midi - i;\n }\n return undefined;\n };\n}\n\nexport function pcsetSteps(notes: number[] | string, tonic: number) {\n const set = pcset(notes);\n const len = set.length;\n return (step: number): number => {\n const index = step < 0 ? (len - (-step % len)) % len : step % len;\n const octaves = Math.floor(step / len);\n return set[index] + octaves * 12 + tonic;\n };\n}\n\nexport function pcsetDegrees(notes: number[] | string, tonic: number) {\n const steps = pcsetSteps(notes, tonic);\n return (degree: number): number | undefined => {\n if (degree === 0) return undefined;\n return steps(degree > 0 ? degree - 1 : degree);\n };\n}\n\nexport default {\n chroma,\n freqToMidi,\n isMidi,\n midiToFreq,\n midiToNoteName,\n pcsetNearest,\n pcset,\n pcsetDegrees,\n pcsetSteps,\n toMidi,\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n IntervalName,\n Note,\n NoteLiteral,\n NoteName,\n Pitch,\n transpose as _tr,\n note as props,\n} from \"@tonaljs/core\";\nimport { freqToMidi, midiToNoteName } from \"@tonaljs/midi\";\n\nconst NAMES = [\"C\", \"D\", \"E\", \"F\", \"G\", \"A\", \"B\"];\n\nconst toName = (n: Note) => n.name;\nconst onlyNotes = (array: any[]) =>\n array.map(props).filter((n) => !n.empty) as Note[];\n\n/**\n * Return the natural note names without octave\n * @function\n * @example\n * Note.names(); // => [\"C\", \"D\", \"E\", \"F\", \"G\", \"A\", \"B\"]\n */\nexport function names(array?: any[]): string[] {\n if (array === undefined) {\n return NAMES.slice();\n } else if (!Array.isArray(array)) {\n return [];\n } else {\n return onlyNotes(array).map(toName);\n }\n}\n\n/**\n * Get a note from a note name\n *\n * @function\n * @example\n * Note.get('Bb4') // => { name: \"Bb4\", midi: 70, chroma: 10, ... }\n */\nexport const get = props;\n\n/**\n * Get the note name\n * @function\n */\nexport const name = (note: NoteLiteral) => get(note).name;\n\n/**\n * Get the note pitch class name\n * @function\n */\nexport const pitchClass = (note: NoteLiteral) => get(note).pc;\n\n/**\n * Get the note accidentals\n * @function\n */\nexport const accidentals = (note: NoteLiteral) => get(note).acc;\n\n/**\n * Get the note octave\n * @function\n */\nexport const octave = (note: NoteLiteral) => get(note).oct;\n\n/**\n * Get the note midi\n * @function\n */\nexport const midi = (note: NoteLiteral) => get(note).midi;\n\n/**\n * Get the note midi\n * @function\n */\nexport const freq = (note: NoteLiteral) => get(note).freq;\n\n/**\n * Get the note chroma\n * @function\n */\nexport const chroma = (note: NoteLiteral) => get(note).chroma;\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n *\n * @function\n * @param {number} midi - the midi note number\n * @return {string} the note name\n * @example\n * Note.fromMidi(61) // => \"Db4\"\n * Note.fromMidi(61.7) // => \"D4\"\n */\nexport function fromMidi(midi: number) {\n return midiToNoteName(midi);\n}\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n */\nexport function fromFreq(freq: number) {\n return midiToNoteName(freqToMidi(freq));\n}\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n */\nexport function fromFreqSharps(freq: number) {\n return midiToNoteName(freqToMidi(freq), { sharps: true });\n}\n\n/**\n * Given a midi number, returns a note name. Uses flats for altered notes.\n *\n * @function\n * @param {number} midi - the midi note number\n * @return {string} the note name\n * @example\n * Note.fromMidiSharps(61) // => \"C#4\"\n */\n\nexport function fromMidiSharps(midi: number) {\n return midiToNoteName(midi, { sharps: true });\n}\n\n/**\n * Transpose a note by an interval\n */\nexport const transpose = _tr;\nexport const tr = _tr;\n\n/**\n * Transpose by an interval.\n * @function\n * @param {string} interval\n * @return {function} a function that transposes by the given interval\n * @example\n * [\"C\", \"D\", \"E\"].map(Note.transposeBy(\"5P\"));\n * // => [\"G\", \"A\", \"B\"]\n */\nexport const transposeBy = (interval: IntervalName) => (note: NoteName) =>\n transpose(note, interval);\nexport const trBy = transposeBy;\n\n/**\n * Transpose from a note\n * @function\n * @param {string} note\n * @return {function} a function that transposes the the note by an interval\n * [\"1P\", \"3M\", \"5P\"].map(Note.transposeFrom(\"C\"));\n * // => [\"C\", \"E\", \"G\"]\n */\nexport const transposeFrom = (note: NoteName) => (interval: IntervalName) =>\n transpose(note, interval);\nexport const trFrom = transposeFrom;\n\n/**\n * Transpose a note by a number of perfect fifths.\n *\n * @function\n * @param {string} note - the note name\n * @param {number} fifhts - the number of fifths\n * @return {string} the transposed note name\n *\n * @example\n * import { transposeFifths } from \"@tonaljs/note\"\n * transposeFifths(\"G4\", 1) // => \"D\"\n * [0, 1, 2, 3, 4].map(fifths => transposeFifths(\"C\", fifths)) // => [\"C\", \"G\", \"D\", \"A\", \"E\"]\n */\nexport function transposeFifths(noteName: NoteName, fifths: number): NoteName {\n return transpose(noteName, [fifths, 0]);\n}\nexport const trFifths = transposeFifths;\n\n// TODO: documentation\nexport function transposeOctaves(\n noteName: NoteName,\n octaves: number,\n): NoteName {\n return transpose(noteName, [0, octaves]);\n}\n\nexport type NoteComparator = (a: Note, b: Note) => number;\n\nexport const ascending: NoteComparator = (a, b) => a.height - b.height;\nexport const descending: NoteComparator = (a, b) => b.height - a.height;\n\nexport function sortedNames(\n notes: any[],\n comparator?: NoteComparator,\n): string[] {\n comparator = comparator || ascending;\n return onlyNotes(notes).sort(comparator).map(toName);\n}\n\nexport function sortedUniqNames(notes: any[]): string[] {\n return sortedNames(notes, ascending).filter(\n (n, i, a) => i === 0 || n !== a[i - 1],\n );\n}\n\n/**\n * Simplify a note\n *\n * @function\n * @param {string} note - the note to be simplified\n * - sameAccType: default true. Use same kind of accidentals that source\n * @return {string} the simplified note or '' if not valid note\n * @example\n * simplify(\"C##\") // => \"D\"\n * simplify(\"C###\") // => \"D#\"\n * simplify(\"C###\")\n * simplify(\"B#4\") // => \"C5\"\n */\nexport const simplify = (noteName: NoteName | Pitch): string => {\n const note = get(noteName);\n if (note.empty) {\n return \"\";\n }\n return midiToNoteName(note.midi || note.chroma, {\n sharps: note.alt > 0,\n pitchClass: note.midi === null,\n });\n};\n/**\n * Get enharmonic of a note\n *\n * @function\n * @param {string} note\n * @param [string] - [optional] Destination pitch class\n * @return {string} the enharmonic note name or '' if not valid note\n * @example\n * Note.enharmonic(\"Db\") // => \"C#\"\n * Note.enharmonic(\"C\") // => \"C\"\n * Note.enharmonic(\"F2\",\"E#\") // => \"E#2\"\n */\nexport function enharmonic(noteName: string, destName?: string) {\n const src = get(noteName);\n if (src.empty) {\n return \"\";\n }\n\n // destination: use given or generate one\n const dest = get(\n destName ||\n midiToNoteName(src.midi || src.chroma, {\n sharps: src.alt < 0,\n pitchClass: true,\n }),\n );\n\n // ensure destination is valid\n if (dest.empty || dest.chroma !== src.chroma) {\n return \"\";\n }\n\n // if src has no octave, no need to calculate anything else\n if (src.oct === undefined) {\n return dest.pc;\n }\n\n // detect any octave overflow\n const srcChroma = src.chroma - src.alt;\n const destChroma = dest.chroma - dest.alt;\n const destOctOffset =\n srcChroma > 11 || destChroma < 0\n ? -1\n : srcChroma < 0 || destChroma > 11\n ? +1\n : 0;\n // calculate the new octave\n const destOct = src.oct + destOctOffset;\n return dest.pc + destOct;\n}\n\nexport default {\n names,\n get,\n name,\n pitchClass,\n accidentals,\n octave,\n midi,\n ascending,\n descending,\n sortedNames,\n sortedUniqNames,\n fromMidi,\n fromMidiSharps,\n freq,\n fromFreq,\n fromFreqSharps,\n chroma,\n transpose,\n tr,\n transposeBy,\n trBy,\n transposeFrom,\n trFrom,\n transposeFifths,\n transposeOctaves,\n trFifths,\n simplify,\n enharmonic,\n};\n", "import {\n accToAlt,\n altToAcc,\n deprecate,\n interval,\n isNamed,\n isPitch,\n Pitch,\n} from \"@tonaljs/core\";\n\nexport interface RomanNumeral extends Pitch {\n readonly name: string;\n readonly empty: boolean;\n readonly roman: string;\n readonly interval: string;\n readonly acc: string;\n readonly chordType: string;\n readonly major: boolean;\n readonly dir: 1;\n}\n\nexport interface NoRomanNumeral extends Partial {\n readonly empty: true;\n readonly name: \"\";\n readonly chordType: \"\";\n}\nconst NoRomanNumeral: NoRomanNumeral = { empty: true, name: \"\", chordType: \"\" };\n\nconst cache: Record = {};\n\n/**\n * Get properties of a roman numeral string\n *\n * @function\n * @param {string} - the roman numeral string (can have type, like: Imaj7)\n * @return {Object} - the roman numeral properties\n * @param {string} name - the roman numeral (tonic)\n * @param {string} type - the chord type\n * @param {string} num - the number (1 = I, 2 = II...)\n * @param {boolean} major - major or not\n *\n * @example\n * romanNumeral(\"VIIb5\") // => { name: \"VII\", type: \"b5\", num: 7, major: true }\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function get(src: any): RomanNumeral | NoRomanNumeral {\n return typeof src === \"string\"\n ? cache[src] || (cache[src] = parse(src))\n : typeof src === \"number\"\n ? get(NAMES[src] || \"\")\n : isPitch(src)\n ? fromPitch(src)\n : isNamed(src)\n ? get(src.name)\n : NoRomanNumeral;\n}\n\nconst romanNumeral = deprecate(\n \"RomanNumeral.romanNumeral\",\n \"RomanNumeral.get\",\n get,\n);\n\n/**\n * Get roman numeral names\n *\n * @function\n * @param {boolean} [isMajor=true]\n * @return {Array}\n *\n * @example\n * names() // => [\"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\"]\n */\nexport function names(major = true) {\n return (major ? NAMES : NAMES_MINOR).slice();\n}\n\nfunction fromPitch(pitch: Pitch): RomanNumeral | NoRomanNumeral {\n return get(altToAcc(pitch.alt) + NAMES[pitch.step]);\n}\n\nconst REGEX =\n /^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;\n\n// [name, accidentals, romanNumeral, chordType]\ntype RomanNumeralTokens = [string, string, string, string];\nexport function tokenize(str: string): RomanNumeralTokens {\n return (REGEX.exec(str) || [\"\", \"\", \"\", \"\"]) as RomanNumeralTokens;\n}\n\nconst ROMANS = \"I II III IV V VI VII\";\nconst NAMES = ROMANS.split(\" \");\nconst NAMES_MINOR = ROMANS.toLowerCase().split(\" \");\n\nfunction parse(src: string): RomanNumeral | NoRomanNumeral {\n const [name, acc, roman, chordType] = tokenize(src);\n if (!roman) {\n return NoRomanNumeral;\n }\n\n const upperRoman = roman.toUpperCase();\n const step = NAMES.indexOf(upperRoman);\n const alt = accToAlt(acc);\n const dir = 1;\n return {\n empty: false,\n name,\n roman,\n interval: interval({ step, alt, dir }).name,\n acc,\n chordType,\n alt,\n step,\n major: roman === upperRoman,\n oct: 0,\n dir,\n };\n}\n\nexport default {\n names,\n get,\n // deprecated\n romanNumeral,\n};\n", "import { accToAlt, altToAcc, note, transpose } from \"@tonaljs/core\";\nimport { transposeFifths } from \"@tonaljs/note\";\nimport { get as roman } from \"@tonaljs/roman-numeral\";\n\nconst Empty: readonly string[] = Object.freeze([] as string[]);\n\nexport interface Key {\n readonly type: \"major\" | \"minor\";\n readonly tonic: string;\n readonly alteration: number;\n readonly keySignature: string;\n}\n\nconst NoKey: Key = {\n type: \"major\",\n tonic: \"\",\n alteration: 0,\n keySignature: \"\",\n};\n\nexport interface KeyScale {\n readonly tonic: string;\n readonly grades: readonly string[];\n readonly intervals: readonly string[];\n readonly scale: readonly string[];\n readonly triads: readonly string[];\n readonly chords: readonly string[];\n readonly chordsHarmonicFunction: readonly string[];\n readonly chordScales: readonly string[];\n}\n\nconst NoKeyScale: KeyScale = {\n tonic: \"\",\n grades: Empty,\n intervals: Empty,\n scale: Empty,\n triads: Empty,\n chords: Empty,\n chordsHarmonicFunction: Empty,\n chordScales: Empty,\n};\n\nexport interface MajorKey extends Key, KeyScale {\n readonly type: \"major\";\n readonly minorRelative: string;\n readonly scale: readonly string[];\n readonly secondaryDominants: readonly string[];\n readonly secondaryDominantsMinorRelative: readonly string[];\n readonly substituteDominants: readonly string[];\n readonly substituteDominantsMinorRelative: readonly string[];\n}\n\nconst NoMajorKey: MajorKey = {\n ...NoKey,\n ...NoKeyScale,\n type: \"major\",\n minorRelative: \"\",\n scale: Empty,\n secondaryDominants: Empty,\n secondaryDominantsMinorRelative: Empty,\n substituteDominants: Empty,\n substituteDominantsMinorRelative: Empty,\n};\n\nexport interface MinorKey extends Key {\n readonly type: \"minor\";\n readonly relativeMajor: string;\n readonly natural: KeyScale;\n readonly harmonic: KeyScale;\n readonly melodic: KeyScale;\n}\n\nconst NoMinorKey: MinorKey = {\n ...NoKey,\n type: \"minor\",\n relativeMajor: \"\",\n natural: NoKeyScale,\n harmonic: NoKeyScale,\n melodic: NoKeyScale,\n};\n\nconst mapScaleToType = (scale: string[], list: string[], sep = \"\") =>\n list.map((type, i) => `${scale[i]}${sep}${type}`);\n\nfunction keyScale(\n grades: string[],\n triads: string[],\n chords: string[],\n harmonicFunctions: string[],\n chordScales: string[],\n) {\n return (tonic: string): KeyScale => {\n const intervals = grades.map((gr) => roman(gr).interval || \"\");\n const scale = intervals.map((interval) => transpose(tonic, interval));\n\n return {\n tonic,\n grades,\n intervals,\n scale,\n triads: mapScaleToType(scale, triads),\n chords: mapScaleToType(scale, chords),\n chordsHarmonicFunction: harmonicFunctions.slice(),\n chordScales: mapScaleToType(scale, chordScales, \" \"),\n };\n };\n}\n\nconst distInFifths = (from: string, to: string) => {\n const f = note(from);\n const t = note(to);\n return f.empty || t.empty ? 0 : t.coord[0] - f.coord[0];\n};\n\nconst MajorScale = keyScale(\n \"I II III IV V VI VII\".split(\" \"),\n \" m m m dim\".split(\" \"),\n \"maj7 m7 m7 maj7 7 m7 m7b5\".split(\" \"),\n \"T SD T SD D T D\".split(\" \"),\n \"major,dorian,phrygian,lydian,mixolydian,minor,locrian\".split(\",\"),\n);\nconst NaturalScale = keyScale(\n \"I II bIII IV V bVI bVII\".split(\" \"),\n \"m dim m m \".split(\" \"),\n \"m7 m7b5 maj7 m7 m7 maj7 7\".split(\" \"),\n \"T SD T SD D SD SD\".split(\" \"),\n \"minor,locrian,major,dorian,phrygian,lydian,mixolydian\".split(\",\"),\n);\nconst HarmonicScale = keyScale(\n \"I II bIII IV V bVI VII\".split(\" \"),\n \"m dim aug m dim\".split(\" \"),\n \"mMaj7 m7b5 +maj7 m7 7 maj7 o7\".split(\" \"),\n \"T SD T SD D SD D\".split(\" \"),\n \"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian\".split(\n \",\",\n ),\n);\nconst MelodicScale = keyScale(\n \"I II bIII IV V VI VII\".split(\" \"),\n \"m m aug dim dim\".split(\" \"),\n \"m6 m7 +maj7 7 7 m7b5 m7b5\".split(\" \"),\n \"T SD T SD D \".split(\" \"),\n \"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered\".split(\n \",\",\n ),\n);\n\n/**\n * Get a major key properties in a given tonic\n * @param tonic\n */\nexport function majorKey(tonic: string): MajorKey {\n const pc = note(tonic).pc;\n if (!pc) return NoMajorKey;\n\n const keyScale = MajorScale(pc);\n const alteration = distInFifths(\"C\", pc);\n const romanInTonic = (src: string) => {\n const r = roman(src);\n if (r.empty) return \"\";\n\n return transpose(tonic, r.interval) + r.chordType;\n };\n\n return {\n ...keyScale,\n type: \"major\",\n minorRelative: transpose(pc, \"-3m\"),\n alteration,\n keySignature: altToAcc(alteration),\n secondaryDominants: \"- VI7 VII7 I7 II7 III7 -\".split(\" \").map(romanInTonic),\n secondaryDominantsMinorRelative: \"- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -\"\n .split(\" \")\n .map(romanInTonic),\n substituteDominants: \"- bIII7 IV7 bV7 bVI7 bVII7 -\"\n .split(\" \")\n .map(romanInTonic),\n substituteDominantsMinorRelative: \"- IIIm7 Im7 IIbm7 VIm7 IVm7 -\"\n .split(\" \")\n .map(romanInTonic),\n };\n}\n\n/**\n * Get minor key properties in a given tonic\n * @param tonic\n */\nexport function minorKey(tnc: string): MinorKey {\n const pc = note(tnc).pc;\n if (!pc) return NoMinorKey;\n\n const alteration = distInFifths(\"C\", pc) - 3;\n return {\n type: \"minor\",\n tonic: pc,\n relativeMajor: transpose(pc, \"3m\"),\n alteration,\n keySignature: altToAcc(alteration),\n natural: NaturalScale(pc),\n harmonic: HarmonicScale(pc),\n melodic: MelodicScale(pc),\n };\n}\n\n/**\n * Given a key signature, returns the tonic of the major key\n * @param sigature\n * @example\n * majorTonicFromKeySignature('###') // => 'A'\n */\nexport function majorTonicFromKeySignature(\n sig: string | number,\n): string | null {\n if (typeof sig === \"number\") {\n return transposeFifths(\"C\", sig);\n } else if (typeof sig === \"string\" && /^b+|#+$/.test(sig)) {\n return transposeFifths(\"C\", accToAlt(sig));\n }\n return null;\n}\n\nexport default { majorKey, majorTonicFromKeySignature, minorKey };\n", "import { rotate } from \"@tonaljs/collection\";\nimport { deprecate, NamedPitch, NoteName, transpose } from \"@tonaljs/core\";\nimport { simplify, transposeFifths } from \"@tonaljs/interval\";\nimport { EmptyPcset, Pcset } from \"@tonaljs/pcset\";\nimport { get as getType } from \"@tonaljs/scale-type\";\n\nconst MODES = [\n [0, 2773, 0, \"ionian\", \"\", \"Maj7\", \"major\"],\n [1, 2902, 2, \"dorian\", \"m\", \"m7\"],\n [2, 3418, 4, \"phrygian\", \"m\", \"m7\"],\n [3, 2741, -1, \"lydian\", \"\", \"Maj7\"],\n [4, 2774, 1, \"mixolydian\", \"\", \"7\"],\n [5, 2906, 3, \"aeolian\", \"m\", \"m7\", \"minor\"],\n [6, 3434, 5, \"locrian\", \"dim\", \"m7b5\"],\n] as const;\n\ntype ModeDatum = (typeof MODES)[number];\n\nexport interface Mode extends Pcset {\n readonly name: string;\n readonly modeNum: number;\n readonly alt: number; // number of alterations === number of fiths\n readonly triad: string;\n readonly seventh: string;\n readonly aliases: string[];\n}\n\nconst NoMode: Mode = {\n ...EmptyPcset,\n name: \"\",\n alt: 0,\n modeNum: NaN,\n triad: \"\",\n seventh: \"\",\n aliases: [],\n};\n\nconst modes: Mode[] = MODES.map(toMode);\nconst index: Record = {};\nmodes.forEach((mode) => {\n index[mode.name] = mode;\n mode.aliases.forEach((alias) => {\n index[alias] = mode;\n });\n});\n\ntype ModeLiteral = string | NamedPitch;\n\n/**\n * Get a Mode by it's name\n *\n * @example\n * get('dorian')\n * // =>\n * // {\n * // intervals: [ '1P', '2M', '3m', '4P', '5P', '6M', '7m' ],\n * // modeNum: 1,\n * // chroma: '101101010110',\n * // normalized: '101101010110',\n * // name: 'dorian',\n * // setNum: 2902,\n * // alt: 2,\n * // triad: 'm',\n * // seventh: 'm7',\n * // aliases: []\n * // }\n */\nexport function get(name: ModeLiteral): Mode {\n return typeof name === \"string\"\n ? index[name.toLowerCase()] || NoMode\n : name && name.name\n ? get(name.name)\n : NoMode;\n}\n\nexport const mode = deprecate(\"Mode.mode\", \"Mode.get\", get);\n\n/**\n * Get a list of all modes\n */\nexport function all() {\n return modes.slice();\n}\nexport const entries = deprecate(\"Mode.mode\", \"Mode.all\", all);\n\n/**\n * Get a list of all mode names\n */\nexport function names() {\n return modes.map((mode) => mode.name);\n}\n\nfunction toMode(mode: ModeDatum): Mode {\n const [modeNum, setNum, alt, name, triad, seventh, alias] = mode;\n const aliases = alias ? [alias] : [];\n const chroma = Number(setNum).toString(2);\n const intervals = getType(name).intervals;\n return {\n empty: false,\n intervals,\n modeNum,\n chroma,\n normalized: chroma,\n name,\n setNum,\n alt,\n triad,\n seventh,\n aliases,\n };\n}\n\nexport function notes(modeName: ModeLiteral, tonic: NoteName) {\n return get(modeName).intervals.map((ivl) => transpose(tonic, ivl));\n}\n\nfunction chords(chords: string[]) {\n return (modeName: ModeLiteral, tonic: NoteName) => {\n const mode = get(modeName);\n if (mode.empty) return [];\n const triads = rotate(mode.modeNum, chords);\n const tonics = mode.intervals.map((i) => transpose(tonic, i));\n return triads.map((triad, i) => tonics[i] + triad);\n };\n}\n\nexport const triads = chords(MODES.map((x) => x[4]));\nexport const seventhChords = chords(MODES.map((x) => x[5]));\n\nexport function distance(destination: ModeLiteral, source: ModeLiteral) {\n const from = get(source);\n const to = get(destination);\n if (from.empty || to.empty) return \"\";\n return simplify(transposeFifths(\"1P\", to.alt - from.alt));\n}\n\nexport function relativeTonic(\n destination: ModeLiteral,\n source: ModeLiteral,\n tonic: NoteName,\n) {\n return transpose(tonic, distance(destination, source));\n}\n\nexport default {\n get,\n names,\n all,\n distance,\n relativeTonic,\n notes,\n triads,\n seventhChords,\n // deprecated\n entries,\n mode,\n};\n", "import { tokenize } from \"@tonaljs/chord\";\nimport { distance, interval, NoteLiteral, transpose } from \"@tonaljs/core\";\nimport { get as romanNumeral } from \"@tonaljs/roman-numeral\";\n\n/**\n * Given a tonic and a chord list expressed with roman numeral notation\n * returns the progression expressed with leadsheet chords symbols notation\n * @example\n * fromRomanNumerals(\"C\", [\"I\", \"IIm7\", \"V7\"]);\n * // => [\"C\", \"Dm7\", \"G7\"]\n */\nexport function fromRomanNumerals(\n tonic: NoteLiteral,\n chords: string[],\n): string[] {\n const romanNumerals = chords.map(romanNumeral);\n return romanNumerals.map(\n (rn) => transpose(tonic, interval(rn)) + rn.chordType,\n );\n}\n\n/**\n * Given a tonic and a chord list with leadsheet symbols notation,\n * return the chord list with roman numeral notation\n * @example\n * toRomanNumerals(\"C\", [\"CMaj7\", \"Dm7\", \"G7\"]);\n * // => [\"IMaj7\", \"IIm7\", \"V7\"]\n */\nexport function toRomanNumerals(\n tonic: NoteLiteral,\n chords: string[],\n): string[] {\n return chords.map((chord) => {\n const [note, chordType] = tokenize(chord);\n const intervalName = distance(tonic, note);\n const roman = romanNumeral(interval(intervalName));\n return roman.name + chordType;\n });\n}\n\nexport default { fromRomanNumerals, toRomanNumerals };\n", "import { compact, range } from \"@tonaljs/collection\";\nimport { midiToNoteName, toMidi, ToNoteNameOptions } from \"@tonaljs/midi\";\n\n/**\n * Create a numeric range. You supply a list of notes or numbers and it will\n * be connected to create complex ranges.\n *\n * @param {Array} notes - the list of notes or midi numbers used\n * @return {Array} an array of numbers or empty array if not valid parameters\n *\n * @example\n * numeric([\"C5\", \"C4\"]) // => [ 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60 ]\n * // it works midi notes\n * numeric([10, 5]) // => [ 10, 9, 8, 7, 6, 5 ]\n * // complex range\n * numeric([\"C4\", \"E4\", \"Bb3\"]) // => [60, 61, 62, 63, 64, 63, 62, 61, 60, 59, 58]\n */\nexport function numeric(notes: (string | number)[]): number[] {\n const midi: number[] = compact(\n notes.map((note) => (typeof note === \"number\" ? note : toMidi(note))),\n );\n if (!notes.length || midi.length !== notes.length) {\n // there is no valid notes\n return [];\n }\n\n return midi.reduce(\n (result, note) => {\n const last: number = result[result.length - 1];\n return result.concat(range(last, note).slice(1));\n },\n [midi[0]],\n );\n}\n\n/**\n * Create a range of chromatic notes. The altered notes will use flats.\n *\n * @function\n * @param {Array} notes - the list of notes or midi note numbers to create a range from\n * @param {Object} options - The same as `midiToNoteName` (`{ sharps: boolean, pitchClass: boolean }`)\n * @return {Array} an array of note names\n *\n * @example\n * Range.chromatic([\"C2, \"E2\", \"D2\"]) // => [\"C2\", \"Db2\", \"D2\", \"Eb2\", \"E2\", \"Eb2\", \"D2\"]\n * // with sharps\n * Range.chromatic([\"C2\", \"C3\"], { sharps: true }) // => [ \"C2\", \"C#2\", \"D2\", \"D#2\", \"E2\", \"F2\", \"F#2\", \"G2\", \"G#2\", \"A2\", \"A#2\", \"B2\", \"C3\" ]\n */\nexport function chromatic(\n notes: (string | number)[],\n options?: ToNoteNameOptions,\n): string[] {\n return numeric(notes).map((midi) => midiToNoteName(midi, options));\n}\n\nexport default { numeric, chromatic };\n", "/**\n * References:\n * - https://www.researchgate.net/publication/327567188_An_Algorithm_for_Spelling_the_Pitches_of_Any_Musical_Scale\n * @module scale\n */\nimport { all as chordTypes } from \"@tonaljs/chord-type\";\nimport { range as nums, rotate } from \"@tonaljs/collection\";\nimport {\n deprecate,\n note,\n NoteName,\n tonicIntervalsTransposer,\n transpose,\n} from \"@tonaljs/core\";\nimport { enharmonic, fromMidi, sortedUniqNames } from \"@tonaljs/note\";\nimport {\n chroma,\n isChroma,\n isSubsetOf,\n isSupersetOf,\n modes,\n} from \"@tonaljs/pcset\";\nimport {\n all,\n all as scaleTypes,\n get as getScaleType,\n names as scaleTypeNames,\n ScaleType,\n} from \"@tonaljs/scale-type\";\n\ntype ScaleName = string;\ntype ScaleNameTokens = [string, string]; // [TONIC, SCALE TYPE]\n\nexport interface Scale extends ScaleType {\n tonic: string | null;\n type: string;\n notes: NoteName[];\n}\n\nconst NoScale: Scale = {\n empty: true,\n name: \"\",\n type: \"\",\n tonic: null,\n setNum: NaN,\n chroma: \"\",\n normalized: \"\",\n aliases: [],\n notes: [],\n intervals: [],\n};\n\n/**\n * Given a string with a scale name and (optionally) a tonic, split\n * that components.\n *\n * It retuns an array with the form [ name, tonic ] where tonic can be a\n * note name or null and name can be any arbitrary string\n * (this function doesn\"t check if that scale name exists)\n *\n * @function\n * @param {string} name - the scale name\n * @return {Array} an array [tonic, name]\n * @example\n * tokenize(\"C mixolydean\") // => [\"C\", \"mixolydean\"]\n * tokenize(\"anything is valid\") // => [\"\", \"anything is valid\"]\n * tokenize() // => [\"\", \"\"]\n */\nexport function tokenize(name: ScaleName): ScaleNameTokens {\n if (typeof name !== \"string\") {\n return [\"\", \"\"];\n }\n const i = name.indexOf(\" \");\n const tonic = note(name.substring(0, i));\n if (tonic.empty) {\n const n = note(name);\n return n.empty ? [\"\", name] : [n.name, \"\"];\n }\n\n const type = name.substring(tonic.name.length + 1);\n return [tonic.name, type.length ? type : \"\"];\n}\n\n/**\n * Get all scale names\n * @function\n */\nexport const names = scaleTypeNames;\n\n/**\n * Get a Scale from a scale name.\n */\nexport function get(src: ScaleName | ScaleNameTokens): Scale {\n const tokens = Array.isArray(src) ? src : tokenize(src);\n const tonic = note(tokens[0]).name;\n const st = getScaleType(tokens[1]);\n if (st.empty) {\n return NoScale;\n }\n\n const type = st.name;\n const notes: string[] = tonic\n ? st.intervals.map((i) => transpose(tonic, i))\n : [];\n\n const name = tonic ? tonic + \" \" + type : type;\n\n return { ...st, name, type, tonic, notes };\n}\n\nexport const scale = deprecate(\"Scale.scale\", \"Scale.get\", get);\n\nexport function detect(\n notes: string[],\n options: { tonic?: string; match?: \"exact\" | \"fit\" } = {},\n): string[] {\n const notesChroma = chroma(notes);\n const tonic = note(options.tonic ?? notes[0] ?? \"\");\n const tonicChroma = tonic.chroma;\n if (tonicChroma === undefined) {\n return [];\n }\n\n const pitchClasses = notesChroma.split(\"\");\n pitchClasses[tonicChroma] = \"1\";\n const scaleChroma = rotate(tonicChroma, pitchClasses).join(\"\");\n const match = all().find((scaleType) => scaleType.chroma === scaleChroma);\n\n const results: string[] = [];\n if (match) {\n results.push(tonic.name + \" \" + match.name);\n }\n if (options.match === \"exact\") {\n return results;\n }\n\n extended(scaleChroma).forEach((scaleName) => {\n results.push(tonic.name + \" \" + scaleName);\n });\n\n return results;\n}\n\n/**\n * Get all chords that fits a given scale\n *\n * @function\n * @param {string} name - the scale name\n * @return {Array} - the chord names\n *\n * @example\n * scaleChords(\"pentatonic\") // => [\"5\", \"64\", \"M\", \"M6\", \"Madd9\", \"Msus2\"]\n */\nexport function scaleChords(name: string): string[] {\n const s = get(name);\n const inScale = isSubsetOf(s.chroma);\n return chordTypes()\n .filter((chord) => inScale(chord.chroma))\n .map((chord) => chord.aliases[0]);\n}\n/**\n * Get all scales names that are a superset of the given one\n * (has the same notes and at least one more)\n *\n * @function\n * @param {string} name\n * @return {Array} a list of scale names\n * @example\n * extended(\"major\") // => [\"bebop\", \"bebop dominant\", \"bebop major\", \"chromatic\", \"ichikosucho\"]\n */\nexport function extended(name: string): string[] {\n const chroma = isChroma(name) ? name : get(name).chroma;\n const isSuperset = isSupersetOf(chroma);\n return scaleTypes()\n .filter((scale) => isSuperset(scale.chroma))\n .map((scale) => scale.name);\n}\n\n/**\n * Find all scales names that are a subset of the given one\n * (has less notes but all from the given scale)\n *\n * @function\n * @param {string} name\n * @return {Array} a list of scale names\n *\n * @example\n * reduced(\"major\") // => [\"ionian pentatonic\", \"major pentatonic\", \"ritusen\"]\n */\nexport function reduced(name: string): string[] {\n const isSubset = isSubsetOf(get(name).chroma);\n return scaleTypes()\n .filter((scale) => isSubset(scale.chroma))\n .map((scale) => scale.name);\n}\n\n/**\n * Given an array of notes, return the scale: a pitch class set starting from\n * the first note of the array\n *\n * @function\n * @param {string[]} notes\n * @return {string[]} pitch classes with same tonic\n * @example\n * scaleNotes(['C4', 'c3', 'C5', 'C4', 'c4']) // => [\"C\"]\n * scaleNotes(['D4', 'c#5', 'A5', 'F#6']) // => [\"D\", \"F#\", \"A\", \"C#\"]\n */\nexport function scaleNotes(notes: NoteName[]) {\n const pcset: string[] = notes.map((n) => note(n).pc).filter((x) => x);\n const tonic = pcset[0];\n const scale = sortedUniqNames(pcset);\n return rotate(scale.indexOf(tonic), scale);\n}\n\ntype ScaleMode = [string, string];\n/**\n * Find mode names of a scale\n *\n * @function\n * @param {string} name - scale name\n * @example\n * modeNames(\"C pentatonic\") // => [\n * [\"C\", \"major pentatonic\"],\n * [\"D\", \"egyptian\"],\n * [\"E\", \"malkos raga\"],\n * [\"G\", \"ritusen\"],\n * [\"A\", \"minor pentatonic\"]\n * ]\n */\nexport function modeNames(name: string): ScaleMode[] {\n const s = get(name);\n if (s.empty) {\n return [];\n }\n\n const tonics = s.tonic ? s.notes : s.intervals;\n return modes(s.chroma)\n .map((chroma: string, i: number): ScaleMode => {\n const modeName = get(chroma).name;\n return modeName ? [tonics[i], modeName] : [\"\", \"\"];\n })\n .filter((x) => x[0]);\n}\n\nfunction getNoteNameOf(scale: string | string[]) {\n const names = Array.isArray(scale) ? scaleNotes(scale) : get(scale).notes;\n const chromas = names.map((name) => note(name).chroma);\n\n return (noteOrMidi: string | number): string | undefined => {\n const currNote =\n typeof noteOrMidi === \"number\"\n ? note(fromMidi(noteOrMidi))\n : note(noteOrMidi);\n const height = currNote.height;\n\n if (height === undefined) return undefined;\n const chroma = height % 12;\n const position = chromas.indexOf(chroma);\n if (position === -1) return undefined;\n return enharmonic(currNote.name, names[position]);\n };\n}\n\nexport function rangeOf(scale: string | string[]) {\n const getName = getNoteNameOf(scale);\n return (fromNote: string, toNote: string) => {\n const from = note(fromNote).height;\n const to = note(toNote).height;\n if (from === undefined || to === undefined) return [];\n\n return nums(from, to)\n .map(getName)\n .filter((x) => x);\n };\n}\n\n/**\n * Returns a function to get a note name from the scale degree.\n *\n * @example\n * [1, 2, 3].map(Scale.degrees(\"C major\")) => [\"C\", \"D\", \"E\"]\n * [1, 2, 3].map(Scale.degrees(\"C4 major\")) => [\"C4\", \"D4\", \"E4\"]\n */\nexport function degrees(scaleName: string | ScaleNameTokens) {\n const { intervals, tonic } = get(scaleName);\n const transpose = tonicIntervalsTransposer(intervals, tonic);\n return (degree: number) =>\n degree ? transpose(degree > 0 ? degree - 1 : degree) : \"\";\n}\n\n/**\n * Sames as `degree` but with 0-based index\n */\nexport function steps(scaleName: string | ScaleNameTokens) {\n const { intervals, tonic } = get(scaleName);\n return tonicIntervalsTransposer(intervals, tonic);\n}\n\nexport default {\n degrees,\n detect,\n extended,\n get,\n modeNames,\n names,\n rangeOf,\n reduced,\n scaleChords,\n scaleNotes,\n steps,\n tokenize,\n\n // deprecated\n scale,\n};\n", "// TYPES: PARSING\nexport type TimeSignatureLiteral = string | [number, number] | [string, string];\ntype ParsedTimeSignature = [number | number[], number];\n\n// TYPES: PROPERTIES\nexport type ValidTimeSignature = {\n readonly empty: false;\n readonly name: string;\n readonly upper: number | number[];\n readonly lower: number;\n readonly type: \"simple\" | \"compound\" | \"irregular\" | \"irrational\";\n readonly additive: number[];\n};\n\nexport type InvalidTimeSignature = {\n readonly empty: true;\n readonly name: \"\";\n readonly upper: undefined;\n readonly lower: undefined;\n readonly type: undefined;\n readonly additive: [];\n};\n\nexport type TimeSignature = ValidTimeSignature | InvalidTimeSignature;\n\n// CONSTANTS\nconst NONE: InvalidTimeSignature = {\n empty: true,\n name: \"\",\n upper: undefined,\n lower: undefined,\n type: undefined,\n additive: [],\n};\n\nconst NAMES = [\"4/4\", \"3/4\", \"2/4\", \"2/2\", \"12/8\", \"9/8\", \"6/8\", \"3/8\"];\n\n// PUBLIC API\n\nexport function names() {\n return NAMES.slice();\n}\n\nconst REGEX = /^(\\d*\\d(?:\\+\\d)*)\\/(\\d+)$/;\nconst CACHE = new Map();\n\nexport function get(literal: TimeSignatureLiteral): TimeSignature {\n const stringifiedLiteral = JSON.stringify(literal);\n const cached = CACHE.get(stringifiedLiteral);\n if (cached) {\n return cached;\n }\n\n const ts = build(parse(literal));\n CACHE.set(stringifiedLiteral, ts);\n return ts;\n}\n\nexport function parse(literal: TimeSignatureLiteral): ParsedTimeSignature {\n if (typeof literal === \"string\") {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, up, low] = REGEX.exec(literal) || [];\n return parse([up, low]);\n }\n\n const [up, down] = literal;\n const denominator = +down;\n if (typeof up === \"number\") {\n return [up, denominator];\n }\n\n const list = up.split(\"+\").map((n) => +n);\n return list.length === 1 ? [list[0], denominator] : [list, denominator];\n}\n\nexport default { names, parse, get };\n\n// PRIVATE\n\nconst isPowerOfTwo = (x: number) => (Math.log(x) / Math.log(2)) % 1 === 0;\n\nfunction build([up, down]: ParsedTimeSignature): TimeSignature {\n const upper = Array.isArray(up) ? up.reduce((a, b) => a + b, 0) : up;\n const lower = down;\n if (upper === 0 || lower === 0) {\n return NONE;\n }\n\n const name = Array.isArray(up) ? `${up.join(\"+\")}/${down}` : `${up}/${down}`;\n const additive = Array.isArray(up) ? up : [];\n const type =\n lower === 4 || lower === 2\n ? \"simple\"\n : lower === 8 && upper % 3 === 0\n ? \"compound\"\n : isPowerOfTwo(lower)\n ? \"irregular\"\n : \"irrational\";\n\n return {\n empty: false,\n name,\n type,\n upper,\n lower,\n additive,\n };\n}\n", "import Note from \"@tonaljs/note\";\n\n// A function that decides which of a set of voicings is picked as a follow up to lastVoicing.\nexport declare type VoiceLeadingFunction = (\n voicings: string[][],\n lastVoicing: string[],\n) => string[];\n\nexport const topNoteDiff: VoiceLeadingFunction = (voicings, lastVoicing) => {\n if (!lastVoicing || !lastVoicing.length) {\n return voicings[0];\n }\n const topNoteMidi = (voicing: string[]) =>\n Note.midi(voicing[voicing.length - 1]) || 0;\n const diff = (voicing: string[]) =>\n Math.abs(topNoteMidi(lastVoicing) - topNoteMidi(voicing));\n return voicings.sort((a, b) => diff(a) - diff(b))[0];\n};\n\nexport default {\n topNoteDiff,\n};\n", "import Chord from \"@tonaljs/chord\";\nimport { lefthand, VoicingDictionary, triads, all } from \"./data\";\n\nconst defaultDictionary: VoicingDictionary = lefthand;\n\nfunction lookup(\n symbol: string,\n dictionary = defaultDictionary,\n): string[] | undefined {\n if (dictionary[symbol]) {\n return dictionary[symbol];\n }\n const { aliases } = Chord.get(\"C\" + symbol);\n // TODO: find other way to get aliases of symbol\n const match =\n Object.keys(dictionary).find((_symbol) => aliases.includes(_symbol)) || \"\";\n if (match !== undefined) {\n return dictionary[match];\n }\n return undefined;\n}\n\nexport default {\n lookup,\n lefthand,\n triads,\n all,\n defaultDictionary,\n};\n", "export type VoicingDictionary = { [symbol: string]: string[] };\n\nexport const triads: VoicingDictionary = {\n M: [\"1P 3M 5P\", \"3M 5P 8P\", \"5P 8P 10M\"],\n m: [\"1P 3m 5P\", \"3m 5P 8P\", \"5P 8P 10m\"],\n o: [\"1P 3m 5d\", \"3m 5d 8P\", \"5d 8P 10m\"],\n aug: [\"1P 3m 5A\", \"3m 5A 8P\", \"5A 8P 10m\"],\n};\nexport const lefthand: VoicingDictionary = {\n m7: [\"3m 5P 7m 9M\", \"7m 9M 10m 12P\"],\n \"7\": [\"3M 6M 7m 9M\", \"7m 9M 10M 13M\"],\n \"^7\": [\"3M 5P 7M 9M\", \"7M 9M 10M 12P\"],\n \"69\": [\"3M 5P 6A 9M\"],\n m7b5: [\"3m 5d 7m 8P\", \"7m 8P 10m 12d\"],\n \"7b9\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n \"7b13\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n o7: [\"1P 3m 5d 6M\", \"5d 6M 8P 10m\"],\n \"7#11\": [\"7m 9M 11A 13A\"],\n \"7#9\": [\"3M 7m 9A\"],\n mM7: [\"3m 5P 7M 9M\", \"7M 9M 10m 12P\"],\n m6: [\"3m 5P 6M 9M\", \"6M 9M 10m 12P\"],\n};\nexport const all: VoicingDictionary = {\n M: [\"1P 3M 5P\", \"3M 5P 8P\", \"5P 8P 10M\"],\n m: [\"1P 3m 5P\", \"3m 5P 8P\", \"5P 8P 10m\"],\n o: [\"1P 3m 5d\", \"3m 5d 8P\", \"5d 8P 10m\"],\n aug: [\"1P 3m 5A\", \"3m 5A 8P\", \"5A 8P 10m\"],\n m7: [\"3m 5P 7m 9M\", \"7m 9M 10m 12P\"],\n \"7\": [\"3M 6M 7m 9M\", \"7m 9M 10M 13M\"],\n \"^7\": [\"3M 5P 7M 9M\", \"7M 9M 10M 12P\"],\n \"69\": [\"3M 5P 6A 9M\"],\n m7b5: [\"3m 5d 7m 8P\", \"7m 8P 10m 12d\"],\n \"7b9\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n \"7b13\": [\"3M 6m 7m 9m\", \"7m 9m 10M 13m\"], // b9 / b13\n o7: [\"1P 3m 5d 6M\", \"5d 6M 8P 10m\"],\n \"7#11\": [\"7m 9M 11A 13A\"],\n \"7#9\": [\"3M 7m 9A\"],\n mM7: [\"3m 5P 7M 9M\", \"7M 9M 10m 12P\"],\n m6: [\"3m 5P 6M 9M\", \"6M 9M 10m 12P\"],\n};\n", "import Chord from \"@tonaljs/chord\";\nimport Note from \"@tonaljs/note\";\nimport Range from \"@tonaljs/range\";\nimport Interval from \"@tonaljs/interval\";\nimport VoicingDictionary from \"@tonaljs/voicing-dictionary\";\nimport VoiceLeading from \"@tonaljs/voice-leading\";\n\nconst defaultRange = [\"C3\", \"C5\"];\nconst defaultDictionary = VoicingDictionary.all;\nconst defaultVoiceLeading = VoiceLeading.topNoteDiff;\n\nfunction get(\n chord: string,\n range: string[] = defaultRange,\n dictionary = defaultDictionary,\n voiceLeading = defaultVoiceLeading,\n lastVoicing?: string[],\n) {\n const voicings = search(chord, range, dictionary);\n if (!lastVoicing || !lastVoicing.length) {\n // notes = voicings[Math.ceil(voicings.length / 2)]; // pick middle voicing..\n return voicings[0]; // pick lowest voicing..\n } else {\n // calculates the distance between the last note and the given voicings top note\n // sort voicings with differ\n return voiceLeading(voicings, lastVoicing);\n }\n}\n\nfunction search(\n chord: string,\n range = defaultRange,\n dictionary = VoicingDictionary.triads,\n): string[][] {\n const [tonic, symbol] = Chord.tokenize(chord);\n const sets = VoicingDictionary.lookup(symbol, dictionary);\n // find equivalent symbol that is used as a key in dictionary:\n if (!sets) {\n return [];\n }\n // resolve array of interval arrays for the wanted symbol\n const voicings = sets.map((intervals) => intervals.split(\" \"));\n const notesInRange = Range.chromatic(range); // gives array of notes inside range\n return voicings.reduce((voiced: string[][], voicing: string[]) => {\n // transpose intervals relative to first interval (e.g. 3m 5P > 1P 3M)\n const relativeIntervals = voicing.map(\n (interval) => Interval.substract(interval, voicing[0]) || \"\",\n );\n // get enharmonic correct pitch class the bottom note\n const bottomPitchClass = Note.transpose(tonic, voicing[0]);\n // get all possible start notes for voicing\n const starts = notesInRange\n // only get the start notes:\n .filter((note) => Note.chroma(note) === Note.chroma(bottomPitchClass))\n // filter out start notes that will overshoot the top end of the range\n .filter(\n (note) =>\n (Note.midi(\n Note.transpose(\n note,\n relativeIntervals[relativeIntervals.length - 1],\n ),\n ) || 0) <= (Note.midi(range[1]) || 0),\n )\n // replace Range.chromatic notes with the correct enharmonic equivalents\n .map((note) => Note.enharmonic(note, bottomPitchClass));\n // render one voicing for each start note\n const notes = starts.map((start) =>\n relativeIntervals.map((interval) => Note.transpose(start, interval)),\n );\n return voiced.concat(notes);\n }, []);\n}\n\nfunction sequence(\n chords: string[],\n range = defaultRange,\n dictionary = defaultDictionary,\n voiceLeading = defaultVoiceLeading,\n lastVoicing?: string[],\n) {\n const { voicings } = chords.reduce<{\n voicings: string[][];\n lastVoicing: string[] | undefined;\n }>(\n ({ voicings, lastVoicing }, chord) => {\n const voicing = get(chord, range, dictionary, voiceLeading, lastVoicing);\n lastVoicing = voicing;\n voicings.push(voicing);\n return { voicings, lastVoicing };\n },\n { voicings: [], lastVoicing },\n );\n return voicings;\n}\n\nexport default {\n get,\n search,\n sequence,\n};\n"], + "mappings": "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", "names": ["tonal_exports", "__export", "abc_notation_default", "dist_exports", "chord_default", "ChordDictionary", "chord_type_default", "collection_default", "duration_value_default", "interval_default", "key_default", "midi_default", "mode_default", "note_default", "PcSet", "pcset_default", "progression_default", "range_default", "roman_numeral_default", "scale_default", "ScaleDictionary", "scale_type_default", "time_signature_default", "Tonal", "voice_leading_default", "voicing_default", "voicing_dictionary_default", "accToAlt", "altToAcc", "chroma", "coordToInterval", "coordToNote", "coordinates", "deprecate", "distance", "fillStr", "height", "interval", "isNamed", "isNamedPitch", "isPitch", "midi", "note", "pitch", "stepToLetter", "tokenizeInterval", "tokenizeNote", "tonicIntervalsTransposer", "transpose", "isNamedPitch", "src", "SIZES", "chroma", "step", "alt", "height", "oct", "dir", "midi", "pitch", "h", "isPitch", "FIFTHS", "STEPS_TO_OCTS", "fifths", "coordinates", "f", "o", "FIFTHS_TO_STEPS", "coord", "unaltered", "i", "fillStr", "s", "NoInterval", "INTERVAL_TONAL_REGEX", "INTERVAL_SHORTHAND_REGEX", "REGEX", "tokenizeInterval", "str", "m", "cache", "interval", "src", "parse", "isPitch", "pitchName", "isNamedPitch", "SIZES", "TYPES", "tokens", "num", "q", "step", "t", "type", "name", "dir", "simple", "alt", "qToAlt", "oct", "semitones", "chroma", "coord", "coordinates", "coordToInterval", "forceDescending", "f", "o", "isDescending", "ivl", "pitch", "props", "calcNum", "d", "altToQ", "fillStr", "s", "NoNote", "cache", "stepToLetter", "step", "altToAcc", "alt", "accToAlt", "acc", "note", "src", "stringSrc", "cached", "value", "parse", "isPitch", "pitchName", "isNamedPitch", "REGEX", "tokenizeNote", "str", "m", "coordToNote", "noteCoord", "pitch", "mod", "n", "SEMI", "noteName", "tokens", "letter", "octStr", "oct", "coord", "coordinates", "name", "pc", "chroma", "height", "midi", "freq", "props", "transpose", "noteName", "intervalName", "note", "intervalCoord", "interval", "noteCoord", "tr", "coordToNote", "tonicIntervalsTransposer", "intervals", "tonic", "len", "normalized", "index", "octaves", "root", "distance", "fromNote", "toNote", "from", "to", "fcoord", "tcoord", "fifths", "octs", "forceDescending", "coordToInterval", "fillStr", "s", "deprecate", "original", "alternative", "fn", "args", "isNamed", "isNamedPitch", "fillStr", "character", "times", "REGEX", "tokenize", "str", "m", "abcToScientificNotation", "acc", "letter", "oct", "i", "scientificToAbcNotation", "note", "l", "o", "transpose", "interval", "distance", "from", "to", "abc_notation_default", "ascR", "b", "a", "descR", "range", "from", "to", "rotate", "times", "arr", "len", "n", "compact", "sortedNoteNames", "notes", "note", "sortedUniqNoteNames", "i", "shuffle", "rnd", "t", "m", "permutations", "acc", "perm", "e", "pos", "newPerm", "ascR", "b", "a", "descR", "range", "from", "to", "rotate", "times", "arr", "len", "n", "compact", "shuffle", "rnd", "i", "t", "m", "permutations", "acc", "perm", "e", "pos", "newPerm", "collection_default", "EmptyPcset", "setNumToChroma", "num", "chromaToNumber", "chroma", "REGEX", "isChroma", "set", "isPcsetNum", "isPcset", "cache", "get", "src", "listToChroma", "chromaToPcset", "pcset", "deprecate", "intervals", "IVLS", "chromaToIntervals", "i", "chromas", "range", "modes", "normalize", "binary", "compact", "_", "r", "rotate", "isEqual", "s1", "s2", "isSubsetOf", "s", "notes", "o", "isSupersetOf", "isNoteIncludedIn", "noteName", "n", "note", "filter", "set", "isIncluded", "isNoteIncludedIn", "notes", "pcset_default", "get", "chroma", "num", "intervals", "chromas", "isSupersetOf", "isSubsetOf", "isEqual", "modes", "pcset", "chromaRotations", "binary", "_", "i", "rotate", "chromaToPcset", "setNum", "chromaToNumber", "normalizedNum", "n", "normalized", "setNumToChroma", "chromaToIntervals", "listToChroma", "EmptyPcset", "pitch", "note", "interval", "CHORDS", "data_default", "NoChordType", "EmptyPcset", "dictionary", "index", "get", "type", "chordType", "deprecate", "names", "chord", "x", "symbols", "keys", "all", "entries", "removeAll", "add", "intervals", "aliases", "fullName", "quality", "getQuality", "alias", "addAlias", "has", "interval", "ivls", "a", "b", "chord_type_default", "namedSet", "notes", "pcToName", "record", "n", "chroma", "note", "detect", "source", "options", "x", "findMatches", "chord", "a", "b", "BITMASK", "testChromaNumber", "bitmask", "chromaNumber", "hasAnyThird", "hasPerfectFifth", "hasAnySeventh", "hasNonPerfectFifth", "hasAnyThirdAndPerfectFifthAndAnySeventh", "chordType", "withPerfectFifth", "weight", "tonic", "tonicChroma", "noteName", "allModes", "modes", "found", "mode", "index", "modeWithPerfectFifth", "all", "chordName", "baseNote", "SCALES", "data_default", "NoScaleType", "EmptyPcset", "dictionary", "index", "names", "scale", "get", "type", "scaleType", "deprecate", "all", "entries", "keys", "removeAll", "add", "intervals", "name", "aliases", "alias", "addAlias", "ivls", "scale_type_default", "NoChord", "tokenize", "name", "letter", "acc", "oct", "type", "tokenizeNote", "get", "src", "getChord", "tonic", "chord", "typeName", "optionalTonic", "optionalRoot", "note", "root", "rootInterval", "distance", "rootDegree", "intervals", "i", "num", "quality", "newNum", "notes", "transpose", "symbol", "deprecate", "chordName", "interval", "chordScales", "s", "isChordIncluded", "isSupersetOf", "all", "scale", "extended", "isSuperset", "reduced", "isSubset", "isSubsetOf", "degrees", "tonicIntervalsTransposer", "degree", "steps", "chord_default", "detect", "DATA", "data_default", "VALUES", "denominator", "shorthand", "names", "add", "NoDuration", "duration", "name", "shorthands", "dur", "REGEX", "get", "_", "simple", "dots", "base", "fraction", "calcDots", "value", "duration_value_default", "pow", "numerator", "i", "names", "get", "interval", "name", "semitones", "quality", "num", "simplify", "i", "invert", "step", "alt", "IN", "IQ", "fromSemitones", "d", "n", "c", "distance", "add", "combinator", "a", "b", "addTo", "other", "substract", "transposeFifths", "fifths", "ivl", "nFifths", "nOcts", "dir", "coordToInterval", "interval_default", "fn", "coordA", "coordB", "coord", "isMidi", "arg", "toMidi", "note", "midiToFreq", "midi", "tuning", "L2", "L440", "freqToMidi", "freq", "v", "SHARPS", "FLATS", "midiToNoteName", "options", "pc", "chroma", "pcsetFromChroma", "pcset", "val", "index", "pcsetFromMidi", "a", "b", "i", "notes", "pcsetNearest", "set", "ch", "pcsetSteps", "tonic", "len", "step", "octaves", "pcsetDegrees", "steps", "degree", "midi_default", "NAMES", "toName", "n", "onlyNotes", "array", "note", "names", "get", "name", "pitchClass", "accidentals", "octave", "midi", "freq", "chroma", "fromMidi", "midiToNoteName", "fromFreq", "freqToMidi", "fromFreqSharps", "fromMidiSharps", "transpose", "tr", "transposeBy", "interval", "trBy", "transposeFrom", "trFrom", "transposeFifths", "noteName", "fifths", "trFifths", "transposeOctaves", "octaves", "ascending", "a", "b", "descending", "sortedNames", "notes", "comparator", "sortedUniqNames", "i", "simplify", "enharmonic", "destName", "src", "dest", "srcChroma", "destChroma", "destOctOffset", "destOct", "note_default", "NoRomanNumeral", "cache", "get", "src", "parse", "NAMES", "isPitch", "fromPitch", "isNamed", "romanNumeral", "deprecate", "names", "major", "NAMES_MINOR", "pitch", "altToAcc", "REGEX", "tokenize", "str", "ROMANS", "name", "acc", "roman", "chordType", "upperRoman", "step", "alt", "accToAlt", "dir", "interval", "roman_numeral_default", "Empty", "NoKey", "NoKeyScale", "NoMajorKey", "NoMinorKey", "mapScaleToType", "scale", "list", "sep", "type", "i", "keyScale", "grades", "triads", "chords", "harmonicFunctions", "chordScales", "tonic", "intervals", "gr", "get", "interval", "transpose", "distInFifths", "from", "to", "f", "note", "t", "MajorScale", "NaturalScale", "HarmonicScale", "MelodicScale", "majorKey", "pc", "alteration", "romanInTonic", "src", "r", "altToAcc", "minorKey", "tnc", "majorTonicFromKeySignature", "sig", "transposeFifths", "accToAlt", "key_default", "MODES", "NoMode", "EmptyPcset", "modes", "toMode", "index", "mode", "alias", "get", "name", "deprecate", "all", "entries", "names", "modeNum", "setNum", "alt", "triad", "seventh", "aliases", "chroma", "notes", "modeName", "tonic", "ivl", "transpose", "chords", "triads", "rotate", "tonics", "i", "x", "seventhChords", "distance", "destination", "source", "from", "to", "simplify", "transposeFifths", "relativeTonic", "mode_default", "fromRomanNumerals", "tonic", "chords", "get", "rn", "transpose", "interval", "toRomanNumerals", "chord", "note", "chordType", "tokenize", "intervalName", "distance", "progression_default", "numeric", "notes", "midi", "compact", "note", "toMidi", "result", "last", "range", "chromatic", "options", "midiToNoteName", "range_default", "NoScale", "tokenize", "name", "i", "tonic", "note", "n", "type", "names", "get", "src", "tokens", "st", "notes", "transpose", "scale", "deprecate", "detect", "options", "notesChroma", "chroma", "tonicChroma", "pitchClasses", "scaleChroma", "rotate", "match", "all", "scaleType", "results", "extended", "scaleName", "scaleChords", "s", "inScale", "isSubsetOf", "chord", "isChroma", "isSuperset", "isSupersetOf", "reduced", "isSubset", "scaleNotes", "pcset", "x", "sortedUniqNames", "modeNames", "tonics", "modes", "modeName", "getNoteNameOf", "chromas", "noteOrMidi", "currNote", "fromMidi", "height", "position", "enharmonic", "rangeOf", "getName", "fromNote", "toNote", "from", "to", "range", "degrees", "intervals", "tonicIntervalsTransposer", "degree", "steps", "scale_default", "NONE", "NAMES", "names", "REGEX", "CACHE", "get", "literal", "stringifiedLiteral", "cached", "ts", "build", "parse", "_", "up", "low", "down", "denominator", "list", "n", "time_signature_default", "isPowerOfTwo", "x", "upper", "a", "b", "lower", "name", "additive", "type", "topNoteDiff", "voicings", "lastVoicing", "topNoteMidi", "voicing", "note_default", "diff", "a", "b", "voice_leading_default", "triads", "lefthand", "all", "defaultDictionary", "lookup", "symbol", "dictionary", "aliases", "chord_default", "match", "_symbol", "voicing_dictionary_default", "defaultRange", "defaultDictionary", "voicing_dictionary_default", "defaultVoiceLeading", "voice_leading_default", "get", "chord", "range", "dictionary", "voiceLeading", "lastVoicing", "voicings", "search", "tonic", "symbol", "chord_default", "sets", "intervals", "notesInRange", "range_default", "voiced", "voicing", "relativeIntervals", "interval", "interval_default", "bottomPitchClass", "note_default", "notes", "note", "start", "sequence", "chords", "voicing_default", "Tonal", "dist_exports", "PcSet", "pcset_default", "ChordDictionary", "chord_type_default", "ScaleDictionary", "scale_type_default"] } From 84ab41adbf87e627416fc9471ef79fbdef953936 Mon Sep 17 00:00:00 2001 From: danigb Date: Thu, 4 Jan 2024 10:32:59 +0100 Subject: [PATCH 2/3] chore: minor version bump --- packages/abc-notation/CHANGELOG.md | 8 ++++ packages/abc-notation/package.json | 4 +- packages/array/CHANGELOG.md | 8 ++++ packages/array/package.json | 4 +- packages/chord-detect/CHANGELOG.md | 10 +++++ packages/chord-detect/package.json | 8 ++-- packages/chord-dictionary/CHANGELOG.md | 8 ++++ packages/chord-dictionary/package.json | 4 +- packages/chord-type/CHANGELOG.md | 9 +++++ packages/chord-type/package.json | 6 +-- packages/chord/CHANGELOG.md | 13 +++++++ packages/chord/package.json | 14 +++---- packages/collection/CHANGELOG.md | 6 +++ packages/collection/package.json | 2 +- packages/core/CHANGELOG.md | 11 ++++++ packages/core/package.json | 10 ++--- packages/duration-value/CHANGELOG.md | 6 +++ packages/duration-value/package.json | 2 +- packages/interval/CHANGELOG.md | 8 ++++ packages/interval/package.json | 4 +- packages/key/CHANGELOG.md | 10 +++++ packages/key/package.json | 12 +++--- packages/midi/CHANGELOG.md | 8 ++++ packages/midi/package.json | 4 +- packages/mode/CHANGELOG.md | 12 ++++++ packages/mode/package.json | 12 +++--- packages/modules/CHANGELOG.md | 8 ++++ packages/modules/package.json | 4 +- packages/notation-scientific/CHANGELOG.md | 6 +++ packages/notation-scientific/package.json | 2 +- packages/note/CHANGELOG.md | 9 +++++ packages/note/package.json | 6 +-- packages/pcset/CHANGELOG.md | 9 +++++ packages/pcset/package.json | 6 +-- packages/pitch-distance/CHANGELOG.md | 10 +++++ packages/pitch-distance/package.json | 8 ++-- packages/pitch-interval/CHANGELOG.md | 8 ++++ packages/pitch-interval/package.json | 4 +- packages/pitch-note/CHANGELOG.md | 8 ++++ packages/pitch-note/package.json | 4 +- packages/pitch/CHANGELOG.md | 6 +++ packages/pitch/package.json | 2 +- packages/progression/CHANGELOG.md | 10 +++++ packages/progression/package.json | 8 ++-- packages/range/CHANGELOG.md | 9 +++++ packages/range/package.json | 6 +-- packages/roman-numeral/CHANGELOG.md | 8 ++++ packages/roman-numeral/package.json | 4 +- packages/scale-dictionary/CHANGELOG.md | 8 ++++ packages/scale-dictionary/package.json | 4 +- packages/scale-type/CHANGELOG.md | 9 +++++ packages/scale-type/package.json | 6 +-- packages/scale/CHANGELOG.md | 13 +++++++ packages/scale/package.json | 14 +++---- packages/time-signature/CHANGELOG.md | 6 +++ packages/time-signature/package.json | 2 +- packages/tonal/CHANGELOG.md | 29 ++++++++++++++ packages/tonal/package.json | 46 +++++++++++------------ packages/voice-leading/CHANGELOG.md | 8 ++++ packages/voice-leading/package.json | 4 +- packages/voicing-dictionary/CHANGELOG.md | 10 +++++ packages/voicing-dictionary/package.json | 8 ++-- packages/voicing/CHANGELOG.md | 13 +++++++ packages/voicing/package.json | 14 +++---- 64 files changed, 423 insertions(+), 119 deletions(-) diff --git a/packages/abc-notation/CHANGELOG.md b/packages/abc-notation/CHANGELOG.md index 5c517242..dde05685 100644 --- a/packages/abc-notation/CHANGELOG.md +++ b/packages/abc-notation/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/abc-notation +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/abc-notation/package.json b/packages/abc-notation/package.json index 3ae6e14d..6c5f7091 100644 --- a/packages/abc-notation/package.json +++ b/packages/abc-notation/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/abc-notation", - "version": "4.8.0", + "version": "4.8.1", "description": "Parse musical notes in abc notation", "main": "dist/index.js", "module": "dist/index.mjs", @@ -9,7 +9,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0" + "@tonaljs/core": "^4.10.3" }, "keywords": [ "note", diff --git a/packages/array/CHANGELOG.md b/packages/array/CHANGELOG.md index b1d3f258..8fd447cf 100644 --- a/packages/array/CHANGELOG.md +++ b/packages/array/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/array +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/array/package.json b/packages/array/package.json index cca3bc75..d6f7816f 100644 --- a/packages/array/package.json +++ b/packages/array/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/array", - "version": "4.8.0", + "version": "4.8.1", "description": "Functions to work with arrays of tonal objects", "keywords": [ "array", @@ -15,7 +15,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0" + "@tonaljs/core": "^4.10.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/chord-detect/CHANGELOG.md b/packages/chord-detect/CHANGELOG.md index c3e463df..1188af66 100644 --- a/packages/chord-detect/CHANGELOG.md +++ b/packages/chord-detect/CHANGELOG.md @@ -1,5 +1,15 @@ # @tonaljs/chord-detect +## 4.8.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord-type@5.0.3 + - @tonaljs/core@4.10.3 + - @tonaljs/pcset@4.8.3 + ## 4.8.2 ### Patch Changes diff --git a/packages/chord-detect/package.json b/packages/chord-detect/package.json index a44965de..883e530e 100644 --- a/packages/chord-detect/package.json +++ b/packages/chord-detect/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/chord-detect", - "version": "4.8.2", + "version": "4.8.3", "description": "Detect chord name based on note names", "keywords": [ "chord-detect", @@ -15,9 +15,9 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord-type": "^5.0.0", - "@tonaljs/core": "^4.8.0", - "@tonaljs/pcset": "^4.8.2" + "@tonaljs/chord-type": "^5.0.3", + "@tonaljs/core": "^4.10.3", + "@tonaljs/pcset": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/chord-dictionary/CHANGELOG.md b/packages/chord-dictionary/CHANGELOG.md index c61c20d7..3fd8ac90 100644 --- a/packages/chord-dictionary/CHANGELOG.md +++ b/packages/chord-dictionary/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/chord-dictionary +## 4.8.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord-type@5.0.3 + ## 4.8.1 ### Patch Changes diff --git a/packages/chord-dictionary/package.json b/packages/chord-dictionary/package.json index 464c40a2..f1423e8c 100644 --- a/packages/chord-dictionary/package.json +++ b/packages/chord-dictionary/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/chord-dictionary", - "version": "4.8.1", + "version": "4.8.2", "description": "A dictionary of musical chords", "keywords": [], "main": "dist/index.js", @@ -10,7 +10,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord-type": "^5.0.0" + "@tonaljs/chord-type": "^5.0.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/chord-type/CHANGELOG.md b/packages/chord-type/CHANGELOG.md index 15a05e85..eef5437d 100644 --- a/packages/chord-type/CHANGELOG.md +++ b/packages/chord-type/CHANGELOG.md @@ -1,5 +1,14 @@ # @tonaljs/chord-type +## 5.0.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + - @tonaljs/pcset@4.8.3 + ## 5.0.2 - Add missing -maj7 alias diff --git a/packages/chord-type/package.json b/packages/chord-type/package.json index 3630a59e..e8e69a73 100644 --- a/packages/chord-type/package.json +++ b/packages/chord-type/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/chord-type", - "version": "5.0.2", + "version": "5.0.3", "description": "A dictionary of musical chords", "keywords": [ "chord", @@ -17,8 +17,8 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0", - "@tonaljs/pcset": "^4.8.2" + "@tonaljs/core": "^4.10.3", + "@tonaljs/pcset": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/chord/CHANGELOG.md b/packages/chord/CHANGELOG.md index 62a84aa7..bcd9518a 100644 --- a/packages/chord/CHANGELOG.md +++ b/packages/chord/CHANGELOG.md @@ -1,5 +1,18 @@ # @tonaljs/chord +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord-detect@4.8.3 + - @tonaljs/chord-type@5.0.3 + - @tonaljs/collection@4.8.1 + - @tonaljs/core@4.10.3 + - @tonaljs/pcset@4.8.3 + - @tonaljs/scale-type@4.8.3 + ## 5.0.0 ### Major Changes diff --git a/packages/chord/package.json b/packages/chord/package.json index 7d178b77..b754b7c7 100644 --- a/packages/chord/package.json +++ b/packages/chord/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/chord", - "version": "5.0.0", + "version": "5.0.1", "description": "Musical chords and its relations", "keywords": [ "chord", @@ -16,12 +16,12 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord-detect": "^4.8.2", - "@tonaljs/chord-type": "^5.0.0", - "@tonaljs/collection": "^4.8.0", - "@tonaljs/core": "^4.10.0", - "@tonaljs/pcset": "^4.8.2", - "@tonaljs/scale-type": "^4.8.2" + "@tonaljs/chord-detect": "^4.8.3", + "@tonaljs/chord-type": "^5.0.3", + "@tonaljs/collection": "^4.8.1", + "@tonaljs/core": "^4.10.3", + "@tonaljs/pcset": "^4.8.3", + "@tonaljs/scale-type": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/collection/CHANGELOG.md b/packages/collection/CHANGELOG.md index 53de4ba0..ad052c3d 100644 --- a/packages/collection/CHANGELOG.md +++ b/packages/collection/CHANGELOG.md @@ -1,5 +1,11 @@ # @tonaljs/collection +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility + ## 4.8.0 ### Minor Changes diff --git a/packages/collection/package.json b/packages/collection/package.json index 319242c4..cd01671f 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/collection", - "version": "4.8.0", + "version": "4.8.1", "description": "Utility functions to work with collections (arrays)", "keywords": [ "collection", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 8e411fa9..2e348229 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,16 @@ # @tonaljs/core +## 4.10.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/pitch@5.0.1 + - @tonaljs/pitch-distance@5.0.1 + - @tonaljs/pitch-interval@5.0.1 + - @tonaljs/pitch-note@5.0.1 + ## 4.10.2 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index aa9ccd27..4cdadac8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/core", - "version": "4.10.2", + "version": "4.10.3", "description": "Music theory library", "keywords": [ "music", @@ -18,10 +18,10 @@ "access": "public" }, "dependencies": { - "@tonaljs/pitch": "^5.0.0", - "@tonaljs/pitch-interval": "^5.0.0", - "@tonaljs/pitch-distance": "^5.0.0", - "@tonaljs/pitch-note": "^5.0.0" + "@tonaljs/pitch": "^5.0.1", + "@tonaljs/pitch-interval": "^5.0.1", + "@tonaljs/pitch-distance": "^5.0.1", + "@tonaljs/pitch-note": "^5.0.1" }, "scripts": { "build": "tsup index.ts --sourcemap --dts --format esm,cjs" diff --git a/packages/duration-value/CHANGELOG.md b/packages/duration-value/CHANGELOG.md index e4f0f823..9a776957 100644 --- a/packages/duration-value/CHANGELOG.md +++ b/packages/duration-value/CHANGELOG.md @@ -1,5 +1,11 @@ # @tonaljs/duration-value +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility + ## 4.8.0 ### Minor Changes diff --git a/packages/duration-value/package.json b/packages/duration-value/package.json index dcdc5618..3a64bcd6 100644 --- a/packages/duration-value/package.json +++ b/packages/duration-value/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/duration-value", - "version": "4.8.0", + "version": "4.8.1", "description": "Musical duration values", "keywords": [ "duration-value", diff --git a/packages/interval/CHANGELOG.md b/packages/interval/CHANGELOG.md index 9506c462..fc9f3728 100644 --- a/packages/interval/CHANGELOG.md +++ b/packages/interval/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/interval +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/interval/package.json b/packages/interval/package.json index 06f7f74c..fb9452a9 100644 --- a/packages/interval/package.json +++ b/packages/interval/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/interval", - "version": "4.8.0", + "version": "4.8.1", "description": "Parse and manipulate music intervals", "keywords": [ "interval", @@ -15,7 +15,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0" + "@tonaljs/core": "^4.10.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/key/CHANGELOG.md b/packages/key/CHANGELOG.md index 50b87e6c..e9caf83e 100644 --- a/packages/key/CHANGELOG.md +++ b/packages/key/CHANGELOG.md @@ -1,5 +1,15 @@ # @tonaljs/key +## 4.9.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + - @tonaljs/note@4.10.1 + - @tonaljs/roman-numeral@4.8.1 + ## 4.9.1 ### Patch Changes diff --git a/packages/key/package.json b/packages/key/package.json index af372b8e..efbe8a54 100644 --- a/packages/key/package.json +++ b/packages/key/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/key", - "version": "4.9.1", + "version": "4.9.2", "description": "Functions to work with musical keys", "keywords": [ "key", @@ -15,13 +15,13 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0", - "@tonaljs/note": "^4.8.0", - "@tonaljs/roman-numeral": "^4.8.0" + "@tonaljs/core": "^4.10.3", + "@tonaljs/note": "^4.10.1", + "@tonaljs/roman-numeral": "^4.8.1" }, "devDependencies": { - "@tonaljs/chord": "^5.0.0", - "@tonaljs/scale": "^4.12.2" + "@tonaljs/chord": "^5.0.1", + "@tonaljs/scale": "^4.12.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/midi/CHANGELOG.md b/packages/midi/CHANGELOG.md index cf2cd386..8a4093d2 100644 --- a/packages/midi/CHANGELOG.md +++ b/packages/midi/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/midi +## 4.9.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + ## 4.9.0 ### Minor Changes diff --git a/packages/midi/package.json b/packages/midi/package.json index 9583be56..529a0845 100644 --- a/packages/midi/package.json +++ b/packages/midi/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/midi", - "version": "4.9.0", + "version": "4.9.1", "description": "Functions to work with midi numbers", "keywords": [ "note", @@ -16,7 +16,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0" + "@tonaljs/core": "^4.10.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/mode/CHANGELOG.md b/packages/mode/CHANGELOG.md index da982053..92328749 100644 --- a/packages/mode/CHANGELOG.md +++ b/packages/mode/CHANGELOG.md @@ -1,5 +1,17 @@ # @tonaljs/mode +## 4.8.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/collection@4.8.1 + - @tonaljs/core@4.10.3 + - @tonaljs/interval@4.8.1 + - @tonaljs/pcset@4.8.3 + - @tonaljs/scale-type@4.8.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/mode/package.json b/packages/mode/package.json index a77aaea7..ff6d344a 100644 --- a/packages/mode/package.json +++ b/packages/mode/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/mode", - "version": "4.8.1", + "version": "4.8.2", "description": "Functions to work with musical modes", "keywords": [ "mode", @@ -15,11 +15,11 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/collection": "^4.8.0", - "@tonaljs/core": "^4.8.0", - "@tonaljs/interval": "^4.8.0", - "@tonaljs/pcset": "^4.8.2", - "@tonaljs/scale-type": "^4.8.2" + "@tonaljs/collection": "^4.8.1", + "@tonaljs/core": "^4.10.3", + "@tonaljs/interval": "^4.8.1", + "@tonaljs/pcset": "^4.8.3", + "@tonaljs/scale-type": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 4759e6f7..43b90017 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/modules +## 4.8.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - tonal@5.1.3 + ## 4.8.1 ### Patch Changes diff --git a/packages/modules/package.json b/packages/modules/package.json index 9f568e21..671b85e6 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/modules", - "version": "4.8.1", + "version": "4.8.2", "description": "deprecated", "keywords": [], "main": "dist/index.js", @@ -10,7 +10,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "tonal": "^5.0.0" + "tonal": "^5.1.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/notation-scientific/CHANGELOG.md b/packages/notation-scientific/CHANGELOG.md index 00649f16..8e3c0161 100644 --- a/packages/notation-scientific/CHANGELOG.md +++ b/packages/notation-scientific/CHANGELOG.md @@ -1 +1,7 @@ # @tonaljs/notation-scientific + +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility diff --git a/packages/notation-scientific/package.json b/packages/notation-scientific/package.json index 37f9ea0d..9bdebb6b 100644 --- a/packages/notation-scientific/package.json +++ b/packages/notation-scientific/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/notation-scientific", - "version": "4.8.0", + "version": "4.8.1", "private": true, "description": "Parse intervals in shorthand notation", "keywords": [ diff --git a/packages/note/CHANGELOG.md b/packages/note/CHANGELOG.md index 3fea45ed..81089b40 100644 --- a/packages/note/CHANGELOG.md +++ b/packages/note/CHANGELOG.md @@ -1,5 +1,14 @@ # @tonaljs/note +## 4.10.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + - @tonaljs/midi@4.9.1 + ## 4.10.0 ### Minor Changes diff --git a/packages/note/package.json b/packages/note/package.json index 4c0882b1..824d9cbf 100644 --- a/packages/note/package.json +++ b/packages/note/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/note", - "version": "4.10.0", + "version": "4.10.1", "description": "Parse and manipulate music notes in scientific notation", "keywords": [ "note", @@ -15,8 +15,8 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.9.0", - "@tonaljs/midi": "^4.8.0" + "@tonaljs/core": "^4.10.3", + "@tonaljs/midi": "^4.9.1" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/pcset/CHANGELOG.md b/packages/pcset/CHANGELOG.md index a703d4a7..ffced15f 100644 --- a/packages/pcset/CHANGELOG.md +++ b/packages/pcset/CHANGELOG.md @@ -1,5 +1,14 @@ # @tonaljs/pcset +## 4.8.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/collection@4.8.1 + - @tonaljs/core@4.10.3 + ## 4.8.2 ### Patch Changes diff --git a/packages/pcset/package.json b/packages/pcset/package.json index e3a67942..a2a93cda 100644 --- a/packages/pcset/package.json +++ b/packages/pcset/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/pcset", - "version": "4.8.2", + "version": "4.8.3", "description": "Functions to work with midi numbers", "keywords": [ "note", @@ -16,8 +16,8 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/collection": "^4.8.0", - "@tonaljs/core": "^4.8.0" + "@tonaljs/collection": "^4.8.1", + "@tonaljs/core": "^4.10.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/pitch-distance/CHANGELOG.md b/packages/pitch-distance/CHANGELOG.md index 365edac8..219b2af0 100644 --- a/packages/pitch-distance/CHANGELOG.md +++ b/packages/pitch-distance/CHANGELOG.md @@ -1,5 +1,15 @@ # @tonaljs/pitch-distance +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/pitch@5.0.1 + - @tonaljs/pitch-interval@5.0.1 + - @tonaljs/pitch-note@5.0.1 + ## 5.0.0 ### Major Changes diff --git a/packages/pitch-distance/package.json b/packages/pitch-distance/package.json index 150f370f..21d4aa2c 100644 --- a/packages/pitch-distance/package.json +++ b/packages/pitch-distance/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/pitch-distance", - "version": "5.0.0", + "version": "5.0.1", "description": "Parse intervals in shorthand notation", "keywords": [ "note", @@ -10,9 +10,9 @@ "shorthand notation" ], "dependencies": { - "@tonaljs/pitch": "^5.0.0", - "@tonaljs/pitch-interval": "^5.0.0", - "@tonaljs/pitch-note": "^5.0.0" + "@tonaljs/pitch": "^5.0.1", + "@tonaljs/pitch-interval": "^5.0.1", + "@tonaljs/pitch-note": "^5.0.1" }, "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/packages/pitch-interval/CHANGELOG.md b/packages/pitch-interval/CHANGELOG.md index 755bae71..9e78bdd4 100644 --- a/packages/pitch-interval/CHANGELOG.md +++ b/packages/pitch-interval/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/pitch-interval +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/pitch@5.0.1 + ## 5.0.0 ### Major Changes diff --git a/packages/pitch-interval/package.json b/packages/pitch-interval/package.json index 57e1dd6d..78ea3a5b 100644 --- a/packages/pitch-interval/package.json +++ b/packages/pitch-interval/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/pitch-interval", - "version": "5.0.0", + "version": "5.0.1", "description": "Parse intervals in shorthand notation", "keywords": [ "note", @@ -10,7 +10,7 @@ "shorthand notation" ], "dependencies": { - "@tonaljs/pitch": "^5.0.0" + "@tonaljs/pitch": "^5.0.1" }, "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/packages/pitch-note/CHANGELOG.md b/packages/pitch-note/CHANGELOG.md index 2821786f..dd74500d 100644 --- a/packages/pitch-note/CHANGELOG.md +++ b/packages/pitch-note/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/pitch-note +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/pitch@5.0.1 + ## 5.0.0 ### Major Changes diff --git a/packages/pitch-note/package.json b/packages/pitch-note/package.json index 6337bd90..a1cbe6d7 100644 --- a/packages/pitch-note/package.json +++ b/packages/pitch-note/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/pitch-note", - "version": "5.0.0", + "version": "5.0.1", "description": "Parse intervals in shorthand notation", "keywords": [ "note", @@ -10,7 +10,7 @@ "shorthand notation" ], "dependencies": { - "@tonaljs/pitch": "^5.0.0" + "@tonaljs/pitch": "^5.0.1" }, "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/packages/pitch/CHANGELOG.md b/packages/pitch/CHANGELOG.md index c1c8ef66..086c69b5 100644 --- a/packages/pitch/CHANGELOG.md +++ b/packages/pitch/CHANGELOG.md @@ -1,5 +1,11 @@ # @tonaljs/pitch +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility + ## 5.0.0 First release diff --git a/packages/pitch/package.json b/packages/pitch/package.json index b8375d04..b6a1a7b4 100644 --- a/packages/pitch/package.json +++ b/packages/pitch/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/pitch", - "version": "5.0.0", + "version": "5.0.1", "description": "Pitch in (western) music theory", "keywords": [ "pitch", diff --git a/packages/progression/CHANGELOG.md b/packages/progression/CHANGELOG.md index 12e5347b..bd304863 100644 --- a/packages/progression/CHANGELOG.md +++ b/packages/progression/CHANGELOG.md @@ -1,5 +1,15 @@ # @tonaljs/progression +## 4.8.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord@5.0.1 + - @tonaljs/core@4.10.3 + - @tonaljs/roman-numeral@4.8.1 + ## 4.8.1 ### Patch Changes diff --git a/packages/progression/package.json b/packages/progression/package.json index 1217444c..6516e0f4 100644 --- a/packages/progression/package.json +++ b/packages/progression/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/progression", - "version": "4.8.1", + "version": "4.8.2", "description": "Build musical chord progressions", "keywords": [ "chord", @@ -16,9 +16,9 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord": "^5.0.0", - "@tonaljs/core": "^4.8.0", - "@tonaljs/roman-numeral": "^4.8.0" + "@tonaljs/chord": "^5.0.1", + "@tonaljs/core": "^4.10.3", + "@tonaljs/roman-numeral": "^4.8.1" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/range/CHANGELOG.md b/packages/range/CHANGELOG.md index def35e4a..f0fdbe97 100644 --- a/packages/range/CHANGELOG.md +++ b/packages/range/CHANGELOG.md @@ -1,5 +1,14 @@ # @tonaljs/range +## 4.8.2 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/collection@4.8.1 + - @tonaljs/midi@4.9.1 + ## 4.8.1 ### Patch Changes diff --git a/packages/range/package.json b/packages/range/package.json index 1b1a3ece..77c07747 100644 --- a/packages/range/package.json +++ b/packages/range/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/range", - "version": "4.8.1", + "version": "4.8.2", "description": "Create (musical) note ranges", "keywords": [ "range", @@ -15,8 +15,8 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/collection": "^4.8.0", - "@tonaljs/midi": "^4.8.0" + "@tonaljs/collection": "^4.8.1", + "@tonaljs/midi": "^4.9.1" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/roman-numeral/CHANGELOG.md b/packages/roman-numeral/CHANGELOG.md index 6b399dbc..49ec14a3 100644 --- a/packages/roman-numeral/CHANGELOG.md +++ b/packages/roman-numeral/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/roman-numeral +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/roman-numeral/package.json b/packages/roman-numeral/package.json index 53a737ec..e1a9b32c 100644 --- a/packages/roman-numeral/package.json +++ b/packages/roman-numeral/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/roman-numeral", - "version": "4.8.0", + "version": "4.8.1", "description": "Parse and properties of roman numeral strings", "keywords": [ "roman-numeral", @@ -16,7 +16,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0" + "@tonaljs/core": "^4.10.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/scale-dictionary/CHANGELOG.md b/packages/scale-dictionary/CHANGELOG.md index c27165db..7d8fd8be 100644 --- a/packages/scale-dictionary/CHANGELOG.md +++ b/packages/scale-dictionary/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/scale-dictionary +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/scale-type@4.8.3 + ## 4.8.0 ### Minor Changes diff --git a/packages/scale-dictionary/package.json b/packages/scale-dictionary/package.json index bdaab89c..07b77157 100644 --- a/packages/scale-dictionary/package.json +++ b/packages/scale-dictionary/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/scale-dictionary", - "version": "4.8.0", + "version": "4.8.1", "description": "A dictionary of musical scales", "keywords": [], "main": "dist/index.js", @@ -10,7 +10,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/scale-type": "^4.8.0" + "@tonaljs/scale-type": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/scale-type/CHANGELOG.md b/packages/scale-type/CHANGELOG.md index 60033c45..b5c1a602 100644 --- a/packages/scale-type/CHANGELOG.md +++ b/packages/scale-type/CHANGELOG.md @@ -1,5 +1,14 @@ # @tonaljs/scale-type +## 4.8.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/core@4.10.3 + - @tonaljs/pcset@4.8.3 + ## 4.8.1 ### Patch Changes diff --git a/packages/scale-type/package.json b/packages/scale-type/package.json index f5939d05..78f2996f 100644 --- a/packages/scale-type/package.json +++ b/packages/scale-type/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/scale-type", - "version": "4.8.2", + "version": "4.8.3", "description": "A dictionary of musical scales", "keywords": [ "scale", @@ -16,8 +16,8 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/core": "^4.8.0", - "@tonaljs/pcset": "^4.8.2" + "@tonaljs/core": "^4.10.3", + "@tonaljs/pcset": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/scale/CHANGELOG.md b/packages/scale/CHANGELOG.md index d7bf7b75..1abf2f35 100644 --- a/packages/scale/CHANGELOG.md +++ b/packages/scale/CHANGELOG.md @@ -1,5 +1,18 @@ # @tonaljs/scale +## 4.12.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord-type@5.0.3 + - @tonaljs/collection@4.8.1 + - @tonaljs/core@4.10.3 + - @tonaljs/note@4.10.1 + - @tonaljs/pcset@4.8.3 + - @tonaljs/scale-type@4.8.3 + ## 4.12.2 ### Patch Changes diff --git a/packages/scale/package.json b/packages/scale/package.json index 6dd0a641..1000289c 100644 --- a/packages/scale/package.json +++ b/packages/scale/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/scale", - "version": "4.12.2", + "version": "4.12.3", "description": "Musical scales and its relations", "keywords": [ "scale", @@ -16,12 +16,12 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord-type": "^5.0.0", - "@tonaljs/collection": "^4.8.0", - "@tonaljs/core": "^4.10.0", - "@tonaljs/note": "^4.10.0", - "@tonaljs/pcset": "^4.8.2", - "@tonaljs/scale-type": "^4.8.2" + "@tonaljs/chord-type": "^5.0.3", + "@tonaljs/collection": "^4.8.1", + "@tonaljs/core": "^4.10.3", + "@tonaljs/note": "^4.10.1", + "@tonaljs/pcset": "^4.8.3", + "@tonaljs/scale-type": "^4.8.3" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/time-signature/CHANGELOG.md b/packages/time-signature/CHANGELOG.md index 3c14595c..a690e6a5 100644 --- a/packages/time-signature/CHANGELOG.md +++ b/packages/time-signature/CHANGELOG.md @@ -1,5 +1,11 @@ # @tonaljs/time-signature +## 4.8.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility + ## 4.8.0 ### Minor Changes diff --git a/packages/time-signature/package.json b/packages/time-signature/package.json index 34e46f78..af2a38c1 100644 --- a/packages/time-signature/package.json +++ b/packages/time-signature/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/time-signature", - "version": "4.8.0", + "version": "4.8.1", "description": "Musical time signatures", "keywords": [ "time signature", diff --git a/packages/tonal/CHANGELOG.md b/packages/tonal/CHANGELOG.md index a1f2a2d3..dd1910e3 100644 --- a/packages/tonal/CHANGELOG.md +++ b/packages/tonal/CHANGELOG.md @@ -1,5 +1,34 @@ # tonal +## 5.1.3 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/abc-notation@4.8.1 + - @tonaljs/array@4.8.1 + - @tonaljs/chord@5.0.1 + - @tonaljs/chord-type@5.0.3 + - @tonaljs/collection@4.8.1 + - @tonaljs/core@4.10.3 + - @tonaljs/duration-value@4.8.1 + - @tonaljs/interval@4.8.1 + - @tonaljs/key@4.9.2 + - @tonaljs/midi@4.9.1 + - @tonaljs/mode@4.8.2 + - @tonaljs/note@4.10.1 + - @tonaljs/pcset@4.8.3 + - @tonaljs/progression@4.8.2 + - @tonaljs/range@4.8.2 + - @tonaljs/roman-numeral@4.8.1 + - @tonaljs/scale@4.12.3 + - @tonaljs/scale-type@4.8.3 + - @tonaljs/time-signature@4.8.1 + - @tonaljs/voice-leading@5.0.1 + - @tonaljs/voicing@5.0.1 + - @tonaljs/voicing-dictionary@5.0.1 + ## 5.1.2 ### Patch Changes diff --git a/packages/tonal/package.json b/packages/tonal/package.json index c2a863da..3416528b 100644 --- a/packages/tonal/package.json +++ b/packages/tonal/package.json @@ -1,6 +1,6 @@ { "name": "tonal", - "version": "5.1.2", + "version": "5.1.3", "description": "tonaljs music theory library", "keywords": [ "music", @@ -16,28 +16,28 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/abc-notation": "^4.8.0", - "@tonaljs/array": "^4.8.0", - "@tonaljs/chord-type": "^5.0.2", - "@tonaljs/chord": "^5.0.0", - "@tonaljs/collection": "^4.8.0", - "@tonaljs/core": "^4.10.2", - "@tonaljs/duration-value": "^4.8.0", - "@tonaljs/interval": "^4.8.0", - "@tonaljs/key": "^4.9.1", - "@tonaljs/midi": "^4.9.0", - "@tonaljs/mode": "^4.8.1", - "@tonaljs/note": "^4.10.0", - "@tonaljs/pcset": "^4.8.2", - "@tonaljs/progression": "^4.8.1", - "@tonaljs/range": "^4.8.1", - "@tonaljs/roman-numeral": "^4.8.0", - "@tonaljs/scale-type": "^4.8.2", - "@tonaljs/scale": "^4.12.2", - "@tonaljs/time-signature": "^4.8.0", - "@tonaljs/voice-leading": "^5.0.0", - "@tonaljs/voicing-dictionary": "^5.0.0", - "@tonaljs/voicing": "^5.0.0" + "@tonaljs/abc-notation": "^4.8.1", + "@tonaljs/array": "^4.8.1", + "@tonaljs/chord-type": "^5.0.3", + "@tonaljs/chord": "^5.0.1", + "@tonaljs/collection": "^4.8.1", + "@tonaljs/core": "^4.10.3", + "@tonaljs/duration-value": "^4.8.1", + "@tonaljs/interval": "^4.8.1", + "@tonaljs/key": "^4.9.2", + "@tonaljs/midi": "^4.9.1", + "@tonaljs/mode": "^4.8.2", + "@tonaljs/note": "^4.10.1", + "@tonaljs/pcset": "^4.8.3", + "@tonaljs/progression": "^4.8.2", + "@tonaljs/range": "^4.8.2", + "@tonaljs/roman-numeral": "^4.8.1", + "@tonaljs/scale-type": "^4.8.3", + "@tonaljs/scale": "^4.12.3", + "@tonaljs/time-signature": "^4.8.1", + "@tonaljs/voice-leading": "^5.0.1", + "@tonaljs/voicing-dictionary": "^5.0.1", + "@tonaljs/voicing": "^5.0.1" }, "author": "danigb@gmail.com", "license": "MIT", diff --git a/packages/voice-leading/CHANGELOG.md b/packages/voice-leading/CHANGELOG.md index f6d7d836..7e558fb0 100644 --- a/packages/voice-leading/CHANGELOG.md +++ b/packages/voice-leading/CHANGELOG.md @@ -1,5 +1,13 @@ # @tonaljs/voice-leading +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/note@4.10.1 + ## 5.0.0 ### Major Changes diff --git a/packages/voice-leading/package.json b/packages/voice-leading/package.json index f9c46643..82412119 100644 --- a/packages/voice-leading/package.json +++ b/packages/voice-leading/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/voice-leading", - "version": "5.0.0", + "version": "5.0.1", "description": "Voice leading logic for transitions between voicings", "keywords": [ "chord", @@ -17,7 +17,7 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/note": "^4.8.0" + "@tonaljs/note": "^4.10.1" }, "author": "felix91@gmail.com", "license": "MIT", diff --git a/packages/voicing-dictionary/CHANGELOG.md b/packages/voicing-dictionary/CHANGELOG.md index 386ce39d..f135fa1d 100644 --- a/packages/voicing-dictionary/CHANGELOG.md +++ b/packages/voicing-dictionary/CHANGELOG.md @@ -1,5 +1,15 @@ # @tonaljs/voicing-dictionary +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord@5.0.1 + - @tonaljs/note@4.10.1 + - @tonaljs/voice-leading@5.0.1 + ## 5.0.0 ### Major Changes diff --git a/packages/voicing-dictionary/package.json b/packages/voicing-dictionary/package.json index 051b2304..1bb75c17 100644 --- a/packages/voicing-dictionary/package.json +++ b/packages/voicing-dictionary/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/voicing-dictionary", - "version": "5.0.0", + "version": "5.0.1", "description": "Collections of chord voicings", "keywords": [ "chord", @@ -17,9 +17,9 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord": "^5.0.0", - "@tonaljs/note": "^4.8.0", - "@tonaljs/voice-leading": "^5.0.0" + "@tonaljs/chord": "^5.0.1", + "@tonaljs/note": "^4.10.1", + "@tonaljs/voice-leading": "^5.0.1" }, "author": "felix91@gmail.com", "license": "MIT", diff --git a/packages/voicing/CHANGELOG.md b/packages/voicing/CHANGELOG.md index 640d999f..f305ad60 100644 --- a/packages/voicing/CHANGELOG.md +++ b/packages/voicing/CHANGELOG.md @@ -1,5 +1,18 @@ # @tonaljs/voicing +## 5.0.1 + +### Patch Changes + +- Named type was renamed to NamedPitch. Add old export for backwards compatibility +- Updated dependencies + - @tonaljs/chord@5.0.1 + - @tonaljs/interval@4.8.1 + - @tonaljs/note@4.10.1 + - @tonaljs/range@4.8.2 + - @tonaljs/voice-leading@5.0.1 + - @tonaljs/voicing-dictionary@5.0.1 + ## 5.0.0 ### Major Changes diff --git a/packages/voicing/package.json b/packages/voicing/package.json index ea663b14..39e0fcb4 100644 --- a/packages/voicing/package.json +++ b/packages/voicing/package.json @@ -1,6 +1,6 @@ { "name": "@tonaljs/voicing", - "version": "5.0.0", + "version": "5.0.1", "description": "Voicings and Voice Leading for Chords", "keywords": [ "chord", @@ -17,12 +17,12 @@ ], "types": "dist/index.d.ts", "dependencies": { - "@tonaljs/chord": "^5.0.0", - "@tonaljs/interval": "^4.8.0", - "@tonaljs/note": "^4.8.0", - "@tonaljs/range": "^4.8.0", - "@tonaljs/voice-leading": "^5.0.0", - "@tonaljs/voicing-dictionary": "^5.0.0" + "@tonaljs/chord": "^5.0.1", + "@tonaljs/interval": "^4.8.1", + "@tonaljs/note": "^4.10.1", + "@tonaljs/range": "^4.8.2", + "@tonaljs/voice-leading": "^5.0.1", + "@tonaljs/voicing-dictionary": "^5.0.1" }, "author": "felix91@gmail.com", "license": "MIT", From 29d3bf0a79779e187f5a5320dce842b5f5cfb67d Mon Sep 17 00:00:00 2001 From: danigb Date: Thu, 4 Jan 2024 10:39:21 +0100 Subject: [PATCH 3/3] chore: update deps --- package.json | 2 +- yarn.lock | 1123 +++++++++++++++++++++++++++----------------------- 2 files changed, 610 insertions(+), 515 deletions(-) diff --git a/package.json b/package.json index 3f71338f..e718f782 100644 --- a/package.json +++ b/package.json @@ -56,8 +56,8 @@ "esbuild": "^0.19.6", "eslint": "^8.54.0", "husky": "^8.0.0", - "jest-config": "^29.5.0", "jest": "^29.5.0", + "jest-config": "^29.5.0", "lint-staged": "^15.1.0", "lodash": "^4.17.15", "prettier": "^3.1.0", diff --git a/yarn.lock b/yarn.lock index 0af527d6..fa3c60c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,58 +15,58 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" - integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.9": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3", "@babel/generator@^7.23.4", "@babel/generator@^7.7.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" - integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.4" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -137,19 +137,19 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" - integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== +"@babel/helpers@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.7.tgz#eb543c36f81da2873e47b76ee032343ac83bba60" + integrity sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.4" - "@babel/types" "^7.23.4" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" "@babel/highlight@^7.23.4": version "7.23.4" @@ -160,10 +160,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" - integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -264,9 +264,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" - integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.7.tgz#dd7c88deeb218a0f8bd34d5db1aa242e0f203193" + integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== dependencies: regenerator-runtime "^0.14.0" @@ -279,26 +279,26 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" - integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== dependencies: - "@babel/code-frame" "^7.23.4" - "@babel/generator" "^7.23.4" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.4" - "@babel/types" "^7.23.4" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.3.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" - integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -508,115 +508,120 @@ human-id "^1.0.2" prettier "^2.7.1" -"@esbuild/android-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456" - integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA== - -"@esbuild/android-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb" - integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA== - -"@esbuild/android-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7" - integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A== - -"@esbuild/darwin-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2" - integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw== - -"@esbuild/darwin-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac" - integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q== - -"@esbuild/freebsd-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575" - integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw== - -"@esbuild/freebsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3" - integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg== - -"@esbuild/linux-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098" - integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ== - -"@esbuild/linux-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f" - integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ== - -"@esbuild/linux-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d" - integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ== - -"@esbuild/linux-loong64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123" - integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ== - -"@esbuild/linux-mips64el@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24" - integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q== - -"@esbuild/linux-ppc64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951" - integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg== - -"@esbuild/linux-riscv64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b" - integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg== - -"@esbuild/linux-s390x@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a" - integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg== - -"@esbuild/linux-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b" - integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg== - -"@esbuild/netbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137" - integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw== - -"@esbuild/openbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d" - integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ== - -"@esbuild/sunos-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1" - integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w== - -"@esbuild/win32-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1" - integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg== - -"@esbuild/win32-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851" - integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw== - -"@esbuild/win32-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz#c8285183dbdb17008578dbacb6e22748709b4822" - integrity sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA== +"@esbuild/aix-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" + integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== + +"@esbuild/android-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" + integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== + +"@esbuild/android-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" + integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== + +"@esbuild/android-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" + integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== + +"@esbuild/darwin-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" + integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== + +"@esbuild/darwin-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" + integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== + +"@esbuild/freebsd-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" + integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== + +"@esbuild/freebsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" + integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== + +"@esbuild/linux-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" + integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== + +"@esbuild/linux-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" + integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== + +"@esbuild/linux-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" + integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== + +"@esbuild/linux-loong64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" + integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== + +"@esbuild/linux-mips64el@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" + integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== + +"@esbuild/linux-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" + integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== + +"@esbuild/linux-riscv64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" + integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== + +"@esbuild/linux-s390x@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" + integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== + +"@esbuild/linux-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" + integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== + +"@esbuild/netbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" + integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== + +"@esbuild/openbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" + integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== + +"@esbuild/sunos-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" + integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== + +"@esbuild/win32-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" + integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== + +"@esbuild/win32-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" + integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== + +"@esbuild/win32-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" + integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -630,10 +635,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" - integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -645,10 +650,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.54.0": - version "8.54.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" - integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== "@humanwhocodes/config-array@^0.11.13": version "0.11.13" @@ -669,6 +674,18 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -952,65 +969,75 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@rollup/rollup-android-arm-eabi@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.0.tgz#c08a454d70605aacad17530a953791ea385e37d5" - integrity sha512-keHkkWAe7OtdALGoutLY3utvthkGF+Y17ws9LYT8pxMBYXaCoH/8dXS2uzo6e8+sEhY7y/zi5RFo22Dy2lFpDw== - -"@rollup/rollup-android-arm64@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.0.tgz#e0cf96960405947c1a09a389467e6aa10ae1a226" - integrity sha512-y3Kt+34smKQNWilicPbBz/MXEY7QwDzMFNgwEWeYiOhUt9MTWKjHqe3EVkXwT2fR7izOvHpDWZ0o2IyD9SWX7A== - -"@rollup/rollup-darwin-arm64@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.0.tgz#6d2f53021fbb9fdecf60bfb6fd5d999aef8385e9" - integrity sha512-oLzzxcUIHltHxOCmaXl+pkIlU+uhSxef5HfntW7RsLh1eHm+vJzjD9Oo4oUKso4YuP4PpbFJNlZjJuOrxo8dPg== - -"@rollup/rollup-darwin-x64@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.0.tgz#b7d0a4bbe6fc493efa269a60a66dc070ac10e2bd" - integrity sha512-+ANnmjkcOBaV25n0+M0Bere3roeVAnwlKW65qagtuAfIxXF9YxUneRyAn/RDcIdRa7QrjRNJL3jR7T43ObGe8Q== - -"@rollup/rollup-linux-arm-gnueabihf@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.0.tgz#12fad1802f500a0196ab0bb4dbb776aaabdedcc7" - integrity sha512-tBTSIkjSVUyrekddpkAqKOosnj1Fc0ZY0rJL2bIEWPKqlEQk0paORL9pUIlt7lcGJi3LzMIlUGXvtNi1Z6MOCQ== - -"@rollup/rollup-linux-arm64-gnu@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.0.tgz#6de1caa2c9952d16dafa21dd26da9562d4ea2112" - integrity sha512-Ed8uJI3kM11de9S0j67wAV07JUNhbAqIrDYhQBrQW42jGopgheyk/cdcshgGO4fW5Wjq97COCY/BHogdGvKVNQ== - -"@rollup/rollup-linux-arm64-musl@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.0.tgz#ef9cae3d22c8c44ff4f271e308bf1c013348bdc0" - integrity sha512-mZoNQ/qK4D7SSY8v6kEsAAyDgznzLLuSFCA3aBHZTmf3HP/dW4tNLTtWh9+LfyO0Z1aUn+ecpT7IQ3WtIg3ViQ== - -"@rollup/rollup-linux-x64-gnu@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.0.tgz#e9071050bed7c64a9fd964cde3c8bd139bf8e489" - integrity sha512-rouezFHpwCqdEXsqAfNsTgSWO0FoZ5hKv5p+TGO5KFhyN/dvYXNMqMolOb8BkyKcPqjYRBeT+Z6V3aM26rPaYg== - -"@rollup/rollup-linux-x64-musl@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.0.tgz#a4c7f5e0c363b2c34f6a7566b1c9da00bf0b96d0" - integrity sha512-Bbm+fyn3S6u51urfj3YnqBXg5vI2jQPncRRELaucmhBVyZkbWClQ1fEsRmdnCPpQOQfkpg9gZArvtMVkOMsh1w== - -"@rollup/rollup-win32-arm64-msvc@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.0.tgz#9a7bfc660ac088d447858fc5223984deb979a55a" - integrity sha512-+MRMcyx9L2kTrTUzYmR61+XVsliMG4odFb5UmqtiT8xOfEicfYAGEuF/D1Pww1+uZkYhBqAHpvju7VN+GnC3ng== - -"@rollup/rollup-win32-ia32-msvc@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.0.tgz#7d5fb96e9f0120451da1fece5c74d2bb373f8925" - integrity sha512-rxfeE6K6s/Xl2HGeK6cO8SiQq3k/3BYpw7cfhW5Bk2euXNEpuzi2cc7llxx1si1QgwfjNtdRNTGqdBzGlFZGFw== - -"@rollup/rollup-win32-x64-msvc@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.0.tgz#15841505c7ec1648020941d04ca0210f88c59e3a" - integrity sha512-QqmCsydHS172Y0Kc13bkMXvipbJSvzeglBncJG3LsYJSiPlxYACz7MmJBs4A8l1oU+jfhYEIC/+AUSlvjmiX/g== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@rollup/rollup-android-arm-eabi@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.2.tgz#ccb02257556bacbc1e756ab9b0b973cea2c7a664" + integrity sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA== + +"@rollup/rollup-android-arm64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.2.tgz#21bd0fbafdf442c6a17645b840f6a94556b0e9bb" + integrity sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg== + +"@rollup/rollup-darwin-arm64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.2.tgz#9f2e5d5637677f9839dbe1622130d0592179136a" + integrity sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw== + +"@rollup/rollup-darwin-x64@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.2.tgz#1b06291ff1c41af94d2786cd167188c5bf7caec9" + integrity sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.2.tgz#147069948bba00f435122f411210624e72638ebf" + integrity sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ== + +"@rollup/rollup-linux-arm64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.2.tgz#3a50f0e7ae6e444d11c61fce12783196454a4efb" + integrity sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg== + +"@rollup/rollup-linux-arm64-musl@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.2.tgz#82b5e75484d91c25d4e649d018d9523e72d6dac2" + integrity sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g== + +"@rollup/rollup-linux-riscv64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.2.tgz#ca96f2d43a553d73aec736e991c07010561bc7a9" + integrity sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw== + +"@rollup/rollup-linux-x64-gnu@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.2.tgz#db1cece244ea46706c0e1a522ec19ca0173abc55" + integrity sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw== + +"@rollup/rollup-linux-x64-musl@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.2.tgz#c15b26b86827f75977bf59ebd41ce5d788713936" + integrity sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg== + +"@rollup/rollup-win32-arm64-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.2.tgz#60152948f9fb08e8c50c1555e334ca9f9f1f53aa" + integrity sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA== + +"@rollup/rollup-win32-ia32-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.2.tgz#657288cff10311f997d8dbd648590441760ae6d9" + integrity sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ== + +"@rollup/rollup-win32-x64-msvc@4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.2.tgz#830f3a3fba67f6216a5884368431918029045afe" + integrity sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1043,9 +1070,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" @@ -1058,9 +1085,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" @@ -1091,9 +1118,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.2": - version "29.5.10" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.10.tgz#a10fc5bab9e426081c12b2ef73d24d4f0c9b7f50" - integrity sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ== + version "29.5.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" + integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -1108,10 +1135,10 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== -"@types/node@*": - version "20.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" - integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== +"@types/node@*", "@types/node@^20.10.1": + version "20.10.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5" + integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== dependencies: undici-types "~5.26.4" @@ -1120,13 +1147,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^20.10.1": - version "20.10.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.1.tgz#d2c96f356c3125fedc983d74c424910c3767141c" - integrity sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg== - dependencies: - undici-types "~5.26.4" - "@types/normalize-package-data@^2.4.0": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -1155,15 +1175,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.11.0": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz#f98bd887bf95551203c917e734d113bf8d527a0c" - integrity sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA== + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.17.0.tgz#dfc38f790704ba8a54a1277c51efdb489f6ecf9f" + integrity sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.13.1" - "@typescript-eslint/type-utils" "6.13.1" - "@typescript-eslint/utils" "6.13.1" - "@typescript-eslint/visitor-keys" "6.13.1" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/type-utils" "6.17.0" + "@typescript-eslint/utils" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -1172,71 +1192,72 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.11.0": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.13.1.tgz#29d6d4e5fab4669e58bc15f6904b67da65567487" - integrity sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ== - dependencies: - "@typescript-eslint/scope-manager" "6.13.1" - "@typescript-eslint/types" "6.13.1" - "@typescript-eslint/typescript-estree" "6.13.1" - "@typescript-eslint/visitor-keys" "6.13.1" + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.17.0.tgz#8cd7a0599888ca6056082225b2fdf9a635bf32a1" + integrity sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A== + dependencies: + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz#58c7c37c6a957d3d9f59bc4f64c2888e0cac1d70" - integrity sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ== +"@typescript-eslint/scope-manager@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" + integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== dependencies: - "@typescript-eslint/types" "6.13.1" - "@typescript-eslint/visitor-keys" "6.13.1" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" -"@typescript-eslint/type-utils@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz#e6e5885e387841cae9c38fc0638fd8b7561973d6" - integrity sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ== +"@typescript-eslint/type-utils@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.17.0.tgz#5febad3f523e393006614cbda28b826925b728d5" + integrity sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg== dependencies: - "@typescript-eslint/typescript-estree" "6.13.1" - "@typescript-eslint/utils" "6.13.1" + "@typescript-eslint/typescript-estree" "6.17.0" + "@typescript-eslint/utils" "6.17.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.13.1.tgz#b56f26130e7eb8fa1e429c75fb969cae6ad7bb5c" - integrity sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg== +"@typescript-eslint/types@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" + integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== -"@typescript-eslint/typescript-estree@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz#d01dda78d2487434d1c503853fa00291c566efa4" - integrity sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ== +"@typescript-eslint/typescript-estree@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" + integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== dependencies: - "@typescript-eslint/types" "6.13.1" - "@typescript-eslint/visitor-keys" "6.13.1" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.13.1.tgz#925b3a2453a71ada914ae329b7bb7e7d96634b2f" - integrity sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw== +"@typescript-eslint/utils@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e" + integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.13.1" - "@typescript-eslint/types" "6.13.1" - "@typescript-eslint/typescript-estree" "6.13.1" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.13.1": - version "6.13.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz#c4b692dcc23a4fc60685b718f10fde789d65a540" - integrity sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ== +"@typescript-eslint/visitor-keys@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" + integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== dependencies: - "@typescript-eslint/types" "6.13.1" + "@typescript-eslint/types" "6.17.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -1250,9 +1271,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== ajv@^6.12.4: version "6.12.6" @@ -1276,12 +1297,12 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - type-fest "^1.0.2" + type-fest "^3.0.0" ansi-regex@^5.0.1: version "5.0.1" @@ -1317,7 +1338,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.1.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -1499,14 +1520,14 @@ breakword@^1.0.5: dependencies: wcwidth "^1.0.1" -browserslist@^4.21.9: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" bs-logger@0.x: @@ -1573,10 +1594,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001541: - version "1.0.30001565" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz#a528b253c8a2d95d2b415e11d8b9942acc100c4f" - integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w== +caniuse-lite@^1.0.30001565: + version "1.0.30001574" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz#fb4f1359c77f6af942510493672e1ec7ec80230c" + integrity sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg== chalk@5.3.0: version "5.3.0" @@ -1642,13 +1663,13 @@ cli-cursor@^4.0.0: dependencies: restore-cursor "^4.0.0" -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== dependencies: slice-ansi "^5.0.0" - string-width "^5.0.0" + string-width "^7.0.0" cliui@^6.0.0: version "6.0.0" @@ -1754,7 +1775,7 @@ cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1839,7 +1860,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -1882,16 +1903,21 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.535: - version "1.4.596" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.596.tgz#6752d1aa795d942d49dfc5d3764d6ea283fab1d7" - integrity sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg== +electron-to-chromium@^1.4.601: + version "1.4.620" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz#a6481e0703f8df1e6821063fb43c9b818a7a2ef4" + integrity sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g== emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1988,32 +2014,33 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" esbuild@^0.19.2, esbuild@^0.19.6: - version "0.19.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.8.tgz#ad05b72281d84483fa6b5345bd246c27a207b8f1" - integrity sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w== + version "0.19.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" + integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== optionalDependencies: - "@esbuild/android-arm" "0.19.8" - "@esbuild/android-arm64" "0.19.8" - "@esbuild/android-x64" "0.19.8" - "@esbuild/darwin-arm64" "0.19.8" - "@esbuild/darwin-x64" "0.19.8" - "@esbuild/freebsd-arm64" "0.19.8" - "@esbuild/freebsd-x64" "0.19.8" - "@esbuild/linux-arm" "0.19.8" - "@esbuild/linux-arm64" "0.19.8" - "@esbuild/linux-ia32" "0.19.8" - "@esbuild/linux-loong64" "0.19.8" - "@esbuild/linux-mips64el" "0.19.8" - "@esbuild/linux-ppc64" "0.19.8" - "@esbuild/linux-riscv64" "0.19.8" - "@esbuild/linux-s390x" "0.19.8" - "@esbuild/linux-x64" "0.19.8" - "@esbuild/netbsd-x64" "0.19.8" - "@esbuild/openbsd-x64" "0.19.8" - "@esbuild/sunos-x64" "0.19.8" - "@esbuild/win32-arm64" "0.19.8" - "@esbuild/win32-ia32" "0.19.8" - "@esbuild/win32-x64" "0.19.8" + "@esbuild/aix-ppc64" "0.19.11" + "@esbuild/android-arm" "0.19.11" + "@esbuild/android-arm64" "0.19.11" + "@esbuild/android-x64" "0.19.11" + "@esbuild/darwin-arm64" "0.19.11" + "@esbuild/darwin-x64" "0.19.11" + "@esbuild/freebsd-arm64" "0.19.11" + "@esbuild/freebsd-x64" "0.19.11" + "@esbuild/linux-arm" "0.19.11" + "@esbuild/linux-arm64" "0.19.11" + "@esbuild/linux-ia32" "0.19.11" + "@esbuild/linux-loong64" "0.19.11" + "@esbuild/linux-mips64el" "0.19.11" + "@esbuild/linux-ppc64" "0.19.11" + "@esbuild/linux-riscv64" "0.19.11" + "@esbuild/linux-s390x" "0.19.11" + "@esbuild/linux-x64" "0.19.11" + "@esbuild/netbsd-x64" "0.19.11" + "@esbuild/openbsd-x64" "0.19.11" + "@esbuild/sunos-x64" "0.19.11" + "@esbuild/win32-arm64" "0.19.11" + "@esbuild/win32-ia32" "0.19.11" + "@esbuild/win32-x64" "0.19.11" escalade@^3.1.1: version "3.1.1" @@ -2049,14 +2076,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.54.0: - version "8.54.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" - integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.3" - "@eslint/js" "8.54.0" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -2222,9 +2249,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== dependencies: reusify "^1.0.4" @@ -2294,6 +2321,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -2352,6 +2387,11 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" @@ -2399,17 +2439,16 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^7.1.3, glob@^7.1.4: version "7.2.3" @@ -2429,9 +2468,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -2687,6 +2726,13 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -2854,6 +2900,15 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -3314,12 +3369,7 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: +lilconfig@3.0.0, lilconfig@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== @@ -3330,32 +3380,32 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.1.0.tgz#c0f8e4d96ac3c09beac5c76d08524d6000c207b4" - integrity sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw== + version "15.2.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.0.tgz#3111534ca58096a3c8f70b044b6e7fe21b36f859" + integrity sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ== dependencies: chalk "5.3.0" commander "11.1.0" debug "4.3.4" execa "8.0.1" - lilconfig "2.1.0" - listr2 "7.0.2" + lilconfig "3.0.0" + listr2 "8.0.0" micromatch "4.0.5" pidtree "0.6.0" string-argv "0.3.2" yaml "2.3.4" -listr2@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" - integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== +listr2@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.0.tgz#aa7c230995f8ce378585f7c96c0c6d1cefa4700d" + integrity sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg== dependencies: - cli-truncate "^3.1.0" + cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^5.0.1" + log-update "^6.0.0" rfdc "^1.3.0" - wrap-ansi "^8.1.0" + wrap-ansi "^9.0.0" load-tsconfig@^0.2.3: version "0.2.5" @@ -3411,16 +3461,16 @@ lodash@^4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== +log-update@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" + integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== dependencies: - ansi-escapes "^5.0.0" + ansi-escapes "^6.2.0" cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" + slice-ansi "^7.0.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" lru-cache@^4.0.1: version "4.1.5" @@ -3444,6 +3494,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -3533,6 +3588,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +minimatch@9.0.3, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -3540,13 +3602,6 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -3556,6 +3611,11 @@ minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + mixme@^0.5.1: version "0.5.10" resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" @@ -3585,10 +3645,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^2.5.0: version "2.5.0" @@ -3613,9 +3673,9 @@ npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== dependencies: path-key "^4.0.0" @@ -3635,12 +3695,12 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -3774,6 +3834,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -3840,9 +3908,9 @@ prettier@^2.7.1: integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== prettier@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" - integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" + integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" @@ -3936,9 +4004,9 @@ redent@^3.0.0: strip-indent "^3.0.0" regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regexp.prototype.flags@^1.5.1: version "1.5.1" @@ -4016,22 +4084,23 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.0.2: - version "4.6.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.6.0.tgz#4f966f6dd3f6bafd01b864d68ba078d308b864fa" - integrity sha512-R8i5Her4oO1LiMQ3jKf7MUglYV/mhQ5g5OKeld5CnkmPdIGo79FDDQYqPhq/PCVuTQVuxsWgIbDy9F+zdHn80w== + version "4.9.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.2.tgz#19d730219b7ec5f51372c6cf15cfb841990489fe" + integrity sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q== optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.6.0" - "@rollup/rollup-android-arm64" "4.6.0" - "@rollup/rollup-darwin-arm64" "4.6.0" - "@rollup/rollup-darwin-x64" "4.6.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.6.0" - "@rollup/rollup-linux-arm64-gnu" "4.6.0" - "@rollup/rollup-linux-arm64-musl" "4.6.0" - "@rollup/rollup-linux-x64-gnu" "4.6.0" - "@rollup/rollup-linux-x64-musl" "4.6.0" - "@rollup/rollup-win32-arm64-msvc" "4.6.0" - "@rollup/rollup-win32-ia32-msvc" "4.6.0" - "@rollup/rollup-win32-x64-msvc" "4.6.0" + "@rollup/rollup-android-arm-eabi" "4.9.2" + "@rollup/rollup-android-arm64" "4.9.2" + "@rollup/rollup-darwin-arm64" "4.9.2" + "@rollup/rollup-darwin-x64" "4.9.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.2" + "@rollup/rollup-linux-arm64-gnu" "4.9.2" + "@rollup/rollup-linux-arm64-musl" "4.9.2" + "@rollup/rollup-linux-riscv64-gnu" "4.9.2" + "@rollup/rollup-linux-x64-gnu" "4.9.2" + "@rollup/rollup-linux-x64-musl" "4.9.2" + "@rollup/rollup-win32-arm64-msvc" "4.9.2" + "@rollup/rollup-win32-ia32-msvc" "4.9.2" + "@rollup/rollup-win32-x64-msvc" "4.9.2" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4130,10 +4199,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@^0.14.1: - version "0.14.5" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.5.tgz#375dd214e57eccb04f0daf35a32aa615861deb93" - integrity sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw== +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== dependencies: ansi-sequence-parser "^1.1.0" jsonc-parser "^3.2.0" @@ -4154,7 +4223,7 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -4177,6 +4246,14 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +slice-ansi@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + smartwrap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" @@ -4275,7 +4352,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4284,7 +4361,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0, string-width@^5.0.1: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -4293,6 +4370,15 @@ string-width@^5.0.0, string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string-width@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.0.0.tgz#14aa1b7aaa126d5b64fa79d3c894da8a9650ba06" + integrity sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -4320,14 +4406,14 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -4367,13 +4453,13 @@ strip-json-comments@^3.1.1: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== sucrase@^3.20.3: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -4536,47 +4622,47 @@ tty-table@^4.1.5: wcwidth "^1.0.1" yargs "^17.7.1" -turbo-darwin-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz#5a8717c1372f2a75e8cfe0b4b6455119ce410b19" - integrity sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg== +turbo-darwin-64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.11.2.tgz#fc3d4d74b325a27aef11b6a52a61f07d466846b9" + integrity sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og== -turbo-darwin-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz#19b5b63acf7ee0fce7e1fe5850e093c2ac9c73f5" - integrity sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw== +turbo-darwin-arm64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.11.2.tgz#583a4d0025bc3f953a9eeb7065cb173f481a9965" + integrity sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA== -turbo-linux-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz#ee97c0011553a96bd7995e7bcc6e65aab8996798" - integrity sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg== +turbo-linux-64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.11.2.tgz#55ef996d856cb397b9fb2855a554ccef1cee9dd7" + integrity sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A== -turbo-linux-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz#2723cc2a846d89df7484002161b25673f4f04009" - integrity sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw== +turbo-linux-arm64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.11.2.tgz#64d6093c9a2f32f410624564fd10685c847d947e" + integrity sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw== -turbo-windows-64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz#87c46a78502a86dec73634b255a6b3471285969b" - integrity sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw== +turbo-windows-64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.11.2.tgz#f4164be9c42796c86ca3929e27f1992a4310b9ed" + integrity sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg== -turbo-windows-arm64@1.10.16: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz#a6208c2bc27e5e6ef0aa4a3e64389c4285c3f274" - integrity sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ== +turbo-windows-arm64@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.11.2.tgz#ca1b4d7ac6fe8c931baef1a270ac07bbd924277b" + integrity sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ== turbo@^1.10.3: - version "1.10.16" - resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.10.16.tgz#51601a65a3aa56d1b9d9cb9a2ab3a5a2eab41e19" - integrity sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg== + version "1.11.2" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.11.2.tgz#7bae6df12c210e9b12973aad8f0e7b077039d4ce" + integrity sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A== optionalDependencies: - turbo-darwin-64 "1.10.16" - turbo-darwin-arm64 "1.10.16" - turbo-linux-64 "1.10.16" - turbo-linux-arm64 "1.10.16" - turbo-windows-64 "1.10.16" - turbo-windows-arm64 "1.10.16" + turbo-darwin-64 "1.11.2" + turbo-darwin-arm64 "1.11.2" + turbo-linux-64 "1.11.2" + turbo-linux-arm64 "1.11.2" + turbo-windows-64 "1.11.2" + turbo-windows-arm64 "1.11.2" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4615,10 +4701,10 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +type-fest@^3.0.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== typed-array-buffer@^1.0.0: version "1.0.0" @@ -4660,19 +4746,19 @@ typed-array-length@^1.0.4: is-typed-array "^1.1.9" typedoc@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.4.tgz#5c2c0677881f504e41985f29d9aef0dbdb6f1e6f" - integrity sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA== + version "0.25.6" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.6.tgz#1505538aecea511dd669652c71d042a2427bd4fc" + integrity sha512-1rdionQMpOkpA58qfym1J+YD+ukyA1IEIa4VZahQI2ZORez7dhOvEyUotQL/8rSoMBopdzOS+vAIsORpQO4cTA== dependencies: lunr "^2.3.9" marked "^4.3.0" minimatch "^9.0.3" - shiki "^0.14.1" + shiki "^0.14.7" typescript@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" - integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== unbox-primitive@^1.0.2: version "1.0.2" @@ -4813,25 +4899,25 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== @@ -4840,6 +4926,15 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"