@natlibfi/marc-record-validators-melinda 11.6.6 → 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 +5 -6
  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 +6 -6
  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
@@ -36,7 +36,7 @@ export default function () {
36
36
 
37
37
  const res = {message: duplicates};
38
38
 
39
- res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data
39
+ res.valid = res.message.length < 1;
40
40
  return res;
41
41
  }
42
42
  }
@@ -46,7 +46,7 @@ function deriveInferiorChains(fields, record) {
46
46
  //nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);
47
47
  const hash = {};
48
48
 
49
- fields.forEach(f => fieldToChainToDeletables(f));
49
+ fields.forEach(f => fieldToChainToDeletables(f)); // eslint-disable-line array-callback-return
50
50
 
51
51
  return hash;
52
52
 
@@ -65,8 +65,8 @@ function deriveInferiorChains(fields, record) {
65
65
  const arr = deriveChainDeletables([chainAsString]);
66
66
  //nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);
67
67
  arr.forEach(val => {
68
- if (!(val in hash)) { // eslint-disable-line functional/no-conditional-statements
69
- hash[val] = field; // eslint-disable-line functional/immutable-data
68
+ if (!(val in hash)) {
69
+ hash[val] = field;
70
70
  }
71
71
  });
72
72
  }
@@ -78,7 +78,7 @@ function deriveInferiorChains(fields, record) {
78
78
  }
79
79
 
80
80
  // Fix MRA-476 (part 1): one $6 value can be worse than the other
81
- const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group
81
+ const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
82
82
 
83
83
  // Remove keepless versions:
84
84
  const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
@@ -150,15 +150,15 @@ export function removeInferiorChains(record, fix = true) {
150
150
  const triggeringChain = fieldToChain(triggeringField, record);
151
151
 
152
152
  // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
153
- if (chainContains1XX(chain)) { // eslint-disable-line functional/no-conditional-statements
154
- triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
153
+ if (chainContains1XX(chain)) {
154
+ triggeringChain.forEach(f => sevenToOne(f, triggeringChain)); // eslint-disable-line array-callback-return
155
155
  }
156
156
  //nvdebug(`iRIS6C: ${chainAsString}`);
157
157
  const deletedString = fieldsToString(chain);
158
158
  const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;
159
- if (fix) { // eslint-disable-line functional/no-conditional-statements
159
+ if (fix) {
160
160
  //nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
161
- chain.forEach(field => record.removeField(field));
161
+ chain.forEach(field => record.removeField(field)); // eslint-disable-line array-callback-return
162
162
  }
163
163
  return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);
164
164
  }
@@ -174,9 +174,9 @@ export function removeInferiorChains(record, fix = true) {
174
174
  }
175
175
  // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:
176
176
  const pairs = fieldGetOccurrenceNumberPairs(field, chain);
177
- field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data
177
+ field.tag = `1${field.tag.substring(1)}`;
178
178
  // There should always be one pair, but I'm not sanity-checking this
179
- pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));
179
+ pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField)); // eslint-disable-line array-callback-return
180
180
  }
181
181
 
182
182
  }
@@ -186,7 +186,7 @@ function getIdentifierlessAndKeeplessSubsets(fieldAsString) {
186
186
  // The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:
187
187
  // Remove identifier(s) (MELKEHITYS-2383-ish):
188
188
 
189
- const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1'); // eslint-disable-line prefer-named-capture-group
189
+ const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1');
190
190
  const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
191
191
 
192
192
  return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);
