@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
@@ -104,8 +104,8 @@ export default function (config) {
104
104
  configMatchesSpec(val, key, confSpec);
105
105
 
106
106
  // Concat all excluded elements to array
107
- if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statements
108
- excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data
107
+ if (confSpec[key].excl) {
108
+ excluded.push(...confSpec[key].excl);
109
109
  }
110
110
  });
111
111
 
@@ -132,9 +132,9 @@ export default function (config) {
132
132
  }
133
133
 
134
134
  // Check subfields/dependencies recursively
135
- if (key === 'subfields' || key === 'dependencies') { // eslint-disable-line functional/no-conditional-statements
135
+ if (key === 'subfields' || key === 'dependencies') {
136
136
  forEach(data, ([, subObj]) => {
137
- if (typeof subObj === 'object') { // eslint-disable-line functional/no-conditional-statements
137
+ if (typeof subObj === 'object') {
138
138
  forEach(subObj, ([subKey, subVal]) => {
139
139
  configMatchesSpec(subVal, subKey, key === 'subfields' ? subSpec : depSpec);
140
140
  });
@@ -198,7 +198,7 @@ export default function (config) {
198
198
  // Check that subfield stuff
199
199
  if (confField === 'subfields') {
200
200
  const strict = confObj.strict || false; // Defaults to false
201
- let elementsTotal = 0; // eslint-disable-line functional/no-let
201
+ let elementsTotal = 0;
202
202
  const valid = !Object.entries(confObj.subfields).some(([key, val]) => {
203
203
  const matching = recordSubObj.subfields.filter(({code}) => code === key);
204
204
  elementsTotal += matching.length; // Calculate amount of record objects matching all confObj objects
@@ -15,7 +15,7 @@ export default function (tagPatterns) {
15
15
  return result ? undefined : pattern;
16
16
  });
17
17
  const isEmpty = missingFields.every(index => index === undefined);
18
- let errorMessage = ['The following tag patterns are not present in the record tag field: ']; // eslint-disable-line functional/no-let
18
+ let errorMessage = ['The following tag patterns are not present in the record tag field: '];
19
19
  errorMessage = errorMessage.concat(missingFields).join(' ');
20
20
 
21
21
  return isEmpty ? {valid: true, messages: []} : {valid: false, messages: [errorMessage]};
@@ -51,7 +51,7 @@ describe('fields-present', () => {
51
51
  expect(result).to.eql({valid: true, messages: []});
52
52
  });
53
53
  it('Finds the record valid', async () => {
54
- const tagPatterns = [/^(020|022|024)$/u]; // eslint-disable-line
54
+ const tagPatterns = [/^(020|022|024)$/u];
55
55
  const validator = await validatorFactory(tagPatterns);
56
56
  const record = new MarcRecord({
57
57
  fields: [
package/src/fix-33X.js CHANGED
@@ -376,7 +376,7 @@ export default function () {
376
376
  nvdebug(`FIX ${description}...`);
377
377
  const catLang = getCatalogingLanguage(record) || 'fin';
378
378
  const fields = getRelevantFields(record);
379
- fields.forEach(f => fixField(f, catLang));
379
+ fields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return
380
380
  nvdebug(` GOT ${fields.length}...`);
381
381
  // FFS: we actually need newFields array here! Videogame, for example, might be
382
382
  // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
@@ -395,7 +395,7 @@ export default function () {
395
395
  }
396
396
  const originalStrings = fields.map(f => fieldToString(f));
397
397
  const clonedFields = fields.map(f => clone(f));
398
- clonedFields.forEach(f => fixField(f, catLang));
398
+ clonedFields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return
399
399
  const modifiedStrings = clonedFields.map(f => fieldToString(f));
400
400
 
401
401
  const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);
@@ -467,9 +467,9 @@ export default function () {
467
467
  return;
468
468
  }
469
469
 
470
- subfieldA.value = newTerm; // eslint-disable-line functional/immutable-data
471
- field.subfields.push({'code': 'b', 'value': code}); // eslint-disable-line functional/immutable-data
472
- field.subfields.push(tagToSubfield2(field.tag)); // eslint-disable-line functional/immutable-data
470
+ subfieldA.value = newTerm;
471
+ field.subfields.push({'code': 'b', 'value': code});
472
+ field.subfields.push(tagToSubfield2(field.tag));
473
473
 
474
474
  function codeToTerm(code) {
475
475
  if (field.tag === '336') {
@@ -44,9 +44,9 @@ export default function () {
44
44
  return res;
45
45
  }
46
46
 
47
- res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`); // eslint-disable-line functional/immutable-data
47
+ res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`);
48
48
 
49
- res.valid = false; // eslint-disable-line functional/immutable-data
49
+ res.valid = false;
50
50
  return res;
51
51
  }
52
52
 
@@ -54,7 +54,7 @@ export default function () {
54
54
  const originalCountryCode = getCountryCodeFromField008(field008);
55
55
  const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);
56
56
  if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {
57
- field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`; // eslint-disable-line functional/immutable-data
57
+ field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`;
58
58
  return;
59
59
  }
60
60
  }
@@ -25,7 +25,7 @@ export default function () {
25
25
  fixLanguageField008(field008);
26
26
 
27
27
  const f041 = record.get('041');
28
- f041.forEach(f => fixField041(f));
28
+ f041.forEach(f => fixField041(f)); // eslint-disable-line array-callback-return
29
29
 
30
30
  return res;
31
31
  }
@@ -37,9 +37,10 @@ export default function () {
37
37
  validateField008(record, res);
38
38
 
39
39
  const f041 = record.get('041');
40
- f041.forEach(f => validateField041(f, res));
41
40
 
42
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
41
+ f041.forEach(f => validateField041(f, res)); // eslint-disable-line array-callback-return
42
+
43
+ res.valid = !(res.message.length >= 1);
43
44
  return res;
44
45
  }
45
46
 
@@ -56,8 +57,8 @@ export default function () {
56
57
  return;
57
58
  }
58
59
 
59
- res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`); // eslint-disable-line functional/immutable-data
60
- res.valid = false; // eslint-disable-line functional/immutable-data
60
+ res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`);
61
+ res.valid = false;
61
62
  }
62
63
 
63
64
 
@@ -78,7 +79,7 @@ export default function () {
78
79
  return;
79
80
  }
80
81
  const msg = `${originalString} => ${modifiedString}`;
81
- res.message.push(msg); // eslint-disable-line functional/immutable-data
82
+ res.message.push(msg);
82
83
 
83
84
  }
84
85
 
@@ -87,7 +88,7 @@ export default function () {
87
88
  const originalLanguage = getLanguageFromField008(field008);
88
89
  const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);
89
90
  if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {
90
- field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`; // eslint-disable-line functional/immutable-data
91
+ field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`;
91
92
  return;
92
93
  }
93
94
  }
@@ -97,13 +98,13 @@ export default function () {
97
98
  return;
98
99
  }
99
100
 
100
- field.subfields.forEach(sf => fixField041Subfield(sf));
101
+ field.subfields.forEach(sf => fixField041Subfield(sf)); // eslint-disable-line array-callback-return
101
102
 
102
103
  function fixField041Subfield(subfield) {
103
104
  if (!isRelevantField041SubfieldCode(subfield)) {
104
105
  return;
105
106
  }
106
- subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value); // eslint-disable-line functional/immutable-data
107
+ subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value);
107
108
  }
108
109
  }
109
110
 
@@ -42,12 +42,12 @@ export default function () {
42
42
  fieldFixRelatorTerms(field, language, language);
43
43
  const clonedFieldAsString = fieldToString(clonedField);
44
44
  const fieldAsString = fieldToString(field);
45
- if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements
46
- res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data
45
+ if (fieldAsString !== clonedFieldAsString) {
46
+ res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);
47
47
  }
48
48
  });
49
49
 
50
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
50
+ res.valid = !(res.message.length >= 1);
51
51
  return res;
52
52
  }
53
53
  }
@@ -139,7 +139,7 @@ function subfieldHandleRelatorTermAbbreviation(subfield, language) {
139
139
  const hit = `${finnishAbbreviations[lcValue]}${punc}`;
140
140
  nvdebug(`Relator hit: ${hit}`, debugDev);
141
141
  // NB! 'esitt.' => 'esittäjä'
142
- subfield.value = hit; // eslint-disable-line functional/immutable-data
142
+ subfield.value = hit;
143
143
  return;
144
144
  }
145
145
  }
@@ -157,7 +157,7 @@ function fieldHandleRelatorTermAbbreviations(field, language) {
157
157
  }
158
158
 
159
159
  const originalValue = fieldToString(field);
160
- field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));
160
+ field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language)); // eslint-disable-line array-callback-return
161
161
  const modifiedValue = fieldToString(field);
