@natlibfi/marc-record-validators-melinda 11.6.5 → 11.6.7-alpha.1

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.
Files changed (223) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +1 -5
  3. package/dist/access-rights.js.map +1 -1
  4. package/dist/addMissingField336.js +1 -1
  5. package/dist/addMissingField336.js.map +1 -1
  6. package/dist/cyrillux-usemarcon-replacement.js +41 -45
  7. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  8. package/dist/cyrillux.js +13 -17
  9. package/dist/cyrillux.js.map +1 -1
  10. package/dist/disambiguateSeriesStatements.js +3 -4
  11. package/dist/disambiguateSeriesStatements.js.map +1 -1
  12. package/dist/double-commas.js +2 -1
  13. package/dist/double-commas.js.map +1 -1
  14. package/dist/duplicates-ind1.js +1 -1
  15. package/dist/duplicates-ind1.js.map +1 -1
  16. package/dist/empty-fields.js +0 -4
  17. package/dist/empty-fields.js.map +1 -1
  18. package/dist/ending-punctuation.js +21 -49
  19. package/dist/ending-punctuation.js.map +1 -1
  20. package/dist/ending-whitespace.js +0 -4
  21. package/dist/ending-whitespace.js.map +1 -1
  22. package/dist/field-008-18-34-character-groups.js +4 -5
  23. package/dist/field-008-18-34-character-groups.js.map +1 -1
  24. package/dist/field-505-separators.js +8 -6
  25. package/dist/field-505-separators.js.map +1 -1
  26. package/dist/field-521-fix.js +5 -6
  27. package/dist/field-521-fix.js.map +1 -1
  28. package/dist/field-exclusion.js +5 -12
  29. package/dist/field-exclusion.js.map +1 -1
  30. package/dist/field-exclusion.spec.js +3 -5
  31. package/dist/field-exclusion.spec.js.map +1 -1
  32. package/dist/field-structure.js +2 -5
  33. package/dist/field-structure.js.map +1 -1
  34. package/dist/fields-present.js +1 -1
  35. package/dist/fields-present.js.map +1 -1
  36. package/dist/fields-present.spec.js +1 -1
  37. package/dist/fields-present.spec.js.map +1 -1
  38. package/dist/fix-33X.js +5 -6
  39. package/dist/fix-33X.js.map +1 -1
  40. package/dist/fix-country-codes.js +3 -4
  41. package/dist/fix-country-codes.js.map +1 -1
  42. package/dist/fix-language-codes.js +12 -9
  43. package/dist/fix-language-codes.js.map +1 -1
  44. package/dist/fixRelatorTerms.js +8 -8
  45. package/dist/fixRelatorTerms.js.map +1 -1
  46. package/dist/fixed-fields.js +1 -4
  47. package/dist/fixed-fields.js.map +1 -1
  48. package/dist/identical-fields.js +2 -3
  49. package/dist/identical-fields.js.map +1 -1
  50. package/dist/indicator-fixes.js +14 -15
  51. package/dist/indicator-fixes.js.map +1 -1
  52. package/dist/isbn-issn.js +8 -11
  53. package/dist/isbn-issn.js.map +1 -1
  54. package/dist/item-language.js +5 -12
  55. package/dist/item-language.js.map +1 -1
  56. package/dist/merge-fields/counterpartField.js +6 -8
  57. package/dist/merge-fields/counterpartField.js.map +1 -1
  58. package/dist/merge-fields/index.js +3 -3
  59. package/dist/merge-fields/index.js.map +1 -1
  60. package/dist/merge-fields/mergeConstraints.js +0 -1
  61. package/dist/merge-fields/mergeConstraints.js.map +1 -1
  62. package/dist/merge-fields/mergeField.js +12 -18
  63. package/dist/merge-fields/mergeField.js.map +1 -1
  64. package/dist/merge-fields/mergeIndicator.js +5 -5
  65. package/dist/merge-fields/mergeIndicator.js.map +1 -1
  66. package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
  67. package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
  68. package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
  69. package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
  70. package/dist/merge-fields/mergeSubfield.js +8 -8
  71. package/dist/merge-fields/mergeSubfield.js.map +1 -1
  72. package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
  73. package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
  74. package/dist/merge-fields/worldKnowledge.js +1 -1
  75. package/dist/merge-fields/worldKnowledge.js.map +1 -1
  76. package/dist/mergeField500Lisapainokset.js +0 -3
  77. package/dist/mergeField500Lisapainokset.js.map +1 -1
  78. package/dist/mergeRelatorTermFields.js +3 -3
  79. package/dist/mergeRelatorTermFields.js.map +1 -1
  80. package/dist/modernize-502.js +6 -6
  81. package/dist/modernize-502.js.map +1 -1
  82. package/dist/multiple-subfield-0.js +4 -4
  83. package/dist/multiple-subfield-0.js.map +1 -1
  84. package/dist/non-breaking-space.js +0 -4
  85. package/dist/non-breaking-space.js.map +1 -1
  86. package/dist/normalize-dashes.js +5 -4
  87. package/dist/normalize-dashes.js.map +1 -1
  88. package/dist/normalize-identifiers.js +6 -6
  89. package/dist/normalize-identifiers.js.map +1 -1
  90. package/dist/normalize-qualifying-information.js +4 -4
  91. package/dist/normalize-qualifying-information.js.map +1 -1
  92. package/dist/normalize-utf8-diacritics.js +7 -7
  93. package/dist/normalize-utf8-diacritics.js.map +1 -1
  94. package/dist/normalizeFieldForComparison.js +21 -20
  95. package/dist/normalizeFieldForComparison.js.map +1 -1
  96. package/dist/normalizeSubfieldValueForComparison.js +1 -2
  97. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  98. package/dist/prepublicationUtils.js +3 -3
  99. package/dist/prepublicationUtils.js.map +1 -1
  100. package/dist/punctuation/index.js +14 -31
  101. package/dist/punctuation/index.js.map +1 -1
  102. package/dist/punctuation2.js +9 -10
  103. package/dist/punctuation2.js.map +1 -1
  104. package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
  105. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  106. package/dist/removeDuplicateDataFields.js +18 -20
  107. package/dist/removeDuplicateDataFields.js.map +1 -1
  108. package/dist/removeInferiorDataFields.js +16 -19
  109. package/dist/removeInferiorDataFields.js.map +1 -1
  110. package/dist/resolvable-ext-references-melinda.js +4 -8
  111. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  112. package/dist/resolveOrphanedSubfield6s.js +9 -9
  113. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  114. package/dist/sanitize-vocabulary-source-codes.js +9 -9
  115. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  116. package/dist/sort-tags.js +2 -2
  117. package/dist/sort-tags.js.map +1 -1
  118. package/dist/sortFields.js +4 -9
  119. package/dist/sortFields.js.map +1 -1
  120. package/dist/sortRelatorTerms.js +4 -5
  121. package/dist/sortRelatorTerms.js.map +1 -1
  122. package/dist/sortSubfields.js +6 -7
  123. package/dist/sortSubfields.js.map +1 -1
  124. package/dist/stripPunctuation.js +2 -2
  125. package/dist/stripPunctuation.js.map +1 -1
  126. package/dist/subfield-exclusion.js +4 -11
  127. package/dist/subfield-exclusion.js.map +1 -1
  128. package/dist/subfield6Utils.js +12 -11
  129. package/dist/subfield6Utils.js.map +1 -1
  130. package/dist/subfield8Utils.js +8 -9
  131. package/dist/subfield8Utils.js.map +1 -1
  132. package/dist/subfieldValueNormalizations.js +5 -8
  133. package/dist/subfieldValueNormalizations.js.map +1 -1
  134. package/dist/sync-007-and-300.js +8 -8
  135. package/dist/sync-007-and-300.js.map +1 -1
  136. package/dist/translate-terms.js +5 -6
  137. package/dist/translate-terms.js.map +1 -1
  138. package/dist/typeOfDate-008.js +3 -4
  139. package/dist/typeOfDate-008.js.map +1 -1
  140. package/dist/unicode-decomposition.js +1 -1
  141. package/dist/unicode-decomposition.js.map +1 -1
  142. package/dist/update-field-540.js +5 -6
  143. package/dist/update-field-540.js.map +1 -1
  144. package/dist/urn.js +4 -9
  145. package/dist/urn.js.map +1 -1
  146. package/dist/utils.js +5 -9
  147. package/dist/utils.js.map +1 -1
  148. package/eslint.config.mjs +53 -0
  149. package/package.json +12 -13
  150. package/src/access-rights.js +4 -4
  151. package/src/addMissingField336.js +1 -1
  152. package/src/cyrillux-usemarcon-replacement.js +38 -38
  153. package/src/cyrillux.js +14 -14
  154. package/src/disambiguateSeriesStatements.js +3 -3
  155. package/src/double-commas.js +2 -2
  156. package/src/duplicates-ind1.js +1 -1
  157. package/src/empty-fields.js +4 -4
  158. package/src/ending-punctuation.js +46 -49
  159. package/src/ending-whitespace.js +0 -2
  160. package/src/field-008-18-34-character-groups.js +5 -5
  161. package/src/field-505-separators.js +6 -6
  162. package/src/field-521-fix.js +6 -6
  163. package/src/field-exclusion.js +12 -12
  164. package/src/field-exclusion.spec.js +4 -4
  165. package/src/field-structure.js +5 -5
  166. package/src/fields-present.js +1 -1
  167. package/src/fields-present.spec.js +1 -1
  168. package/src/fix-33X.js +5 -5
  169. package/src/fix-country-codes.js +3 -3
  170. package/src/fix-language-codes.js +10 -9
  171. package/src/fixRelatorTerms.js +8 -8
  172. package/src/fixed-fields.js +3 -3
  173. package/src/identical-fields.js +3 -3
  174. package/src/indicator-fixes.js +15 -15
  175. package/src/isbn-issn.js +11 -11
  176. package/src/item-language.js +10 -10
  177. package/src/merge-fields/counterpartField.js +7 -7
  178. package/src/merge-fields/index.js +3 -3
  179. package/src/merge-fields/mergeConstraints.js +1 -1
  180. package/src/merge-fields/mergeField.js +16 -17
  181. package/src/merge-fields/mergeIndicator.js +5 -5
  182. package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
  183. package/src/merge-fields/mergeOrAddSubfield.js +6 -6
  184. package/src/merge-fields/mergeSubfield.js +8 -8
  185. package/src/merge-fields/removeDuplicateSubfields.js +1 -2
  186. package/src/merge-fields/worldKnowledge.js +1 -1
  187. package/src/mergeField500Lisapainokset.js +0 -2
  188. package/src/mergeRelatorTermFields.js +3 -3
  189. package/src/modernize-502.js +6 -6
  190. package/src/multiple-subfield-0.js +4 -4
  191. package/src/non-breaking-space.js +0 -2
  192. package/src/normalize-dashes.js +4 -4
  193. package/src/normalize-identifiers.js +6 -6
  194. package/src/normalize-qualifying-information.js +4 -4
  195. package/src/normalize-utf8-diacritics.js +7 -7
  196. package/src/normalizeFieldForComparison.js +20 -20
  197. package/src/normalizeSubfieldValueForComparison.js +1 -1
  198. package/src/prepublicationUtils.js +3 -3
  199. package/src/punctuation/index.js +29 -29
  200. package/src/punctuation2.js +10 -10
  201. package/src/reindexSubfield6OccurenceNumbers.js +9 -9
  202. package/src/removeDuplicateDataFields.js +21 -23
  203. package/src/removeInferiorDataFields.js +19 -19
  204. package/src/resolvable-ext-references-melinda.js +8 -8
  205. package/src/resolveOrphanedSubfield6s.js +9 -9
  206. package/src/sanitize-vocabulary-source-codes.js +8 -8
  207. package/src/sort-tags.js +2 -2
  208. package/src/sortFields.js +6 -6
  209. package/src/sortRelatorTerms.js +5 -5
  210. package/src/sortSubfields.js +7 -7
  211. package/src/stripPunctuation.js +2 -2
  212. package/src/subfield-exclusion.js +11 -11
  213. package/src/subfield6Utils.js +11 -11
  214. package/src/subfield8Utils.js +6 -9
  215. package/src/subfieldValueNormalizations.js +5 -7
  216. package/src/sync-007-and-300.js +8 -8
  217. package/src/translate-terms.js +3 -5
  218. package/src/typeOfDate-008.js +3 -3
  219. package/src/unicode-decomposition.js +1 -1
  220. package/src/update-field-540.js +6 -6
  221. package/src/urn.js +8 -6
  222. package/src/utils.js +8 -8
  223. package/.eslintignore +0 -1
