chordsheetjs 5.3.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports["default"] = exports._KEY = exports.YEAR = exports.TRANSPOSE = exports.TITLE = exports.TIME = exports.TEMPO = exports.SUBTITLE = exports.START_OF_VERSE = exports.START_OF_TAB = exports.START_OF_CHORUS = exports.READ_ONLY_TAGS = exports.META_TAGS = exports.LYRICIST = exports.KEY = exports.END_OF_VERSE = exports.END_OF_TAB = exports.END_OF_CHORUS = exports.DURATION = exports.COPYRIGHT = exports.COMPOSER = exports.COMMENT = exports.CAPO = exports.ARTIST = exports.ALBUM = void 0;
6
+ exports["default"] = exports._KEY = exports.YEAR = exports.TRANSPOSE = exports.TITLE = exports.TIME = exports.TEMPO = exports.SUBTITLE = exports.START_OF_VERSE = exports.START_OF_TAB = exports.START_OF_CHORUS = exports.READ_ONLY_TAGS = exports.NEW_KEY = exports.META_TAGS = exports.LYRICIST = exports.KEY = exports.END_OF_VERSE = exports.END_OF_TAB = exports.END_OF_CHORUS = exports.DURATION = exports.COPYRIGHT = exports.COMPOSER = exports.COMMENT = exports.CAPO = exports.ARTIST = exports.ALBUM = void 0;
7
7
  exports.isReadonlyTag = isReadonlyTag;
8
8
 
9
9
  var _ALIASES;
@@ -162,11 +162,18 @@ var TITLE = 'title';
162
162
  exports.TITLE = TITLE;
163
163
  var TRANSPOSE = 'transpose';
164
164
  /**
165
- * Year meta directive. See https://www.chordpro.org/chordpro/directives-year/
165
+ * New Key meta directive. See: https://github.com/PraiseCharts/ChordChartJS/issues/53
166
166
  * @type {string}
167
167
  */
168
168
 
169
169
  exports.TRANSPOSE = TRANSPOSE;
170
+ var NEW_KEY = 'new_key';
171
+ /**
172
+ * Year meta directive. See https://www.chordpro.org/chordpro/directives-year/
173
+ * @type {string}
174
+ */
175
+
176
+ exports.NEW_KEY = NEW_KEY;
170
177
  var YEAR = 'year';
171
178
  exports.YEAR = YEAR;
172
179
  var TITLE_SHORT = 't';
@@ -176,12 +183,13 @@ var START_OF_CHORUS_SHORT = 'soc';
176
183
  var END_OF_CHORUS_SHORT = 'eoc';
177
184
  var START_OF_TAB_SHORT = 'sot';
178
185
  var END_OF_TAB_SHORT = 'eot';
186
+ var NEW_KEY_SHORT = 'nk';
179
187
  var RENDERABLE_TAGS = [COMMENT];
180
188
  var META_TAGS = [ALBUM, ARTIST, CAPO, COMPOSER, COPYRIGHT, DURATION, KEY, LYRICIST, TEMPO, TIME, TITLE, SUBTITLE, YEAR];
181
189
  exports.META_TAGS = META_TAGS;
182
190
  var READ_ONLY_TAGS = [_KEY];
183
191
  exports.READ_ONLY_TAGS = READ_ONLY_TAGS;
184
- var ALIASES = (_ALIASES = {}, _defineProperty(_ALIASES, TITLE_SHORT, TITLE), _defineProperty(_ALIASES, SUBTITLE_SHORT, SUBTITLE), _defineProperty(_ALIASES, COMMENT_SHORT, COMMENT), _defineProperty(_ALIASES, START_OF_CHORUS_SHORT, START_OF_CHORUS), _defineProperty(_ALIASES, END_OF_CHORUS_SHORT, END_OF_CHORUS), _defineProperty(_ALIASES, START_OF_TAB_SHORT, START_OF_TAB), _defineProperty(_ALIASES, END_OF_TAB_SHORT, END_OF_TAB), _ALIASES);
192
+ var ALIASES = (_ALIASES = {}, _defineProperty(_ALIASES, TITLE_SHORT, TITLE), _defineProperty(_ALIASES, SUBTITLE_SHORT, SUBTITLE), _defineProperty(_ALIASES, COMMENT_SHORT, COMMENT), _defineProperty(_ALIASES, START_OF_CHORUS_SHORT, START_OF_CHORUS), _defineProperty(_ALIASES, END_OF_CHORUS_SHORT, END_OF_CHORUS), _defineProperty(_ALIASES, START_OF_TAB_SHORT, START_OF_TAB), _defineProperty(_ALIASES, END_OF_TAB_SHORT, END_OF_TAB), _defineProperty(_ALIASES, NEW_KEY_SHORT, NEW_KEY), _ALIASES);
185
193
  var META_TAG_REGEX = /^meta:\s*([^:\s]+)(\s*(.+))?$/;