@@ -208,7 +208,7 @@ function deriveIndividualDeletables490(todoList, deletables = []) {
208
208
  // Without final $v or $x:
209
209
  const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');
210
210
  // Add intermediate $x-less version
211
- const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1'); // eslint-disable-line prefer-named-capture-group
211
+ const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
212
212
 
213
213
  // Add $xv-less version (handled by recursion?)
214
214
  const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');
@@ -219,7 +219,7 @@ function deriveIndividualDeletables490(todoList, deletables = []) {
219
219
  const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);
220
220
 
221
221
  /*
222
- if (arr.length) { // eslint-disable-line functional/no-conditional-statements
222
+ if (arr.length) {
223
223
  nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);
224
224
  nvdebug(arr.join('\n'));
225
225
  }
@@ -262,7 +262,7 @@ function deriveIndividualDeletables(record) {
262
262
 
263
263
  const accentless = getAccentlessVersion(currString);
264
264
  const d490 = deriveIndividualDeletables490([currString]);
265
- const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign
265
+ const subsets = getIdentifierlessAndKeeplessSubsets(currString);
266
266
  const moreToDo = [...accentless, ...d490, ...subsets];
267
267
 
268
268
 
@@ -301,7 +301,7 @@ function deriveIndividualDeletables(record) {
301
301
  replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields
302
302
  replace(/ ‡t /u, ' ‡a '). // change first $t to $a
303
303
  // ind2: '1' => '#':
304
- replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group
304
+ replace(/^505 (.)0/u, '505 $1#');
305
305
  if (tmp !== currString) {
306
306
  return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
307
307
  }
@@ -318,11 +318,11 @@ function deriveIndividualDeletables(record) {
318
318
 
319
319
  // MET-381: remove occurence number TAG-00, if TAG-NN existists
320
320
  if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
321
- const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group
321
+ const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00');
322
322
  //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);
323
323
  //deletableStringsArray.push(tmp);
324
324
  if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
325
- const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group
325
+ const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1');
326
326
  //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
327
327
  return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);
328
328
  }
@@ -411,7 +411,7 @@ export function removeIndividualInferiorDatafields(record, fix = true) { // No $
411
411
 
412
412
  const deletedFieldsAsStrings = hits.map(f => fieldToString(f));
413
413
 
414
- if (fix) { // eslint-disable-line functional/no-conditional-statements
414
+ if (fix) {
415
415
  hits.forEach(field => {
416
416
  //nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);
417
417
  record.removeField(field);
@@ -22,8 +22,8 @@ export default function ({endpoint, prefixPattern, fields}) {
22
22
  // Filter matching field keys from record.fields
23
23
  const subfields = record.fields.reduce((prev, current) => {
24
24
  Object.keys(fields).forEach(key => {
25
- if (key === current.tag) { // eslint-disable-line functional/no-conditional-statements
26
- prev.push(current); // eslint-disable-line functional/immutable-data
25
+ if (key === current.tag) {
26
+ prev.push(current);
27
27
  }
28
28
  });
29
29
  return prev;
@@ -32,10 +32,10 @@ export default function ({endpoint, prefixPattern, fields}) {
32
32
  // Filter matching objects from subfields
33
33
  const matchingTags = [...subfields].reduce((prev, current) => {
34
34
  Object.keys(fields).forEach(key => {
35
- if (key === current.tag) { // eslint-disable-line functional/no-conditional-statements
35
+ if (key === current.tag) {
36
36
  current.subfields.filter(item => {
37
- if (Object.values(fields[key]).filter(value => value === item.code)[0]) { // eslint-disable-line functional/no-conditional-statements
38
- prev.push({tag: current.tag, code: item.code, value: item.value}); // eslint-disable-line functional/immutable-data
37
+ if (Object.values(fields[key]).filter(value => value === item.code)[0]) {
38
+ prev.push({tag: current.tag, code: item.code, value: item.value});
39
39
  }
40
40
 
41
41
  return prev;
@@ -47,9 +47,9 @@ export default function ({endpoint, prefixPattern, fields}) {
47
47
 
48
48
  // Matching prefixPattern is removed from object value field.
49
49
  matchingTags.forEach(obj => {
50
- if (prefixPattern.test(obj.value)) { // eslint-disable-line functional/no-conditional-statements
51
- obj.value = obj.value.replace(prefixPattern, ''); // eslint-disable-line functional/immutable-data
52
- removedPrefixes.push(obj); // eslint-disable-line functional/immutable-data
50
+ if (prefixPattern.test(obj.value)) {
51
+ obj.value = obj.value.replace(prefixPattern, '');
52
+ removedPrefixes.push(obj);
53
53
  }
54
54
  });
55
55
  return resolveValidation(removedPrefixes);
@@ -15,12 +15,12 @@ export default function () {
15
15
  function fix(record) {
16
16
  nvdebug('Fix SF6 orphaned occurrence numbers');
17
17
  const res = {message: [], fix: [], valid: true};
18
- //message.fix = []; // eslint-disable-line functional/immutable-data
18
+ //message.fix = [];
19
19
 
20
20
  // This can not really fail...
21
21
  recordFixSubfield6OccurrenceNumbers(record);
22
22
 
23
- //message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
23
+ //message.valid = !(message.message.length >= 1);
24
24
  return res;
25
25
  }
26
26
 
@@ -33,10 +33,10 @@ export default function () {
33
33
 
34
34
  const res = {message: []};
35
35
 
36
- if (orphanedFields.length > 0) { // eslint-disable-line functional/no-conditional-statements
37
- res.message = [`${orphanedFields.length} orphaned occurrence number field(s) detected`]; // eslint-disable-line functional/immutable-data
36
+ if (orphanedFields.length > 0) {
37
+ res.message = [`${orphanedFields.length} orphaned occurrence number field(s) detected`];
38
38
  }
39
- res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data
39
+ res.valid = res.message.length < 1;
40
40
  return res;
41
41
  }
42
42
  }
@@ -45,12 +45,12 @@ export function recordFixSubfield6OccurrenceNumbers(record) {
45
45
  const fieldsContainingSubfield6 = record.fields.filter(field => fieldHasSubfield(field, '6'));
46
46
  const orphanedFields = getOrphanedFields(fieldsContainingSubfield6);
47
47
 
48
- orphanedFields.forEach(field => fieldFixOrphanedSubfields(field));
48
+ orphanedFields.forEach(field => fieldFixOrphanedSubfields(field)); // eslint-disable-line array-callback-return
49
49
 
50
50
  function fieldFixOrphanedSubfields(field) {
51
51
  // Field 880: orphaned $6 subfields: occurrence number is changed to '00':
52
52
  if (field.tag === '880') {
53
- field.subfields.forEach(sf => field880FixOrphanedSubfield(sf));
53
+ field.subfields.forEach(sf => field880FixOrphanedSubfield(sf)); // eslint-disable-line array-callback-return
54
54
  return;
55
55
  }
56
56
  // Non-880 fields get their orphaned $6s removed:
@@ -59,7 +59,7 @@ export function recordFixSubfield6OccurrenceNumbers(record) {
59
59
  record.removeField(field);
60
60
  return;
61
61
  }
62
- field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data
62
+ field.subfields = remainingSubfields;
63
63
  }
64
64
 
65
65
  function field880FixOrphanedSubfield(subfield) {
@@ -78,7 +78,7 @@ function findPairForSubfield6OccurrenceNumber(subfield6, myTag, candPairFields)
78
78
  return undefined;
79
79
  }
80
80
  nvdebug(`LOOKING FOR PAIR: ${myTag} ${subfieldToString(subfield6)}`);
81
- candPairFields.forEach(field => fieldToString(field));
81
+ candPairFields.forEach(field => fieldToString(field)); // eslint-disable-line array-callback-return
82
82
 
83
83
  // Only valid $6 value that fails to map to another field is iffy...
84
84
  const referredTag = subfield6.value.substring(0, 3);
@@ -15,7 +15,7 @@ export default function () {
15
15
  function fix(record) {
16
16
  const res = {message: [], fix: [], valid: true};
17
17
  const relevantFields = getRelevantFields(record);
18
- relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f));
18
+ relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f)); // eslint-disable-line array-callback-return
19
19
  return res;
20
20
  }
21
21
 
@@ -23,9 +23,9 @@ export default function () {
23
23
  const res = {message: []};
24
24
  const relevantFields = getRelevantFields(record);
25
25
 
26
- relevantFields.forEach(field => validateField(field, res));
26
+ relevantFields.forEach(field => validateField(field, res)); // eslint-disable-line array-callback-return
27
27
 
28
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
28
+ res.valid = !(res.message.length >= 1);
29
29
  return res;
30
30
  }
31
31
 
@@ -39,12 +39,12 @@ export default function () {
39
39
  const normalizedField = fieldSanitizeVocabularySourceCode(clone(field));
40
40
  const mod = fieldToString(normalizedField);
41
41
  if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
42
- res.message.push(`FIXABLE: '${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data
42
+ res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
43
43
  return;
44
44
  }
45
45
  // Handle illegal values here
46
46
  if (fieldHasUnfixableVocabularySourceCode(field)) {
47
- res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`); // eslint-disable-line functional/immutable-data
47
+ res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
48
48
  return;
49
49
  }
50
50
  return;
@@ -52,7 +52,7 @@ export default function () {
52
52
 
53
53
 
54
54
  function fieldSanitizeVocabularySourceCode(field) {
55
- field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf));
55
+ field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf)); // eslint-disable-line array-callback-return
56
56
  return field;
57
57
  }
58
58
 
@@ -60,7 +60,7 @@ export default function () {
60
60
  if (subfield.code !== '2') {
61
61
  return;
62
62
  }
63
- subfield.value = stringFixVocabularySourceCode(subfield.value); // eslint-disable-line functional/immutable-data
63
+ subfield.value = stringFixVocabularySourceCode(subfield.value);
64
64
  }
65
65
 
66
66
  }
@@ -72,7 +72,7 @@ function stringFixVocabularySourceCode(value) {
72
72
  // Try to remove spaces, change '//' to '/' and remove final '.' and '/':
73
73
  const tmp = value.replace(/ /ug, '')
74
74
  .replace(/\/+/ug, '/')
75
- .replace(/(.)[./]$/gu, '$1') // eslint-disable-line prefer-named-capture-group
75
+ .replace(/(.)[./]$/gu, '$1')
76
76
  .replace(/^yso-(?:aika|paikat)\//u, 'yso/'); // IMP-HELMET crap. Also, they still have a '.' at the end of $a...
77
77
 
78
78
  // NB! Use the modified value ONLY if the result (tmp variable) is a legal subfield code...
package/src/sort-tags.js CHANGED
@@ -27,8 +27,8 @@ function sortPatternFields(record, tagPattern) {
27
27
  const matchingTags = record.fields.map(field => tagPattern.some(pattern => pattern.test(field.tag)) ? field : null).filter(tag => tag);
28
28
  const sortedArray = sortFields(record.fields);
29
29
  const fixedArray = sortedArray.filter(field => !tagPattern.some(pattern => pattern.test(field.tag)));
30
- fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags); // eslint-disable-line functional/immutable-data
31
- record.fields = fixedArray; // eslint-disable-line functional/immutable-data
30
+ fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags);
31
+ record.fields = fixedArray;
32
32
  }
33
33
 
34
34
  function sortFields(fields) {
package/src/sortFields.js CHANGED
@@ -22,7 +22,7 @@ export default function () {
22
22
  function fix(record) {
23
23
  const res = {message: [], fix: [], valid: true};
24
24
 
25
- record.fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data
25
+ record.fields.sort(fieldOrderComparator);
26
26
 
27
27
  return res;
28
28
  }
@@ -31,16 +31,16 @@ export default function () {
31
31
  const res = {message: []};
32
32
 
33
33
  const fields = record.fields.map(f => clone(f));
34
- fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data
34
+ fields.sort(fieldOrderComparator);
35
35
 
36
36
 
37
37
  const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));
38
38
 
39
- if (relocatedFields.length > 0) { // eslint-disable-line functional/no-conditional-statements
40
- res.message.push(`${relocatedFields.length} field(s) in new places`); // eslint-disable-line functional/immutable-data
39
+ if (relocatedFields.length > 0) {
40
+ res.message.push(`${relocatedFields.length} field(s) in new places`);
41
41
  }
42
42
 
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
  }
@@ -217,7 +217,7 @@ export function fieldOrderComparator(fieldA, fieldB) {
217
217
  return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);
218
218
  }
219
219
 
220
- function sortByIndexTerms(fieldA, fieldB) { // eslint-disable-line complexity, max-statements
220
+ function sortByIndexTerms(fieldA, fieldB) {
221
221
 
222
222
  const indexTermFields = ['600', '610', '611', '630', '648', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '662'];
223
223
 
@@ -41,12 +41,12 @@ export default function () {
41
41
  sortAdjacentRelatorTerms(clonedField, typeOfMaterial);
42
42
  const clonedFieldAsString = fieldToString(clonedField);
43
43
  const fieldAsString = fieldToString(field);
44
- if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements
45
- res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data
44
+ if (fieldAsString !== clonedFieldAsString) {
45
+ res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);
46
46
  }
47
47
  });
48
48
 
49
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
49
+ res.valid = !(res.message.length >= 1);
50
50
  return res;
51
51
  }
52
52
  }
@@ -103,8 +103,8 @@ function swapRelatorTermSubfields(field, typeOfMaterial = undefined) {
103
103
 
104
104
  // Swap:
105
105
  const tmp = field.subfields[index - 1];
106
- field.subfields[index - 1] = field.subfields[index]; // eslint-disable-line functional/immutable-data
107
- field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data
106
+ field.subfields[index - 1] = field.subfields[index];
107
+ field.subfields[index] = tmp;
108
108
  fieldFixPunctuation(field);
109
109
  return true;
110
110
  }
@@ -54,12 +54,12 @@ export default function (defaultTagPattern) {
54
54
  sortAdjacentSubfields(clonedField);
55
55
  const clonedFieldAsString = fieldToString(clonedField);
56
56
  const fieldAsString = fieldToString(field);
57
- if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements
58
- res.message.push(clonedFieldAsString); // eslint-disable-line functional/immutable-data
57
+ if (fieldAsString !== clonedFieldAsString) {
58
+ res.message.push(clonedFieldAsString);
59
59
  }
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
  }
@@ -157,8 +157,8 @@ function swapSubfields(field, sortOrder) {
157
157
  }
158
158
  // Swap:
159
159
  const tmp = field.subfields[index - 1];
160
- field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data
161
- field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data
160
+ field.subfields[index - 1] = sf;
161
+ field.subfields[index] = tmp;
162
162
  return true;
163
163
  });
164
164
 
@@ -195,7 +195,7 @@ function moveSubfield6ToTheFront(field) {
195
195
  // https://www.loc.gov/marc/bibliographic/ecbdcntf.html says "Subfield $6 is always the first subfield in the field."
196
196
  const sf6s = field.subfields.filter(sf => sf.code === '6');
197
197
  const others = field.subfields.filter(sf => sf.code !== '6');
198
- field.subfields = [...sf6s, ...others]; // eslint-disable-line functional/immutable-data
198
+ field.subfields = [...sf6s, ...others];
199
199
  }
200
200
 
201
201
  export function sortAdjacentSubfields(field, externalSortOrder = []) {
@@ -20,7 +20,7 @@ export default function () {
20
20
  function fix(record) {
21
21
  nvdebug('Strip punctuation to data fields: fixer');
22
22
  const res = {message: [], fix: [], valid: true};
23
- record.fields.forEach(f => fieldStripPunctuation(f));
23
+ record.fields.forEach(f => fieldStripPunctuation(f)); // eslint-disable-line array-callback-return
24
24
  return res;
25
25
  }
26
26
 
@@ -36,7 +36,7 @@ export default function () {
36
36
 
37
37
  const res = {message: messages};
38
38
 
39
- res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data
39
+ res.valid = res.message.length < 1;
40
40
  return res;
41
41
  }
42
42
  }
@@ -77,10 +77,10 @@ export default function (config) {
77
77
  }
78
78
 
79
79
  // Check subfields recursively
80
- if (key === 'subfields') { // eslint-disable-line functional/no-conditional-statements
80
+ if (key === 'subfields') {
81
81
  forEach(data, ([, subObj]) => {
82
82
  // Console.log("subObj: ", subObj, " type: ", typeof subObj, !(Array.isArray(subObj)))
83
- if (typeof subObj === 'object' && !Array.isArray(subObj)) { // eslint-disable-line functional/no-conditional-statements
83
+ if (typeof subObj === 'object' && !Array.isArray(subObj)) {
84
84
  checkMandatory(spec[key], subObj);
85
85
 
86
86
  forEach(subObj, ([subKey, subVal]) => {
@@ -128,7 +128,7 @@ export default function (config) {
128
128
 
129
129
  // Configuration object not found from found element
130
130
  return false;
131
- })) { // eslint-disable-line functional/no-conditional-statements
131
+ })) {
132
132
  // All configuration fields match, check if some subfields should be excluded.
133
133
  confObj.subfields.forEach(subField => {
134
134
  const excluded = [];
@@ -138,17 +138,17 @@ export default function (config) {
138
138
  const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);
139
139
  const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);
140
140
  if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {
141
- if (fix) { // eslint-disable-line functional/no-conditional-statements
142
- excluded.push(elemSub); // eslint-disable-line functional/immutable-data
143
- } else { // eslint-disable-line functional/no-conditional-statements
144
- res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`); // eslint-disable-line functional/immutable-data
141
+ if (fix) {
142
+ excluded.push(elemSub);
143
+ } else {
144
+ res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`);
145
145
  }
146
146
  }
147
147
  });
148
148
 
149
- excluded.forEach(sf => record.removeSubfield(sf, element));
149
+ excluded.forEach(sf => record.removeSubfield(sf, element)); // eslint-disable-line array-callback-return
150
150
  // If no subfields remains, the whole field will be removed as well:
151
- if (element.subfields && element.subfields.length === 0) { // eslint-disable-line functional/no-conditional-statements
151
+ if (element.subfields && element.subfields.length === 0) {
152
152
  record.removeField(element);
153
153
  }
154
154
  });
@@ -158,8 +158,8 @@ export default function (config) {
158
158
 
159
159
  // Fix does not send response
160
160
  if (!fix) {
161
- if (res.message.length > 0) { // eslint-disable-line functional/no-conditional-statements
162
- res.valid = false; // eslint-disable-line functional/immutable-data
161
+ if (res.message.length > 0) {
162
+ res.valid = false;
163
163
  }
164
164
 
165
165
  return res;
@@ -51,9 +51,9 @@ export function subfield6ResetOccurrenceNumber(subfield, occurrenceNumber) {
51
51
  }
52
52
  const occurrenceNumberAsString = typeof occurrenceNumber === 'number' ? intToOccurrenceNumberString(occurrenceNumber) : occurrenceNumber;
53
53
 
54
- const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield); // eslint-disable-line functional/immutable-data
54
+ const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield);
55
55
  //nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`);
56
- subfield.value = newValue; // eslint-disable-line functional/immutable-data
56
+ subfield.value = newValue;
57
57
  }
58
58
 
59
59
 
@@ -70,7 +70,7 @@ export function subfield6HasWantedTagAndOccurrenceNumber(subfield, tagAndOccurre
70
70
  return false;
71
71
  }
72
72
  // We could also use generic code and go getTag()+'-'+getIndex() instead of regexp...
73
- const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1'); // eslint-disable-line prefer-named-capture-group
73
+ const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1');
74
74
  nvdebug(` Compare '${key}' vs '${tagAndOccurrenceNumber}'`);
75
75
  return key === tagAndOccurrenceNumber;
76
76
  }
@@ -99,7 +99,7 @@ export function fieldHasOccurrenceNumber(field, occurrenceNumber) {
99
99
  }
100
100
 
101
101
  export function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNumber = undefined) {
102
- field.subfields.forEach(subfield => innerReset(subfield));
102
+ field.subfields.forEach(subfield => innerReset(subfield)); // eslint-disable-line array-callback-return
103
103
 
104
104
  function innerReset(subfield) {
105
105
  // (Optional) Check that this is really the occurrence number we wan't to reseot
@@ -203,14 +203,14 @@ function subfieldSevenToOneOccurrenceNumber(subfield) {
203
203
  if (subfield.code !== '6' || subfield.value.substring(0, 1) !== '7') {
204
204
  return;
205
205
  }
206
- subfield.value = `1${subfield.value.substring(1)}`; // eslint-disable-line functional/immutable-data
206
+ subfield.value = `1${subfield.value.substring(1)}`;
207
207
  }
208
208
 
209
209
  export function fieldSevenToOneOccurrenceNumber(field) {
210
210
  if (field.tag !== '880') {
211
211
  return;
212
212
  }
213
- field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf));
213
+ field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf)); // eslint-disable-line array-callback-return
214
214
  }
215
215
 
216
216
 
@@ -223,7 +223,7 @@ export function fieldGetOccurrenceNumberPairs(field, candFields) {
223
223
  return pairs;
224
224
  }
225
225
  nvdebug(`${pairs.length} PAIR(S) FOUND FOR '${fieldToString(field)}'`);
226
- pairs.forEach(pairedField => nvdebug(` '${fieldToString(pairedField)}'`));
226
+ pairs.forEach(pairedField => nvdebug(` '${fieldToString(pairedField)}'`)); // eslint-disable-line array-callback-return
227
227
  return pairs;
228
228
  }
229
229
 
@@ -355,7 +355,7 @@ function guessTargetLinkingNumber(fields, defaultTargetLinkingNumber) {
355
355
  return defaultTargetLinkingNumber;
356
356
  }
357
357
  const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);
358
- return linkingNumbers.length === 1 ? linkingNumbers[0] : 0; // eslint-disable-line no-param-reassign
358
+ return linkingNumbers.length === 1 ? linkingNumbers[0] : 0;
359
359
  }
360
360
 
361
361
  export function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTag = false) {
@@ -363,7 +363,7 @@ export function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0,
363
363
 
364
364
  nvdebug(`fieldsToNormalizedString: OCC: ${normalizeOccurrenceNumber}`);
365
365
  const strings = fields.map(field => fieldToNormalizedString(field, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTag));
366
- strings.sort(); // eslint-disable-line functional/immutable-data
366
+ strings.sort();
367
367
  return strings.join('\t__SEPARATOR__\t');
368
368
  }
369
369
 
@@ -482,7 +482,7 @@ export function get6s(field, candidateFields) { // NB! Convert field to fields!!
482
482
 
483
483
  const relevantFields = candidateFields.filter(f => occurrenceNumbers.some(o => fieldHasOccurrenceNumber(f, o)));
484
484
  nvdebug(`${fieldToString(field)}: $6-RELFIELDS FOUND: ${relevantFields.length}...`);
485
- relevantFields.forEach(f => nvdebug(fieldToString(f)));
485
+ relevantFields.forEach(f => nvdebug(fieldToString(f))); // eslint-disable-line array-callback-return
486
486
  return relevantFields;
487
487
  }
488
488
 
@@ -493,5 +493,5 @@ export function resetSubfield6Tag(subfield, tag) {
493
493
  // NB! mainly for 1XX<->7XX transfers
494
494
  const newValue = `${tag}-${subfield.value.substring(4)}`;
495
495
  nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`, debugDev);
496
- subfield.value = newValue; // eslint-disable-line functional/immutable-data
496
+ subfield.value = newValue;
497
497
  }
@@ -3,7 +3,7 @@
3
3
 
4
4
  import {fieldToString, nvdebug} from './utils';
5
5
 
6
- const sf8Regexp = /^([1-9][0-9]*)(?:\.[0-9]+)?(?:\\[acprux])?$/u; // eslint-disable-line prefer-named-capture-group
6
+ const sf8Regexp = /^([1-9][0-9]*)(?:\.[0-9]+)?(?:\\[acprux])?$/u;
7
7
 
8
8
  export function isValidSubfield8(subfield) {
9
9
  if (subfield.code !== '8') {
@@ -48,7 +48,6 @@ export function recordGetFieldsWithSubfield8LinkingNumber(record, linkingNumber)
48
48
 
49
49
 
50
50
  export function fieldsGetAllSubfield8LinkingNumbers(fields) {
51
- /* eslint-disable */
52
51
  let subfield8LinkingNumbers = [];
53
52
  fields.forEach(field => {
54
53
  if (!field.subfields) {
@@ -64,8 +63,6 @@ export function fieldsGetAllSubfield8LinkingNumbers(fields) {
64
63
  });
65
64
 
66
65
  return subfield8LinkingNumbers;
67
- /* eslint-enable */
68
-
69
66
  }
70
67
 
71
68
  export function recordGetAllSubfield8LinkingNumbers(record) {
@@ -80,19 +77,19 @@ export function add8s(fields, record) {
80
77
  }
81
78
 
82
79
  nvdebug(`Linking number(s): ${linkingNumbers.join(', ')}`);
83
- linkingNumbers.forEach(number => collectLinkingNumberFields(number));
80
+ linkingNumbers.forEach(number => collectLinkingNumberFields(number)); // eslint-disable-line array-callback-return
84
81
 
85
- fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`));
82
+ fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`)); // eslint-disable-line array-callback-return
86
83
 
87
84
  return fields;
88
85
 
89
86
  function collectLinkingNumberFields(linkingNumber) {
90
87
  // Remove existing hits (to avoid field repetition):
91
- fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber)); // eslint-disable-line functional/immutable-data, no-param-reassign
88
+ fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber));
92
89
  // Add them and their "sisters" back:
93
90
  const addableFields = record.fields.filter(f => fieldHasLinkingNumber(f, linkingNumber));
94
- addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`));
95
- fields = fields.concat(addableFields); // eslint-disable-line functional/immutable-data, no-param-reassign
91
+ addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`)); // eslint-disable-line array-callback-return
92
+ fields = fields.concat(addableFields);
96
93
 
97
94
  }
98
95
  }