@@ -27,8 +27,8 @@ const debugDev = debug.extend('dev');
27
27
  function removeEnnakkotieto(field) {
28
28
  const tmp = field.subfields.filter(subfield => !isEnnakkotietoSubfieldG(subfield));
29
29
  // remove only iff some other subfield remains
30
- if (tmp.length > 0) { // eslint-disable-line functional/no-conditional-statements
31
- field.subfields = tmp; // eslint-disable-line functional/immutable-data
30
+ if (tmp.length > 0) {
31
+ field.subfields = tmp;
32
32
  }
33
33
  }
34
34
 
@@ -44,11 +44,10 @@ function copyrightYearHack(baseRecord, baseField, sourceField) {
44
44
  const value = sf.value.replace(/\.$/u, '');
45
45
  baseRecord.insertField({'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', value}]});
46
46
  // Modify original subfield:
47
- sf.value = removeCopyright(sf.value); // eslint-disable-line functional/immutable-data
47
+ sf.value = removeCopyright(sf.value);
48
48
  });
49
49
  }
50
50
 
51
- // eslint-disable-next-line max-params
52
51
  function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {
53
52
  //// Identical fields
54
53
  // No need to check every subfield separately.
@@ -60,9 +59,9 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
60
59
  // If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:
61
60
  // (If our prepub normalizations are ok, this should not be needed.
62
61
  // However, it's simple and works well enough, so let's keep it here.)
63
- if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) { // eslint-disable-line functional/no-conditional-statements
62
+ if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) {
64
63
  removeEnnakkotieto(baseField);
65
- baseField.merged = 1; // eslint-disable-line functional/immutable-data
64
+ baseField.merged = 1;
66
65
  }