186
194
  var TAG_REGEX = /^([^:\s]+)(:?\s*(.+))?$/;
187
195
  var CUSTOM_META_TAG_NAME_REGEX = /^x_(.+)$/;
@@ -263,7 +271,7 @@ var Tag = /*#__PURE__*/function () {
263
271
  */
264
272
  function get() {
265
273
  if (this._value) {
266
- return this._value.trim();
274
+ return "".concat(this._value).trim();
267
275
  }
268
276
 
269
277
  return this._value || null;
@@ -309,13 +317,19 @@ var Tag = /*#__PURE__*/function () {
309
317
  }, {
310
318
  key: "clone",
311
319
  value: function clone() {
312
- return new Tag(this.name, this.value);
320
+ return new Tag(this._originalName, this.value);
313
321
  }
314
322
  }, {
315
323
  key: "toString",
316
324
  value: function toString() {
317
325
  return "Tag(name=".concat(this.name, ", value=").concat(this.name, ")");
318
326
  }
327
+ }, {
328
+ key: "set",
329
+ value: function set(_ref2) {
330
+ var value = _ref2.value;
331
+ return new Tag(this._originalName, value);
332
+ }
319
333
  }], [{
320
334
  key: "parse",
321
335
  value: function parse(tag) {
@@ -379,7 +379,7 @@ templates['html_div_formatter'] = template({
379
379
  return undefined;
380
380
  };
381
381
 
382
- return "<div class=\"column\"><div class=\"chord\">" + alias3((lookupProperty(helpers, "renderChord") || depth0 && lookupProperty(depth0, "renderChord") || alias2).call(alias1, depth0 != null ? lookupProperty(depth0, "chords") : depth0, (stack1 = blockParams[3][0]) != null ? lookupProperty(stack1, "key") : stack1, (stack1 = (stack1 = data && lookupProperty(data, "root")) && lookupProperty(stack1, "song")) && lookupProperty(stack1, "key"), {
382
+ return "<div class=\"column\"><div class=\"chord\">" + alias3((lookupProperty(helpers, "renderChord") || depth0 && lookupProperty(depth0, "renderChord") || alias2).call(alias1, depth0 != null ? lookupProperty(depth0, "chords") : depth0, (stack1 = blockParams[3][0]) != null ? lookupProperty(stack1, "key") : stack1, (stack1 = blockParams[3][0]) != null ? lookupProperty(stack1, "transposeKey") : stack1, (stack1 = data && lookupProperty(data, "root")) && lookupProperty(stack1, "song"), {
383
383
  "name": "renderChord",
384
384
  "hash": {},
385
385
  "data": data,
@@ -391,7 +391,7 @@ templates['html_div_formatter'] = template({
391
391
  },
392
392
  "end": {
393
393
  "line": 18,
394
- "column": 103
394
+ "column": 117
395
395
  }
396
396
  }
397
397
  })) + "</div><div class=\"lyrics\">" + alias3((helper = (helper = lookupProperty(helpers, "lyrics") || (depth0 != null ? lookupProperty(depth0, "lyrics") : depth0)) != null ? helper : alias2, typeof helper === "function" ? helper.call(alias1, {
@@ -402,11 +402,11 @@ templates['html_div_formatter'] = template({
402
402
  "loc": {
403
403
  "start": {
404
404
  "line": 18,
405
- "column": 129
405
+ "column": 143
406
406
  },
407
407
  "end": {
408
408
  "line": 18,
409
- "column": 139
409
+ "column": 153
410
410
  }
411
411
  }
412
412
  }) : helper)) + "</div></div>";
@@ -416,7 +416,7 @@ templates['html_table_formatter'] = template({
416
416
  return undefined;
417
417
  };
418
418
 
419
- return "<td class=\"chord\">" + container.escapeExpression((lookupProperty(helpers, "renderChord") || depth0 && lookupProperty(depth0, "renderChord") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, depth0 != null ? lookupProperty(depth0, "chords") : depth0, (stack1 = blockParams[4][0]) != null ? lookupProperty(stack1, "key") : stack1, (stack1 = (stack1 = data && lookupProperty(data, "root")) && lookupProperty(stack1, "song")) && lookupProperty(stack1, "key"), {
419
+ return "<td class=\"chord\">" + container.escapeExpression((lookupProperty(helpers, "renderChord") || depth0 && lookupProperty(depth0, "renderChord") || container.hooks.helperMissing).call(depth0 != null ? depth0 : container.nullContext || {}, depth0 != null ? lookupProperty(depth0, "chords") : depth0, (stack1 = blockParams[4][0]) != null ? lookupProperty(stack1, "key") : stack1, (stack1 = blockParams[4][0]) != null ? lookupProperty(stack1, "transposeKey") : stack1, (stack1 = data && lookupProperty(data, "root")) && lookupProperty(stack1, "song"), {
420
420
  "name": "renderChord",
421
421
  "hash": {},
422
422
  "data": data,
@@ -428,7 +428,7 @@ templates['html_table_formatter'] = template({
428
428
  },
429
429
  "end": {
430
430
  "line": 21,
431
- "column": 88
431
+ "column": 102
432
432
  }
433
433
  }
434
434
  })) + "</td>";
@@ -115,7 +115,7 @@ var TextFormatter = /*#__PURE__*/function () {
115
115
  }, {
116
116
  key: "chordLyricsPairLength",
117
117
  value: function chordLyricsPairLength(chordLyricsPair, line) {
118
- var chords = (0, _helpers.renderChord)(chordLyricsPair.chords, line.key, this.song.key);
118
+ var chords = (0, _helpers.renderChord)(chordLyricsPair.chords, line.key, line.transposeKey, this.song);
119
119
  var lyrics = chordLyricsPair.lyrics;
120
120
  var chordsLength = (chords || '').length;
121
121
  var lyricsLength = (lyrics || '').length;
@@ -134,7 +134,7 @@ var TextFormatter = /*#__PURE__*/function () {
134
134
  }
135
135
 
136
136
  if (item instanceof _chord_lyrics_pair["default"]) {
137
- var chords = (0, _helpers.renderChord)(item.chords, line.key, this.song.key);
137
+ var chords = (0, _helpers.renderChord)(item.chords, line.key, line.transposeKey, this.song);
138
138
  return (0, _utilities.padLeft)(chords, this.chordLyricsPairLength(item, line));
139
139
  }
140
140
 
package/lib/helpers.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.renderChord = renderChord;
7
+ exports.transposeDistance = transposeDistance;
7
8
 
8
9
  var _chord = _interopRequireDefault(require("./chord"));
9
10
 
@@ -13,20 +14,43 @@ var _key = _interopRequireDefault(require("./key"));
13
14
 
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
16
 
16
- function transposeDistance(lineKey, songKey) {
17
- if (/^\d+$/.test(lineKey)) {
18
- return parseInt(lineKey, 10);
17
+ function transposeDistance(transposeKey, songKey) {
18
+ if (/^\d+$/.test(transposeKey)) {
19
+ return parseInt(transposeKey, 10);
19
20
  }
20
21
 
21
- return _key["default"].distance(songKey, lineKey);
22
+ return _key["default"].distance(songKey, transposeKey);
22
23
  }
23
- /* eslint import/prefer-default-export: 0 */
24
24
 
25
+ function chordTransposeDistance(capo, transposeKey, songKey) {
26
+ var transpose = -1 * (capo || 0);
25
27
 
26
- function renderChord(chord, lineKey, songKey) {
27
- if ((0, _utilities.presence)(chord) && (0, _utilities.presence)(lineKey) && (0, _utilities.presence)(songKey)) {
28
- return _chord["default"].parse(chord).transpose(transposeDistance(lineKey, songKey)).useModifier(lineKey.modifier).toString();
28
+ if ((0, _utilities.isPresent)(transposeKey) && (0, _utilities.isPresent)(songKey)) {
29
+ transpose += transposeDistance(transposeKey, songKey);
29
30
  }
30
31
 
31
- return chord;
32
+ return transpose;
33
+ }
34
+
35
+ function renderChord(chord, lineKey, transposeKey, song) {
36
+ var chordObj = _chord["default"].parse(chord);
37
+
38
+ var capo = song.capo,
39
+ songKey = song.key;
40
+
41
+ if (!chordObj) {
42
+ return chord;
43
+ }
44
+
45
+ chordObj = chordObj.transpose(chordTransposeDistance(capo, transposeKey, songKey));
46
+
47
+ if ((0, _utilities.isPresent)(transposeKey)) {
48
+ chordObj = chordObj.useModifier(transposeKey.modifier);
49
+ }
50
+
51
+ if ((0, _utilities.isPresent)(lineKey)) {
52
+ chordObj = chordObj.normalize(lineKey);
53
+ }
54
+
55
+ return chordObj.toString();
32
56
  }
package/lib/key.js CHANGED
@@ -11,6 +11,8 @@ var _note = _interopRequireDefault(require("./note"));
11
11
 
12
12
  var _constants = require("./constants");
13
13
 
14
+ var _enharmonicNormalize = _interopRequireDefault(require("./normalize_mappings/enharmonic-normalize"));
15
+
14
16
  var _MODIFIER_TRANSPOSITI;
15
17
 
16
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -43,14 +45,16 @@ var FLAT = 'b';
43
45
  var SHARP = '#';
44
46
  var MODIFIER_TRANSPOSITION = (_MODIFIER_TRANSPOSITI = {}, _defineProperty(_MODIFIER_TRANSPOSITI, SHARP, 1), _defineProperty(_MODIFIER_TRANSPOSITI, FLAT, -1), _MODIFIER_TRANSPOSITI);
45
47
 
46
- var symbolKeyRegex = /*#__PURE__*/_wrapRegExp(/^([A-G])(#|b)?$/i, {
48
+ var symbolKeyRegex = /*#__PURE__*/_wrapRegExp(/^([A-G])(#|b)?(m)?$/i, {
47
49
  note: 1,
48
- modifier: 2
50
+ modifier: 2,
51
+ minor: 3
49
52
  });
50
53
 
51
- var numericKeyRegex = /*#__PURE__*/_wrapRegExp(/^(#|b)?([1-7])$/, {
54
+ var numericKeyRegex = /*#__PURE__*/_wrapRegExp(/^(#|b)?([1-7])(m)?$/, {
52
55
  modifier: 1,
53
- note: 2
56
+ note: 2,
57
+ minor: 3
54
58
  });
55
59
 
56
60
  var numeralKeyRegex = /*#__PURE__*/_wrapRegExp(/^(#|b)?(I{1,3}|IV|VI{0,2}|i{1,3}|iv|vi{0,2})$/, {
@@ -66,7 +70,9 @@ var Key = /*#__PURE__*/function () {
66
70
  function Key(_ref) {
67
71
  var note = _ref.note,
68
72
  _ref$modifier = _ref.modifier,
69
- modifier = _ref$modifier === void 0 ? null : _ref$modifier;
73
+ modifier = _ref$modifier === void 0 ? null : _ref$modifier,
74
+ _ref$minor = _ref.minor,
75
+ minor = _ref$minor === void 0 ? false : _ref$minor;
70
76
 
71
77
  _classCallCheck(this, Key);
72
78
 
@@ -74,6 +80,7 @@ var Key = /*#__PURE__*/function () {
74
80
 
75
81
  this.note = note instanceof _note["default"] ? note : _note["default"].parse(note);
76
82
  this.modifier = modifier || null;
83
+ this.minor = !!minor || false;
77
84
  }
78
85
 
79
86
  _createClass(Key, [{
@@ -100,6 +107,21 @@ var Key = /*#__PURE__*/function () {
100
107
  value: function clone() {
101
108
  return _classPrivateMethodGet(this, _set, _set2).call(this, {});
102
109
  }
110
+ }, {
111
+ key: "toChordSymbol",
112
+ value: function toChordSymbol(key) {
113
+ if (this.is(_constants.SYMBOL)) {
114
+ return this.clone();
115
+ }
116
+
117
+ var transposeDistance = this.note.getTransposeDistance(key.minor) + (MODIFIER_TRANSPOSITION[this.modifier] || 0);
118
+ return key.transpose(transposeDistance).normalize().useModifier(key.modifier);
119
+ }
120
+ }, {
121
+ key: "toChordSymbolString",
122
+ value: function toChordSymbolString(key) {
123
+ return this.toChordSymbol(key).toString();
124
+ }
103
125
  }, {
104
126
  key: "is",
105
127
  value: function is(type) {
@@ -127,21 +149,6 @@ var Key = /*#__PURE__*/function () {
127
149
  modifier = _ref2.modifier;
128
150
  return this.note.equals(note) && this.modifier === modifier;
129
151
  }
130
- }, {
131
- key: "toChordSymbol",
132
- value: function toChordSymbol(key) {
133
- if (this.is(_constants.SYMBOL)) {
134
- return this.clone();
135
- }
136
-
137
- var transposeDistance = this.note.getTransposeDistance() + (MODIFIER_TRANSPOSITION[this.modifier] || 0);
138
- return key.transpose(transposeDistance).normalize().useModifier(key.modifier);
139
- }
140
- }, {
141
- key: "toChordSymbolString",
142
- value: function toChordSymbolString(key) {
143
- return this.toChordSymbol(key).toString();
144
- }
145
152
  }, {
146
153
  key: "toNumeric",
147
154
  value: function toNumeric(key) {
@@ -159,11 +166,11 @@ var Key = /*#__PURE__*/function () {
159
166
  note: 1
160
167
  });
161
168
  var symbolKey = key.clone();
162
- var reference = this.clone().normalize().useModifier(key.modifier);
169
+ var reference = this.clone().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
163
170
 
164
171
  while (!symbolKey.equals(reference)) {
165
172
  numericKey = numericKey.transposeUp().useModifier(key.modifier);
166
- symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier);
173
+ symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
167
174
  }
168
175
 
169
176
  return numericKey;
@@ -190,11 +197,11 @@ var Key = /*#__PURE__*/function () {
190
197
  note: 'I'
191
198
  });
192
199
  var symbolKey = key.clone();
193
- var reference = this.clone().normalize().useModifier(key.modifier);
200
+ var reference = this.clone().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
194
201
 
195
202
  while (!symbolKey.equals(reference)) {
196
203
  numeralKey = numeralKey.transposeUp().useModifier(key.modifier);
197
- symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier);
204
+ symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
198
205
  }
199
206
 
200
207
  return numeralKey;
@@ -318,6 +325,21 @@ var Key = /*#__PURE__*/function () {
318
325
  });
319
326
  }
320
327
 
328
+ return this.clone();
329
+ }
330
+ }, {
331
+ key: "normalizeEnharmonics",
332
+ value: function normalizeEnharmonics(key) {
333
+ if (key) {
334
+ var rootKeyString = key.minor ? "".concat(key, "m") : key.toString();
335
+ var enharmonics = _enharmonicNormalize["default"][rootKeyString];
336
+ var thisKeyString = this.toString();
337
+
338
+ if (enharmonics && enharmonics[thisKeyString]) {
339
+ return Key.parse(enharmonics[thisKeyString]);
340
+ }
341
+ }
342
+
321
343
  return this.clone();
322
344
  }
323
345
  }], [{
@@ -355,7 +377,8 @@ var Key = /*#__PURE__*/function () {
355
377
  function _set2(attributes) {
356
378
  return new this.constructor(_objectSpread({
357
379
  note: this.note.clone(),
358
- modifier: this.modifier
380
+ modifier: this.modifier,
381
+ minor: !!this.minor
359
382
  }, attributes));
360
383
  }
361
384
 
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _default = {
8
+ 'Ab': {
9
+ 'B': 'Cb'
10
+ },
11
+ 'Cb': {
12
+ 'B': 'Cb',
13
+ 'A#': 'Bb',
14
+ 'E': 'Fb'
15
+ },
16
+ 'C': {
17
+ 'C#': 'Db',
18
+ 'D#': 'Eb',
19
+ 'F#': 'Gb',
20
+ 'G#': 'Ab',
21
+ 'A#': 'Bb'
22
+ },
23
+ 'C#': {
24
+ 'D#': 'Eb',
25
+ 'A#': 'Bb'
26
+ },
27
+ 'Db': {
28
+ 'B': 'Cb'
29
+ },
30
+ 'D': {
31
+ 'D#': 'Eb',
32
+ 'A#': 'Bb'
33
+ },
34
+ 'E': {
35
+ 'Ab': 'G#',
36
+ 'A#': 'Bb',
37
+ 'D#': 'Eb'
38
+ },
39
+ 'F': {
40
+ 'A#': 'Bb',
41
+ 'F#': 'Gb',
42
+ 'C#': 'Db',
43
+ 'D#': 'Eb',
44
+ 'G#': 'Ab'
45
+ },
46
+ 'F#': {
47
+ 'A#': 'Bb',
48
+ 'D#': 'Eb'
49
+ },
50
+ 'Gb': {
51
+ 'A#': 'Bb',
52
+ 'D#': 'Eb',
53
+ 'G#': 'Ab',
54
+ 'B': 'Cb',
55
+ 'E': 'Fb'
56
+ },
57
+ 'G': {
58
+ 'A#': 'Bb',
59
+ 'D#': 'Eb',
60
+ 'G#': 'Ab'
61
+ },
62
+ 'G#': {
63
+ 'A#': 'Bb',
64
+ 'D#': 'Eb'
65
+ },
66
+ 'Am': {
67
+ 'Gb': 'G',
68
+ 'G#': 'Ab',
69
+ 'F#': 'Gb',
70
+ 'C#': 'Db',
71
+ 'D#': 'Eb',
72
+ 'A#': 'Bb'
73
+ },
74
+ 'Bbm': {
75
+ 'Cb': 'B'
76
+ },
77
+ 'Bm': {
78
+ 'A#': 'Bb',
79
+ 'D#': 'Eb'
80
+ },
81
+ 'C#m': {
82
+ 'A#': 'Bb',
83
+ 'D#': 'Eb'
84
+ },
85
+ 'Cm': {
86
+ 'G#': 'Ab',
87
+ 'A#': 'Bb',
88
+ 'D#': 'Eb',
89
+ 'F#': 'Gb',
90
+ 'C#': 'Db'
91
+ },
92
+ 'Dm': {
93
+ 'A#': 'Bb',
94
+ 'D#': 'Eb'
95
+ },
96
+ 'Em': {
97
+ 'A#': 'Bb',
98
+ 'D#': 'Eb'
99
+ },
100
+ 'F#m': {
101
+ 'A#': 'Bb',
102
+ 'D#': 'Eb',
103
+ 'Gb': 'F#',
104
+ 'Ab': 'G#',
105
+ 'Db': 'C#'
106
+ },
107
+ 'Fm': {
108
+ 'G#': 'Ab',
109
+ 'A#': 'Bb',
110
+ 'D#': 'Eb',
111
+ 'F#': 'Gb',
112
+ 'C#': 'Db'
113
+ },
114
+ 'Gm': {
115
+ 'G#': 'Ab',
116
+ 'A#': 'Bb',
117
+ 'D#': 'Eb'
118
+ },
119
+ 'G#m': {
120
+ 'A#': 'Bb',
121
+ 'D#': 'Eb'
122
+ }
123
+ };
124
+ exports["default"] = _default;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+
7
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+
9
+ var fs = require('fs');
10
+
11
+ console.warn('\x1b[34m', '👷 Building suffix normalize mapping from suffix-mapping.txt');
12
+ fs.readFile('src/normalize_mappings/suffix-mapping.txt', function (err, data) {
13
+ if (err) throw err;
14
+ var suffixs = [];
15
+ data.toString().split('\n').map(function (line) {
16
+ var items = line.split(',');
17
+ var cleanStringsArray = [];
18
+ items.forEach(function (item) {
19
+ cleanStringsArray.push(item.trim());
20
+ });
21
+ suffixs.push(cleanStringsArray);
22
+ return suffixs;
23
+ });
24
+ var flatObject = {};
25
+ suffixs.forEach(function (line) {
26
+ line.forEach(function (item) {
27
+ flatObject = _objectSpread(_defineProperty({}, item, line[0]), flatObject);
28
+ });
29
+ });
30
+ var suffixMappingJson = JSON.stringify(flatObject, null, 2);
31
+ var suffixMappingJs = "export default ".concat(suffixMappingJson, ";\n");
32
+ fs.writeFile('src/normalize_mappings/suffix-normalize-mapping.js', suffixMappingJs, 'utf-8', function (error) {
33
+ if (error) throw error;
34
+ console.warn('\x1b[32m', '✨ Sucessfully built suffix-normalize-mapping.js');
35
+ });
36
+ });