( root: string, mode: string, progressionInput: string )
| 87 | }; |
| 88 | |
| 89 | const parseProgression = ( |
| 90 | root: string, |
| 91 | mode: string, |
| 92 | progressionInput: string |
| 93 | ): string => { |
| 94 | if (progressionInput === 'random') { |
| 95 | const modeType = mode === 'minor' || mode === 'm' ? 'minor' : 'major'; |
| 96 | const randomProg = progression(modeType, 4).join(' '); |
| 97 | return getChordsByProgression(`${root} ${mode}`, randomProg); |
| 98 | } |
| 99 | |
| 100 | if (/^[1-7]+$/.test(progressionInput)) { |
| 101 | const converted = romanByDigit(progressionInput, mode); |
| 102 | return getChordsByProgression(`${root} ${mode}`, converted.chordDegrees); |
| 103 | } |
| 104 | |
| 105 | if (/^[ivIV°+7\s,]+$/.test(progressionInput)) { |
| 106 | const normalized = progressionInput.replace(/\s*,+\s*/g, ' '); |
| 107 | return getChordsByProgression(`${root} ${mode}`, normalized); |
| 108 | } |
| 109 | |
| 110 | return progressionInput.replace(/-/g, ' '); |
| 111 | }; |
| 112 | |
| 113 | const normalizeArpOrder = (order: string): string => { |
| 114 | if (!/^\d+$/.test(order)) { |
no test coverage detected