67
66
 
68
67
  copyrightYearHack(baseRecord, baseField, sourceField);
@@ -91,7 +90,7 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
91
90
 
92
91
  mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880); // candSubfield);
93
92
  const newValue = fieldToString(baseField);
94
- if (originalBaseValue !== newValue) { // eslint-disable-line functional/no-conditional-statements
93
+ if (originalBaseValue !== newValue) {
95
94
  nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);
96
95
  //debug(` TODO: sort subfields, handle punctuation...`);
97
96
  }
@@ -110,7 +109,7 @@ function skipMergeField(baseRecord, sourceField, config) {
110
109
  // Skip duplicate field:
111
110
  if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {
112
111
  nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);
113
- sourceField.deleted = 1; // eslint-disable-line functional/immutable-data
112
+ sourceField.deleted = 1;
114
113
  return true;
115
114
  }
116
115
 
@@ -145,9 +144,9 @@ function swapDataBetweenFields(field1, field2) {
145
144
  return;
146
145
 
147
146
  function swapNamedData(name) {
148
- const data = field1[name]; // eslint-disable-line functional/immutable-data
149
- field1[name] = field2[name]; // eslint-disable-line functional/immutable-data
150
- field2[name] = data; // eslint-disable-line functional/immutable-data
147
+ const data = field1[name];
148
+ field1[name] = field2[name];
149
+ field2[name] = data;
151
150
  }
152
151
 
153
152
  }