162
162
  if (modifiedValue === originalValue) {
163
163
  return;
@@ -212,7 +212,7 @@ function subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {
212
212
  if (subfield.code !== 'e') {
213
213
  return;
214
214
  }
215
- subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data
215
+ subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage);
216
216
  }
217
217
 
218
218
  export function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
@@ -222,7 +222,7 @@ export function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
222
222
  }
223
223
  fieldHandleRelatorTermAbbreviations(field, fromLanguage);
224
224
 
225
- field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));
225
+ field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return
226
226
  }
227
227
 
228
228
 
@@ -230,7 +230,7 @@ export function recordFixRelatorTerms(record, defaultToLanguage = null, defaultF
230
230
  const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);
231
231
  const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);
232
232
 
233
- record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));
233
+ record.fields.forEach(field => translateField(field, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return
234
234
 
235
235
  function translateField(field, from, to) {
236
236
  fieldFixRelatorTerms(field, from, to);
@@ -11,11 +11,11 @@ export default function (configuration) {
11
11
 
12
12
  function validate(record) {
13
13
  const messages = configuration.reduce((messages, item) => {
14
- let results; // eslint-disable-line functional/no-let
14
+ let results;
15
15
 
16
- if (item.leader) { // eslint-disable-line functional/no-conditional-statements
16
+ if (item.leader) {
17
17
  results = validateField(record.leader, item);
18
- } else { // eslint-disable-line functional/no-conditional-statements
18
+ } else {
19
19
  results = record.get(item.tag)
20
20
  .map(f => validateField(f.value, item, f.tag));
21
21
  }
@@ -23,13 +23,13 @@ export default function () {
23
23
  function fix(record) {
24
24
  record.fields
25
25
  .filter(tag => !uniqWith(record.fields).includes(tag))
26
- .forEach(tag => record.removeField(tag));
26
+ .forEach(tag => record.removeField(tag)); // eslint-disable-line array-callback-return
27
27
  }
28
28
 
29
29
  function uniqWith(fields) {
30
30
  return fields.reduce((uniq, field) => {
31
- if (!uniq.some(f => MarcRecord.isEqual(f, field))) { // eslint-disable-line functional/no-conditional-statements
32
- uniq.push(field); // eslint-disable-line functional/immutable-data
31
+ if (!uniq.some(f => MarcRecord.isEqual(f, field))) {
32
+ uniq.push(field);
33
33
  }
34
34
 
35
35
  return uniq;
@@ -25,7 +25,7 @@ export default function () {
25
25
 
26
26
  validateRecord(record, res);
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
 
@@ -35,22 +35,22 @@ export default function () {
35
35
  const clonedFields = JSON.parse(JSON.stringify(record.fields));
36
36
  recordNormalizeIndicators(record);
37
37
 
38
- record.fields.forEach((field, index) => compareFields(field, index));
38
+ record.fields.forEach((field, index) => compareFields(field, index)); // eslint-disable-line array-callback-return
39
39
 
40
40
  function compareFields(field, index) {
41
41
  const origFieldAsString = fieldToString(clonedFields[index]);
42
42
  //const clonedFieldAsString = fieldToString(field);
43
- if (clonedFields[index].ind1 !== field.ind1) { // eslint-disable-line functional/no-conditional-statements
43
+ if (clonedFields[index].ind1 !== field.ind1) {
44
44
  //nvdebug(`FIX IND1: '${clonedFields[index].ind1}' => '${field.ind1}': ${clonedFieldAsString}`);
45
- res.message.push(`Expected IND1 for '${origFieldAsString}' is '${field.ind1}'`); // eslint-disable-line functional/immutable-data
45
+ res.message.push(`Expected IND1 for '${origFieldAsString}' is '${field.ind1}'`);
46
46
  }
47
- if (clonedFields[index].ind2 !== field.ind2) { // eslint-disable-line functional/no-conditional-statements
47
+ if (clonedFields[index].ind2 !== field.ind2) {
48
48
  //nvdebug(`FIX IND2: '${clonedFields[index].ind2}' => '${field.ind2}': ${clonedFieldAsString}`);
49
- res.message.push(`Expected IND2 for '${origFieldAsString}' is '${field.ind2}'`); // eslint-disable-line functional/immutable-data
49
+ res.message.push(`Expected IND2 for '${origFieldAsString}' is '${field.ind2}'`);
50
50
  }
51
51
  }
52
52
  // Validator should not change the original record:
53
- record.fields = clonedFields; // eslint-disable-line functional/immutable-data
53
+ record.fields = clonedFields;
54
54
  return;
55
55
  }
56
56
  }
@@ -133,7 +133,7 @@ function normalizeNonFilingIndicator1(field, languages = []) {
133
133
  return;
134
134
  }
135
135
 
136
- field.ind1 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data
136
+ field.ind1 = determineNonFilingIndicatorValue(field, languages);
137
137
  }
138
138
 
139
139
  function normalizeNonFilingIndicator2(field, languages = []) {
@@ -141,7 +141,7 @@ function normalizeNonFilingIndicator2(field, languages = []) {
141
141
  return;
142
142
  }
143
143
 
144
- field.ind2 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data
144
+ field.ind2 = determineNonFilingIndicatorValue(field, languages);
145
145
  }
146
146
 
147
147
  const fiktiivisenAineistonLisaluokatFI = ['Eläimet', 'Erotiikka', 'Erä', 'Fantasia', 'Historia', 'Huumori', 'Jännitys', 'Kauhu', 'Novellit', 'Romantiikka', 'Scifi', 'Sota', 'Urheilu', 'Uskonto'];
@@ -158,7 +158,7 @@ function normalize084Indicator1(field) {
158
158
 
159
159
  // https://marc21.kansalliskirjasto.fi/bib/05X-08X.htm#084 and https://finto.fi/ykl/fi/page/fiktioluokka
160
160
  if (field.ind1 !== '9' && containsFiktiivisenAineistonLisaluokka(field) && field.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')) {
161
- field.ind1 = '9'; // eslint-disable-line functional/immutable-data
161
+ field.ind1 = '9';
162
162
  return;
163
163
  }
164
164
  }
@@ -168,7 +168,7 @@ function normalize245Indicator1(field, record) {
168
168
  return;
169
169
  }
170
170
  const field1XX = record.get('^1..$');
171
- field.ind1 = field1XX.length === 0 ? '0' : '1'; // eslint-disable-line functional/immutable-data
171
+ field.ind1 = field1XX.length === 0 ? '0' : '1';
172
172
  }
173
173
 
174
174
  function normalize776Indicator2(field) {
@@ -177,7 +177,7 @@ function normalize776Indicator2(field) {
177
177
  }
178
178
  // If subfield $i exists, ind2 must me '8'
179
179
  if (field.subfields.some(sf => sf.code === 'i')) {
180
- field.ind2 = '8'; // eslint-disable-line functional/immutable-data
180
+ field.ind2 = '8';
181
181
  return;
182
182
  }
183
183
  }
@@ -193,13 +193,13 @@ function recordNormalize490(record) {
193
193
  if (fields490.length <= fields8XX.length) {
194
194
  // Trace found for each field 490:
195
195
  fields490.forEach(f => {
196
- f.ind1 = '1'; // eslint-disable-line functional/immutable-data
196
+ f.ind1 = '1';
197
197
  });
198
198
  return;
199
199
  }
200
200
  if (fields8XX.length === 0) { // Fields 490 are always untraced (no traces found)
201
201
  fields490.forEach(f => {
202
- f.ind1 = '0'; // eslint-disable-line functional/immutable-data
202
+ f.ind1 = '0';
203
203
  });
204
204
  return;
205
205
  }
@@ -235,7 +235,7 @@ export function recordNormalizeIndicators(record) {
235
235
  // Language is used to handle non-filing indicators
236
236
  const languages = getLanguages(record);
237
237
 
238
- record.fields.forEach(field => fieldNormalizeIndicators(field, record, languages));
238
+ record.fields.forEach(field => fieldNormalizeIndicators(field, record, languages)); // eslint-disable-line array-callback-return
239
239
 
240
240
  }
241
241
 
package/src/isbn-issn.js CHANGED
@@ -173,14 +173,14 @@ export default ({hyphenateISBN = false, handleInvalid = false} = {}) => {
173
173
  function fix(record) {
174
174
  getRelevantFields(record).forEach(field => {
175
175
  if (field.tag === '020') {
176
- field.subfields.forEach(subfield => fixField020Subfield(field, subfield));
176
+ field.subfields.forEach(subfield => fixField020Subfield(field, subfield)); // eslint-disable-line array-callback-return
177
177
  return;
178
178
  }
179
179
  // 022 ISSN:
180
180
  const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');
181
- if (subfield && handleInvalid) { // eslint-disable-line functional/no-conditional-statements
181
+ if (subfield && handleInvalid) {
182
182
  // $a/$l => $y (bit overkill to add $z and remove $a/$l instead of just renaming)
183
- field.subfields.push({code: 'y', value: subfield.value}); // eslint-disable-line functional/immutable-data
183
+ field.subfields.push({code: 'y', value: subfield.value});
184
184
  record.removeSubfield(subfield, field);
185
185
  }
186
186
  });
@@ -198,8 +198,8 @@ export default ({hyphenateISBN = false, handleInvalid = false} = {}) => {
198
198
  }
199
199
  // ISBN is valid but is missing hyphens
200
200
  const normalizedValue = normalizeIsbnValue(subfield.value);
201
- if (normalizedValue !== undefined) { // eslint-disable-line functional/no-conditional-statements
202
- subfield.value = normalizedValue; // eslint-disable-line functional/immutable-data
201
+ if (normalizedValue !== undefined) {
202
+ subfield.value = normalizedValue;
203
203
  }
204
204
  }
205
205
 
@@ -212,7 +212,7 @@ export default ({hyphenateISBN = false, handleInvalid = false} = {}) => {
212
212
  return;
213
213
  }
214
214
  // $a => $z (bit overkill to add $z and remove $a instead of just renaming, but too lazy to fix/test thorougly)
215
- field.subfields.push({code: 'z', value: subfield.value}); // eslint-disable-line functional/immutable-data
215
+ field.subfields.push({code: 'z', value: subfield.value});
216
216
  record.removeSubfield(subfield, field);
217
217
  }
218
218
 
@@ -231,8 +231,8 @@ export default ({hyphenateISBN = false, handleInvalid = false} = {}) => {
231
231
  return;
232
232
  }
233
233
  const tail = value.substring(position + 1);
234
- subfield.value = head; // eslint-disable-line functional/immutable-data
235
- field.subfields.push({code: 'q', value: tail}); // eslint-disable-line functional/immutable-data
234
+ subfield.value = head;
235
+ field.subfields.push({code: 'q', value: tail});
236
236
  }
237
237
 
238
238
  function normalizeIsbnValue(value) {
@@ -244,10 +244,10 @@ export default ({hyphenateISBN = false, handleInvalid = false} = {}) => {
244
244
  }
245
245
  const numbersOnly = trimmedValue.replace(/[^0-9Xx]+/ug, '');
246
246
  const parsedIsbn = ISBN.parse(trimmedValue);
247
- if (hyphenateISBN) { // eslint-disable-line functional/no-conditional-statements
248
- return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h; // eslint-disable-line functional/immutable-data
247
+ if (hyphenateISBN) {
248
+ return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h;
249
249
  }
250
- return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13; // eslint-disable-line functional/immutable-data
250
+ return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13;
251
251
  }
252
252
  }
253
253
  }
@@ -49,24 +49,24 @@ export default async function (tagPattern, treshold = 0.9) {
49
49
  }
50
50
 
51
51
  if (results.detected && results.detected !== results.currentCode) {
52
- const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data
52
+ const f008 = record.get(/^008$/u).shift();
53
53
 
54
- if (f008) { // eslint-disable-line functional/no-conditional-statements
54
+ if (f008) {
55
55
  const start = f008.value.slice(0, 35);
56
56
  const end = f008.value.slice(38);
57
- f008.value = `${start}${results.detected}${end}`; // eslint-disable-line functional/immutable-data
57
+ f008.value = `${start}${results.detected}${end}`;
58
58
  }
59
59
 
60
- const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data
60
+ const f041 = record.get(/^041$/u).shift();
61
61
 
62
62
  if (f041) {
63
63
  const subfield = f041.subfields.find(sf => sf.code === 'a');
64
64
 
65
- if (subfield) { // eslint-disable-line functional/no-conditional-statements
66
- subfield.value = results.detected; // eslint-disable-line functional/immutable-data
67
- } else { // eslint-disable-line functional/no-conditional-statements
68
- f041.subfields.push({code: 'a', value: results.detected}); // eslint-disable-line functional/immutable-data
69
- f041.subfields.sort((a, b) => { // eslint-disable-line functional/immutable-data
65
+ if (subfield) {
66
+ subfield.value = results.detected;
67
+ } else {
68
+ f041.subfields.push({code: 'a', value: results.detected});
69
+ f041.subfields.sort((a, b) => {
70
70
  if (a.code < b.code) {
71
71
  return -1;
72
72
  }
@@ -78,7 +78,7 @@ export default async function (tagPattern, treshold = 0.9) {
78
78
  return 0;
79
79
  });
80
80
  }
81
- } else { // eslint-disable-line functional/no-conditional-statements
81
+ } else {
82
82
  record.insertField({tag: '041', ind1: ' ', ind2: ' ', subfields: [
83
83
  {
84
84
  code: 'a',
@@ -49,8 +49,8 @@ function differentPublisherSubfields(field1, field2) {
49
49
 
50
50
  export function splitToNameAndQualifier(value) {
51
51
  if (value.match(/^.* \([^()]+\)$/u)) {
52
- const name = value.replace(/^(.*) \([^()]+\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group
53
- const qualifier = value.replace(/^.* (\([^()]+\))$/u, '$1'); // eslint-disable-line prefer-named-capture-group
52
+ const name = value.replace(/^(.*) \([^()]+\)$/u, '$1');
53
+ const qualifier = value.replace(/^.* (\([^()]+\))$/u, '$1');
54
54
  return [name, qualifier];
55
55
  }
56
56
  return [value, undefined];
@@ -189,7 +189,7 @@ function pairableValue(tag, subfieldCode, value1, value2) {
189
189
 
190
190
 
191
191
  function counterpartExtraNormalize(tag, subfieldCode, value) {
192
- /* eslint-disable prefer-named-capture-group, no-param-reassign */
192
+
193
193
  // Remove trailing punctuation:
194
194
  value = value.replace(/(\S)(?:,|\.|\?|!|\. -| *:| *;| =| \/)$/u, '$1');
195
195
  // Remove brackets:
@@ -540,7 +540,7 @@ function fieldToNamePart(field) {
540
540
  const subsetField = {'tag': field.tag, 'ind1': field.ind1, 'ind2': field.ind2, subfields: relevantSubfields};
541
541
 
542
542
  /*
543
- if (index > -1) { // eslint-disable-line functional/no-conditional-statements
543
+ if (index > -1) {
544
544
  debugDev(`Name subset: ${fieldToString(subsetField)}`);
545
545
  }
546
546
  */
@@ -624,7 +624,7 @@ function mergablePairWithAltName(normCandField, normalizedField, altName, config
624
624
  if (!a) {
625
625
  return false;
626
626
  }
627
- a.value = altName; // eslint-disable-line functional/immutable-data
627
+ a.value = altName;
628
628
 
629
629
  return mergablePair(normCandField, normalizedField, config);
630
630
  }
@@ -683,9 +683,9 @@ function getCounterpartCandidates(field, record) {
683
683
  }
684
684
 
685
685
  export function baseIsSource(base, source) {
686
- base.localTest = true; // eslint-disable-line functional/immutable-data
686
+ base.localTest = true;
687
687
  const result = source.localTest;
688
- delete base.localTest; // eslint-disable-line functional/immutable-data
688
+ delete base.localTest;
689
689
  return result;
690
690
  }
691
691
 
@@ -29,7 +29,7 @@ export default function () {
29
29
  //const candFields = record.fields.toReversed(); // Node 20+ only! Filter via config?
30
30
  const fields = config && config.tagPattern ? record.get(config.tagPattern) : record.get(/^[1678](?:00|10|11|30)$/u);
31
31
 
32
- fields.reverse(); // eslint-disable-line functional/immutable-data
32
+ fields.reverse();
33
33
  const mergedField = fields.find(f => mergeField(record, record, f, config));
34
34
  if (!mergedField) {
35
35
  return;
@@ -41,9 +41,9 @@ export default function () {
41
41
 
42
42
  function fix(record, config = undefined) {
43
43
  const config2 = config || defaultConfig;
44
- record.internalMerge = true; // eslint-disable-line functional/immutable-data
44
+ record.internalMerge = true;
45
45
  mergeFieldsWithinRecord(record, config2);
46
- delete record.internalMerge; // eslint-disable-line functional/immutable-data
46
+ delete record.internalMerge;
47
47
  // Remove deleted fields and field.merged marks:
48
48
  postprocessRecords(record, record);
49
49
 
@@ -303,7 +303,7 @@ export function getMergeConstraintsForTag(tag, constraintName) {
303
303
  return null;
304
304
  }
305
305
  // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+
306
- if (tagsConstraintsArray.length > 1) { // eslint-disable-line functional/no-conditional-statements
306
+ if (tagsConstraintsArray.length > 1) {
307
307
  debugDev(`WARNING\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);
308
308
  }
309
309
  return constraintToValue(tagsConstraintsArray[0], constraintName);