@@ -155,11 +154,11 @@ function swapDataBetweenFields(field1, field2) {
155
154
  export function mergeField(baseRecord, sourceRecord, sourceField, config) {
156
155
  nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);
157
156
 
158
- sourceField.mergeCandidate = true; // eslint-disable-line functional/immutable-data
157
+ sourceField.mergeCandidate = true;
159
158
  // skip duplicates and special cases:
160
159
  if (skipMergeField(baseRecord, sourceField, config)) {
161
160
  nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);
162
- delete sourceField.mergeCandidate; // eslint-disable-line functional/immutable-data
161
+ delete sourceField.mergeCandidate;
163
162
  return false;
164
163
  }
165
164
 
@@ -167,7 +166,7 @@ export function mergeField(baseRecord, sourceRecord, sourceField, config) {
167
166
  const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);
168
167
 
169
168
  if (counterpartField) {
170
- if (sourceRecordIsBetter(counterpartField, sourceField)) { // eslint-disable-line functional/no-conditional-statements
169
+ if (sourceRecordIsBetter(counterpartField, sourceField)) {
171
170
  swapDataBetweenFields(counterpartField, sourceField);
172
171
  }
173
172
 
@@ -175,13 +174,13 @@ export function mergeField(baseRecord, sourceRecord, sourceField, config) {
175
174
  nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);
176
175
  nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : 'NADA'}`, debugDev);
177
176
  mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);
178
- sourceField.deleted = 1; // eslint-disable-line functional/immutable-data
179
- delete sourceField.mergeCandidate; // eslint-disable-line functional/immutable-data
177
+ sourceField.deleted = 1;
178
+ delete sourceField.mergeCandidate;
180
179
  return true;
181
180
  }
182
181
  // NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:
183
182
  debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);
184
- delete sourceField.mergeCandidate; // eslint-disable-line functional/immutable-data
183
+ delete sourceField.mergeCandidate;
185
184
  return false;
186
185
  }
187
186
 
@@ -109,7 +109,7 @@ export function mergeIndicators(toField, fromField, config) {
109
109
 
110
110
  // MRA-300: If source contains the (un)holy $9 FENNI<KEEP>, we prefer that value regardless of whatever...
111
111
  if (!fieldIsFenniKept(toField) && fieldIsFenniKept(fromField)) {
112
- toField.ind1 = fromField.ind1; // eslint-disable-line functional/immutable-data
112
+ toField.ind1 = fromField.ind1;
113
113
  return;
114
114
  }
115
115
 
@@ -122,7 +122,7 @@ export function mergeIndicators(toField, fromField, config) {
122
122
  const preferredValue = getPreferredValue(preferredValues, fromField.ind1, toField.ind1);
123
123
  if (typeof preferredValue !== 'undefined') {
124
124
  //nvdebug(`${preferredValue} WINS!`, debugDev);
125
- toField.ind1 = preferredValue; // eslint-disable-line functional/immutable-data
125
+ toField.ind1 = preferredValue;
126
126
  return;
127
127
  }
128
128
  //nvdebug(`No winner found indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);
@@ -151,8 +151,8 @@ export function mergeIndicators(toField, fromField, config) {
151
151
  nvdebug(`Apply base 260->264 tag swap hack`, debugDev);
152
152
  nvdebug(` ${fieldToString(toField)}\n ${fieldToString(fromField)}`, debugDev);
153
153
 
154
- toField.tag = '264'; // eslint-disable-line functional/immutable-data
155
- toField.ind2 = fromField.ind2; // eslint-disable-line functional/immutable-data
154
+ toField.tag = '264';
155
+ toField.ind2 = fromField.ind2;
156
156
  }
157
157
 
158
158
  function mergeIndicator2(toField, fromField, config) {
@@ -175,7 +175,7 @@ export function mergeIndicators(toField, fromField, config) {
175
175
  //nvdebug(` Try to merge indicator 2. Got preferred values '${preferredValues}'`, debugDev);
176
176
  const preferredValue = getPreferredValue(preferredValues, fromField.ind2, toField.ind2);
177
177
  if (typeof preferredValue !== 'undefined') {
178
- toField.ind2 = preferredValue; // eslint-disable-line functional/immutable-data
178
+ toField.ind2 = preferredValue;
179
179
  return;
180
180
  }
181
181
  }
@@ -12,7 +12,7 @@ function postprocessBaseRecord(base) {
12
12
  // NB! Relator terms are now expanded and translated already at preprocess stage!
13
13
 
14
14
  // remove merge-specific information:
15
- if (field.merged) { // eslint-disable-line functional/no-conditional-statements
15
+ if (field.merged) {
16
16
  // Field level ideas about things that could be done here:
17
17
  // - Fix indicators?
18
18
  // Record level fixes should be implemented as validators/fixers
@@ -23,20 +23,20 @@ function postprocessBaseRecord(base) {
23
23
  sortAdjacentRelatorTerms(field); // Sort $e subfields with each other
24
24
  fieldFixPunctuation(field);
25
25
 
26
- delete field.merged; // eslint-disable-line functional/immutable-data
26
+ delete field.merged;
27
27
  }
28
28
 
29
- if (field.useExternalEndPunctuation) { // eslint-disable-line functional/no-conditional-statements
30
- delete field.useExternalEndPunctuation; // eslint-disable-line functional/immutable-data
29
+ if (field.useExternalEndPunctuation) {
30
+ delete field.useExternalEndPunctuation;
31
31
  }
32
32
 
33
- if (field.added) { // eslint-disable-line functional/no-conditional-statements
34
- delete field.added; // eslint-disable-line functional/immutable-data
33
+ if (field.added) {
34
+ delete field.added;
35
35
  }
36
36
 
37
37
  /*
38
- if (field.deleted) { // eslint-disable-line functional/no-conditional-statements
39
- delete field.deleted; // eslint-disable-line functional/immutable-data
38
+ if (field.deleted) {
39
+ delete field.deleted;
40
40
  }
41
41
  */
42
42
 
@@ -46,7 +46,7 @@ function postprocessBaseRecord(base) {
46
46
 
47
47
  function removeDeletedFields(record) {
48
48
  // remove fields that are marked as deleted:
49
- record.fields = record.fields.filter(f => !f.deleted); // eslint-disable-line functional/immutable-data
49
+ record.fields = record.fields.filter(f => !f.deleted);
50
50
  }
51
51
 
52
52
 
@@ -116,9 +116,9 @@ function mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {
116
116
  function addSubfield(targetField, candSubfield) {
117
117
  nvdebug(` Added subfield '${subfieldToString(candSubfield)}' to field`, debugDev);
118
118
  // Add subfield to the end of all subfields. NB! Implement a separate function that does this + subfield reordering somehow...
119
- targetField.subfields.push(candSubfield); // eslint-disable-line functional/immutable-data
119
+ targetField.subfields.push(candSubfield);
120
120
 
121
- targetField.merged = 1; // eslint-disable-line functional/immutable-data
121
+ targetField.merged = 1;
122
122
 
123
123
  setPunctuationFlag(targetField, candSubfield);
124
124
  sortAdjacentSubfields(targetField);
@@ -129,7 +129,7 @@ function setPunctuationFlag(field, addedSubfield) {
129
129
  if (isControlSubfieldCode(addedSubfield.code)) { // These are never punctuation related
130
130
  return;
131
131
  }
132
- field.useExternalEndPunctuation = 1; // eslint-disable-line functional/immutable-data
132
+ field.useExternalEndPunctuation = 1;
133
133
  }
134
134
 
135
135
 
@@ -184,7 +184,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
184
184
  return;
185
185
  }
186
186
  nvdebug(` A: Yes. Add repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);
187
- targetField.merged = 1; // eslint-disable-line functional/immutable-data
187
+ targetField.merged = 1;
188
188
  setPunctuationFlag(targetField, candSubfield);
189
189
  addSubfield(targetField, candSubfield);
190
190
  return;
@@ -196,7 +196,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
196
196
  function mergeSubfieldPostprocessor() {
197
197
  if (original !== fieldToString(targetField)) {
198
198
  nvdebug(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);
199
- targetField.merged = 1; // eslint-disable-line functional/immutable-data
199
+ targetField.merged = 1;
200
200
  setPunctuationFlag(targetField, candSubfield);
201
201
  return;
202
202
  }
@@ -207,7 +207,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
207
207
  function addSubfieldWithPreviouslyUnseenSubfieldCode() {
208
208
  if (!fieldHasSubfield(targetField, candSubfield.code)) {
209
209
  nvdebug(` A: Yes. Add previously unseen subfield '${subfieldToString(candSubfield)}'`, debugDev);
210
- targetField.merged = 1; // eslint-disable-line functional/immutable-data
210
+ targetField.merged = 1;
211
211
  setPunctuationFlag(targetField, candSubfield);
212
212
  candFieldPairs880.forEach(pair => resetPaired880(pair, targetField, candSubfield));
213
213
  addSubfield(targetField, candSubfield);
@@ -45,12 +45,12 @@ function anyYear(str) {
45
45
  function replaceEntrysBirthAndDeathYear(targetField, candSubfield, relevantSubfields) {
46
46
  if (birthYearAndDeathYear.test(candSubfield.value)) {
47
47
  if (onlyBirthYear.test(relevantSubfields[0].value) && parseInt(relevantSubfields[0].value, 10) === parseInt(candSubfield.value, 10)) {
48
- relevantSubfields[0].value = candSubfield.value; // eslint-disable-line functional/immutable-data
48
+ relevantSubfields[0].value = candSubfield.value;
49
49
  return true;
50
50
  }
51
51
 
52
52
  if (onlyDeathYear.test(relevantSubfields[0].value) && getDeathYear(relevantSubfields[0].value) === getDeathYear(candSubfield.value)) {
53
- relevantSubfields[0].value = candSubfield.value; // eslint-disable-line functional/immutable-data
53
+ relevantSubfields[0].value = candSubfield.value;
54
54
  return true;
55
55
  }
56
56
  }
@@ -65,7 +65,7 @@ function replaceDatesAssociatedWithName(targetField, candSubfield, relevantSubfi
65
65
  }
66
66
 
67
67
  if (!anyYear(relevantSubfields[0].value) && anyYear(candSubfield.value)) {
68
- relevantSubfields[0].value = candSubfield.value; // eslint-disable-line functional/immutable-data
68
+ relevantSubfields[0].value = candSubfield.value;
69
69
  return true;
70
70
  }
71
71
 
@@ -174,7 +174,7 @@ function preferHyphenatedISBN(field, candSubfield, relevantSubfields) {
174
174
  if (!pair) {
175
175
  return false;
176
176
  }
177
- pair.value = candSubfield.value; // eslint-disable-line functional/immutable-data
177
+ pair.value = candSubfield.value;
178
178
  return true;
179
179
  }
180
180
 
@@ -189,7 +189,7 @@ function preferHttpsOverHttp(candSubfield, relevantSubfields) {
189
189
  if (!pair) {
190
190
  return false;
191
191
  }
192
- pair.value = candSubfield.value; // eslint-disable-line functional/immutable-data
192
+ pair.value = candSubfield.value;
193
193
  return true;
194
194
  }
195
195
 
@@ -209,7 +209,7 @@ function preferQualifierVersion(field, candSubfield, relevantSubfields) {
209
209
  return true; // True, but don't prefer the source value
210
210
  }
211
211
 
212
- pair.value = candSubfield.value; // eslint-disable-line functional/immutable-data
212
+ pair.value = candSubfield.value;
213
213
  return true;
214
214
 
215
215
  function subfieldQualifierCheck(subfield, name, qualifier) {
@@ -232,7 +232,7 @@ function preferSourceCorporateName(field, candSubfield, pair) {
232
232
  nvdebug(`CORP base '${pair.value}' vs '${candSubfield.value}'`, debugDev);
233
233
  const prefer = actualPrefenceCheck();
234
234
  if (prefer) {
235
- pair.value = candSubfield.value; // eslint-disable-line functional/immutable-data
235
+ pair.value = candSubfield.value;
236
236
  return true;
237
237
  }
238
238
  return false;
@@ -290,7 +290,7 @@ export function mergeSubfield(targetField, candSubfield) {
290
290
  // 260 $a value "[S.l]" is the main type for this.
291
291
  const meaninglessSubfields = relevantSubfields.filter(sf => !valueCarriesMeaning(targetField.tag, sf.code, sf.value));
292
292
  if (meaninglessSubfields.length > 0) {
293
- meaninglessSubfields[0].value = candSubfield.value; // eslint-disable-line functional/immutable-data
293
+ meaninglessSubfields[0].value = candSubfield.value;
294
294
  return true;
295
295
  }
296
296
 
@@ -22,7 +22,7 @@ export function fieldRemoveDuplicateSubfields(field) {
22
22
  }
23
23
 
24
24
  const strippedField = cloneAndRemovePunctuation(field); // make punctuation-less version
25
- /* eslint-disable */
25
+
26
26
  let seen = {};
27
27
 
28
28
  field.subfields = field.subfields.filter((sf, i) => notSeenBefore(sf, i));
@@ -45,6 +45,5 @@ export function fieldRemoveDuplicateSubfields(field) {
45
45
  seen[subfieldAsString] = subfieldAsString;
46
46
  return true;
47
47
  }
48
- /* eslint-enable */
49
48
 
50
49
  }
@@ -48,7 +48,7 @@ export function normalizeForSamenessCheck(tag, subfieldCode, originalValue) {
48
48
 
49
49
  function normalizePersonalName(originalValue) {
50
50
  // Use more readable "Forename Surname" format in comparisons:
51
- return originalValue.replace(/^([^,]+), ([^,]+)$/u, '$2 $1'); // eslint-disable-line prefer-named-capture-group
51
+ return originalValue.replace(/^([^,]+), ([^,]+)$/u, '$2 $1');
52
52
  }
53
53
 
54
54
  const sallittu506a = ['sallittu kaikenikäisille', 'sallittu', 's']; // downcased, without punctuation
@@ -133,7 +133,6 @@ export function mergeLisapainokset(record) {
133
133
  return;
134
134
  }
135
135
 
136
- /* eslint-disable */
137
136
  const collapsedArray = extractAllPrintData(relevantFields);
138
137
  if (collapsedArray.length === 0) {
139
138
  return;
@@ -149,5 +148,4 @@ export function mergeLisapainokset(record) {
149
148
  return;
150
149
  }
151
150
  });
152
- /* eslint-enable */
153
151
  }
@@ -34,7 +34,7 @@ export default function () {
34
34
  const msg = mergeRelatorTermFields(record, false);
35
35
  const res = {message: msg};
36
36
 
37
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
37
+ res.valid = !(res.message.length >= 1);
38
38
  return res;
39
39
  }
40
40
  }
@@ -49,7 +49,7 @@ function createNormalizedClone(field) {
49
49
  function createNormalizedCloneWithoutRelatorTerms(field) {
50
50
  const clonedField = createNormalizedClone(field);
51
51
  // Remove relator terms $e subfi:
52
- clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e'); // eslint-disable-line functional/immutable-data
52
+ clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e');
53
53
  return clonedField;
54
54
  }
55
55
 
@@ -74,7 +74,7 @@ function copyRelatorSubfields(fromField, toField) {
74
74
  const relatorTermSubfieldCode = tagToRelatorTermSubfieldCode(fromField.tag);
75
75
  const newRelatorTerms = extractAddableRelatorTerms(fromField, toField);
76
76
 
77
- newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line functional/immutable-data
77
+ newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line array-callback-return
78
78
 
79
79
  }
80
80
 
@@ -19,7 +19,7 @@ export default function () {
19
19
  normalizeField502(field);
20
20
  });
21
21
 
22
- // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
22
+ // message.valid = !(message.message.length >= 1);
23
23
  return res;
24
24
  }
25
25
 
@@ -30,7 +30,7 @@ export default function () {
30
30
  validateField(field, res);
31
31
  });
32
32
 
33
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
33
+ res.valid = !(res.message.length >= 1);
34
34
  return res;
35
35
  }
36
36
 
@@ -43,7 +43,7 @@ export default function () {
43
43
  const normalizedField = normalizeField502(clone(field));
44
44
  const mod = fieldToString(normalizedField);
45
45
  if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
46
- res.message.push(`Fix '${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data
46
+ res.message.push(`Fix '${orig}' => '${mod}'`);
47
47
  return;
48
48
  }
49
49
  return;
@@ -63,7 +63,7 @@ export function normalizeField502(field) {
63
63
  }
64
64
 
65
65
  // "a = acd[0]"" is way more readable than "[a] = acd"...
66
- const a = acd[0]; // eslint-disable-line prefer-destructuring
66
+ const a = acd[0];
67
67
  const c = acd[1].code === 'c' ? acd[1] : null;
68
68
  const d = acd[acd.length - 1].code === 'd' ? acd[acd.length - 1] : null;
69
69
 
@@ -74,8 +74,8 @@ export function normalizeField502(field) {
74
74
  }
75
75
 
76
76
  const newValue = `${extractA()}--${extractC()}${extractD()}`;
77
- a.value = newValue; // eslint-disable-line functional/immutable-data
78
- field.subfields = field.subfields.filter(sf => !['c', 'd'].includes(sf.code)); // eslint-disable-line functional/immutable-data
77
+ a.value = newValue;
78
+ field.subfields = field.subfields.filter(sf => !['c', 'd'].includes(sf.code));
79
79
  return field;
80
80
 
81
81
  function extractA() {
@@ -16,16 +16,16 @@ export default function () {
16
16
  function fix(record) {
17
17
  function fixField(field) {
18
18
  const removableSubfields = fieldGetDeletableSubfields(field);
19
- removableSubfields.forEach(sf => record.removeSubfield(sf, field));
19
+ removableSubfields.forEach(sf => record.removeSubfield(sf, field)); // eslint-disable-line array-callback-return
20
20
  }
21
21
 
22
22
  const res = {message: [], fix: [], valid: true};
23
23
 
24
24
  const relevantFields = getRelevantFields(record);
25
25
 
26
- relevantFields.forEach(field => fixField(field));
26
+ relevantFields.forEach(field => fixField(field)); // eslint-disable-line array-callback-return
27
27
 
28
- // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
28
+ // message.valid = !(message.message.length >= 1);
29
29
  return res;
30
30
  }
31
31
 
@@ -40,7 +40,7 @@ export default function () {
40
40
  const relevantFields = getRelevantFields(record);
41
41
  const messages = relevantFields.map(field => validateField(field));
42
42
  const res = {message: messages};
43
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
43
+ res.valid = !(res.message.length >= 1);
44
44
  return res;
45
45
  }
46
46
 
@@ -26,7 +26,6 @@ export default function () {
26
26
  }
27
27
  }
28
28
 
29
- /* eslint-disable functional/immutable-data,functional/no-conditional-statements */
30
29
  function fix(record) {
31
30
  record.fields.forEach((field) => {
32
31
  if (field.value) {
@@ -41,7 +40,6 @@ export default function () {
41
40
  });
42
41
  });
43
42
  }
44
- /* eslint-enable functional/immutable-data,functional/no-conditional-statements */
45
43
 
46
44
  function valueContainsNonBreakingSpace({value}) {
47
45
  return (/\u00A0/u).test(value);
@@ -28,7 +28,7 @@ export default function () {
28
28
  validateField(field, res);
29
29
  });
30
30
 
31
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
31
+ res.valid = !(res.message.length >= 1);
32
32
  return res;
33
33
  }
34
34
 
@@ -41,7 +41,7 @@ export default function () {
41
41
  if (orig === mod) { // Fail as the input is "broken"/"crap"/sumthing
42
42
  return;
43
43
  }
44
- res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data
44
+ res.message.push(`'TODO: ${orig}' => '${mod}'`);
45
45
  return;
46
46
  }
47
47
  }
@@ -54,7 +54,7 @@ function fixDashes(field) {
54
54
 
55
55
  nvdebug(`Dashing ${fieldToString(field)}`);
56
56
 
57
- field.subfields.forEach(sf => subfieldFixDashes(sf));
57
+ field.subfields.forEach(sf => subfieldFixDashes(sf)); // eslint-disable-line array-callback-return
58
58
 
59
59
  return field;
60
60
 
@@ -63,7 +63,7 @@ function fixDashes(field) {
63
63
  return;
64
64
  }
65
65
  // Normalize dashes U+2010 ... U+2015 to '-':
66
- subfield.value = subfield.value.replace(/[\u2010\u2011\u2012\u2013\u2014\u2015]/ug, '-'); // eslint-disable-line functional/immutable-data
66
+ subfield.value = subfield.value.replace(/[\u2010\u2011\u2012\u2013\u2014\u2015]/ug, '-');
67
67
  }
68
68
 
69
69
  }
@@ -6,7 +6,7 @@ import {fieldToString} from './utils';
6
6
 
7
7
  /*
8
8
  function nvdebug(message, func) {
9
- if (func) { // eslint-disable-line functional/no-conditional-statements
9
+ if (func) {
10
10
  func(message);
11
11
  }
12
12
  console.info(message); // eslint-disable-line no-console
@@ -23,7 +23,7 @@ export default function () {
23
23
 
24
24
  function fix(record) {
25
25
  const res = {message: [], fix: [], valid: true};
26
- //message.fix = []; // eslint-disable-line functional/immutable-data
26
+ //message.fix = [];
27
27
 
28
28
  // Actual parsing of all fields
29
29
  /*
@@ -40,7 +40,7 @@ export default function () {
40
40
  //validateField(field, true, message);
41
41
  });
42
42
 
43
- // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
43
+ // message.valid = !(message.message.length >= 1);
44
44
  return res;
45
45
  }
46
46
 
@@ -59,7 +59,7 @@ export default function () {
59
59
  validateField(field, res);
60
60
  });
61
61
 
62
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
62
+ res.valid = !(res.message.length >= 1);
63
63
  return res;
64
64
  }
65
65
 
@@ -74,7 +74,7 @@ export default function () {
74
74
  const orig = fieldToString(field);
75
75
  const mod = fieldToString(normalizedField);
76
76
  if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
77
- res.message.push(`'${orig}' could do with control number identifier normalization`); // eslint-disable-line functional/immutable-data
77
+ res.message.push(`'${orig}' could do with control number identifier normalization`);
78
78
  return;
79
79
  }
80
80
 
@@ -190,7 +190,7 @@ export function fieldNormalizeControlNumbers(field) {
190
190
  const targetFormat = normalizeAs(field.tag, sf.code);
191
191
  if (targetFormat !== undefined) {
192
192
  //nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);
193
- sf.value = normalizeControlSubfieldValue(sf.value, targetFormat); // eslint-disable-line functional/immutable-data
193
+ sf.value = normalizeControlSubfieldValue(sf.value, targetFormat);
194
194
  return;
195
195
  }
196
196
  });
@@ -27,7 +27,7 @@ export default function () {
27
27
  validateField(field, res);
28
28
  });
29
29
 
30
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
30
+ res.valid = !(res.message.length >= 1);
31
31
  return res;
32
32
  }
33
33
 
@@ -38,7 +38,7 @@ export default function () {
38
38
  normalizeQualifyingInformationField(normalizedField);
39
39
  const mod = fieldToString(normalizedField);
40
40
  if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
41
- res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data
41
+ res.message.push(`'TODO: ${orig}' => '${mod}'`);
42
42
  return;
43
43
  }
44
44
  return;
@@ -51,14 +51,14 @@ function normalizeQualifyingInformationField(field) {
51
51
  return;
52
52
  }
53
53
 
54
- field.subfields.forEach(sf => fixSubfield(sf));
54
+ field.subfields.forEach(sf => fixSubfield(sf)); // eslint-disable-line array-callback-return
55
55
  return;
56
56
 
57
57
  function fixSubfield(sf) {
58
58
  if (sf.code !== 'q') {
59
59
  return;
60
60
  }
61
- sf.value = normalizeValue(sf.value); // eslint-disable-line functional/immutable-data
61
+ sf.value = normalizeValue(sf.value);
62
62
  }
63
63
 
64
64
  function normalizeValue(val) {
@@ -23,7 +23,7 @@ export default function () {
23
23
 
24
24
  function fix(record) {
25
25
  const res = {message: [], fix: [], valid: true};
26
- //message.fix = []; // eslint-disable-line functional/immutable-data
26
+ //message.fix = [];
27
27
 
28
28
  // Actual parsing of all fields
29
29
  /*
@@ -37,7 +37,7 @@ export default function () {
37
37
  //validateField(field, true, message);
38
38
  });
39
39
 
40
- // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
40
+ // message.valid = !(message.message.length >= 1);
41
41
  return res;
42
42
  }
43
43
 
@@ -55,7 +55,7 @@ export default function () {
55
55
  validateField(field, res);
56
56
  });
57
57
 
58
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
58
+ res.valid = !(res.message.length >= 1);
59
59
  return res;
60
60
  }
61
61
 
@@ -68,7 +68,7 @@ export default function () {
68
68
  const normalizedField = fieldFixComposition(clone(field));
69
69
  const mod = fieldToString(normalizedField);
70
70
  if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
71
- res.message.push(`'${orig}' requires normalization`); // eslint-disable-line functional/immutable-data
71
+ res.message.push(`'${orig}' requires normalization`);
72
72
  return;
73
73
  }
74
74
  return;
@@ -113,10 +113,10 @@ export function fieldFixComposition(field) {
113
113
  //const originalValue = fieldToString(field);
114
114
  //nvdebug(`fFC: '${originalValue}'`, debug);
115
115
  field.subfields.forEach((subfield, index) => {
116
- field.subfields[index].value = fixComposition(subfield.value); // eslint-disable-line functional/immutable-data
116
+ field.subfields[index].value = fixComposition(subfield.value);
117
117
  });
118
118
  //const newValue = fieldToString(field);
119
- //if (originalValue !== newValue) { // eslint-disable-line functional/no-conditional-statements
119
+ //if (originalValue !== newValue) {
120
120
  // debug(`FIXCOMP: '${originalValue}' => '${newValue}'`);
121
121
  //}
122
122
  return field;
@@ -127,7 +127,7 @@ export function fieldRemoveDecomposedDiacritics(field) {
127
127
  // Raison d'être/motivation: "Sirén" and diacriticless "Siren" might refer to a same surname, so this normalization
128
128
  // allows us to compare authors and avoid duplicate fields.
129
129
  field.subfields.forEach((sf) => {
130
- sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data
130
+ sf.value = removeDecomposedDiacritics(sf.value);
131
131
  });
132
132
 
133
133
  function removeDecomposedDiacritics(value = '') {