@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.7

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
@@ -1 +1 @@
1
- {"version":3,"file":"subfield8Utils.js","names":["_utils","require","sf8Regexp","isValidSubfield8","subfield","code","match","value","length","getSubfield8Value","undefined","getSubfield8LinkingNumber","parseInt","fieldHasLinkingNumber","field","linkingNumber","subfields","some","sf","recordGetFieldsWithSubfield8LinkingNumber","record","fields","filter","fieldsGetAllSubfield8LinkingNumbers","subfield8LinkingNumbers","forEach","includes","nvdebug","push","recordGetAllSubfield8LinkingNumbers","add8s","linkingNumbers","join","number","collectLinkingNumberFields","f","fieldToString","addableFields","concat","fieldHasValidSubfield8"],"sources":["../src/subfield8Utils.js"],"sourcesContent":["// import createDebugLogger from 'debug';\n// const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/subfield8Utils');\n\nimport {fieldToString, nvdebug} from './utils';\n\nconst sf8Regexp = /^([1-9][0-9]*)(?:\\.[0-9]+)?(?:\\\\[acprux])?$/u; // eslint-disable-line prefer-named-capture-group\n\nexport function isValidSubfield8(subfield) {\n if (subfield.code !== '8') {\n return false;\n }\n\n //nvdebug(` IS VALID $8? '${subfieldToString(subfield)}'`);\n const match = subfield.value.match(sf8Regexp);\n //nvdebug(` IS VALID $8? '${subfieldToString(subfield)}' vs ${match.length}}`);\n return match && match.length > 0;\n}\n\nexport function getSubfield8Value(subfield) {\n if (!isValidSubfield8(subfield)) {\n return undefined;\n }\n return subfield.value;\n}\n\nexport function getSubfield8LinkingNumber(subfield) {\n const value = getSubfield8Value(subfield);\n if (value === undefined) {\n return 0;\n }\n return parseInt(value, 10);\n}\n\n\nexport function fieldHasLinkingNumber(field, linkingNumber) {\n if (!field.subfields) {\n return false;\n }\n return field.subfields.some(sf => getSubfield8LinkingNumber(sf) === linkingNumber);\n}\n\nexport function recordGetFieldsWithSubfield8LinkingNumber(record, linkingNumber) {\n if (linkingNumber < 1) {\n return;\n }\n return record.fields.filter(field => fieldHasLinkingNumber(field, linkingNumber));\n}\n\n\nexport function fieldsGetAllSubfield8LinkingNumbers(fields) {\n /* eslint-disable */\n let subfield8LinkingNumbers = [];\n fields.forEach(field => {\n if (!field.subfields) {\n return;\n }\n field.subfields.forEach(sf => {\n const linkingNumber = getSubfield8LinkingNumber(sf);\n if (linkingNumber > 0 && !subfield8LinkingNumbers.includes(linkingNumber)) {\n nvdebug(` LINK8: Add subfield \\$8 ${linkingNumber} to seen values list`);\n subfield8LinkingNumbers.push(linkingNumber);\n }\n });\n });\n\n return subfield8LinkingNumbers;\n /* eslint-enable */\n\n}\n\nexport function recordGetAllSubfield8LinkingNumbers(record) {\n return fieldsGetAllSubfield8LinkingNumbers(record.fields);\n}\n\n\nexport function add8s(fields, record) {\n const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);\n if (linkingNumbers.length === 0) {\n return fields;\n }\n\n nvdebug(`Linking number(s): ${linkingNumbers.join(', ')}`);\n linkingNumbers.forEach(number => collectLinkingNumberFields(number));\n\n fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`));\n\n return fields;\n\n function collectLinkingNumberFields(linkingNumber) {\n // Remove existing hits (to avoid field repetition):\n fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber)); // eslint-disable-line functional/immutable-data, no-param-reassign\n // Add them and their \"sisters\" back:\n const addableFields = record.fields.filter(f => fieldHasLinkingNumber(f, linkingNumber));\n addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`));\n fields = fields.concat(addableFields); // eslint-disable-line functional/immutable-data, no-param-reassign\n\n }\n}\n\nexport function fieldHasValidSubfield8(field) {\n return field.subfields && field.subfields.some(sf => isValidSubfield8(sf));\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"subfield8Utils.js","names":["_utils","require","sf8Regexp","isValidSubfield8","subfield","code","match","value","length","getSubfield8Value","undefined","getSubfield8LinkingNumber","parseInt","fieldHasLinkingNumber","field","linkingNumber","subfields","some","sf","recordGetFieldsWithSubfield8LinkingNumber","record","fields","filter","fieldsGetAllSubfield8LinkingNumbers","subfield8LinkingNumbers","forEach","includes","nvdebug","push","recordGetAllSubfield8LinkingNumbers","add8s","linkingNumbers","join","number","collectLinkingNumberFields","f","fieldToString","addableFields","concat","fieldHasValidSubfield8"],"sources":["../src/subfield8Utils.js"],"sourcesContent":["// import createDebugLogger from 'debug';\n// const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/subfield8Utils');\n\nimport {fieldToString, nvdebug} from './utils';\n\nconst sf8Regexp = /^([1-9][0-9]*)(?:\\.[0-9]+)?(?:\\\\[acprux])?$/u;\n\nexport function isValidSubfield8(subfield) {\n if (subfield.code !== '8') {\n return false;\n }\n\n //nvdebug(` IS VALID $8? '${subfieldToString(subfield)}'`);\n const match = subfield.value.match(sf8Regexp);\n //nvdebug(` IS VALID $8? '${subfieldToString(subfield)}' vs ${match.length}}`);\n return match && match.length > 0;\n}\n\nexport function getSubfield8Value(subfield) {\n if (!isValidSubfield8(subfield)) {\n return undefined;\n }\n return subfield.value;\n}\n\nexport function getSubfield8LinkingNumber(subfield) {\n const value = getSubfield8Value(subfield);\n if (value === undefined) {\n return 0;\n }\n return parseInt(value, 10);\n}\n\n\nexport function fieldHasLinkingNumber(field, linkingNumber) {\n if (!field.subfields) {\n return false;\n }\n return field.subfields.some(sf => getSubfield8LinkingNumber(sf) === linkingNumber);\n}\n\nexport function recordGetFieldsWithSubfield8LinkingNumber(record, linkingNumber) {\n if (linkingNumber < 1) {\n return;\n }\n return record.fields.filter(field => fieldHasLinkingNumber(field, linkingNumber));\n}\n\n\nexport function fieldsGetAllSubfield8LinkingNumbers(fields) {\n let subfield8LinkingNumbers = [];\n fields.forEach(field => {\n if (!field.subfields) {\n return;\n }\n field.subfields.forEach(sf => {\n const linkingNumber = getSubfield8LinkingNumber(sf);\n if (linkingNumber > 0 && !subfield8LinkingNumbers.includes(linkingNumber)) {\n nvdebug(` LINK8: Add subfield \\$8 ${linkingNumber} to seen values list`);\n subfield8LinkingNumbers.push(linkingNumber);\n }\n });\n });\n\n return subfield8LinkingNumbers;\n}\n\nexport function recordGetAllSubfield8LinkingNumbers(record) {\n return fieldsGetAllSubfield8LinkingNumbers(record.fields);\n}\n\n\nexport function add8s(fields, record) {\n const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);\n if (linkingNumbers.length === 0) {\n return fields;\n }\n\n nvdebug(`Linking number(s): ${linkingNumbers.join(', ')}`);\n linkingNumbers.forEach(number => collectLinkingNumberFields(number)); // eslint-disable-line array-callback-return\n\n fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`)); // eslint-disable-line array-callback-return\n\n return fields;\n\n function collectLinkingNumberFields(linkingNumber) {\n // Remove existing hits (to avoid field repetition):\n fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber));\n // Add them and their \"sisters\" back:\n const addableFields = record.fields.filter(f => fieldHasLinkingNumber(f, linkingNumber));\n addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`)); // eslint-disable-line array-callback-return\n fields = fields.concat(addableFields);\n\n }\n}\n\nexport function fieldHasValidSubfield8(field) {\n return field.subfields && field.subfields.some(sf => isValidSubfield8(sf));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -31,7 +31,7 @@ function _default() {
31
31
  normalizeSubfieldValues(field, catLang);
32
32
  });
33
33
 
34
- // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data
34
+ // message.valid = !(message.message.length >= 1);
35
35
  return res;
36
36
  }
37
37
  function validate(record) {
@@ -42,7 +42,7 @@ function _default() {
42
42
  record.fields.forEach(field => {
43
43
  validateField(field, res, catLang);
44
44
  });
45
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
45
+ res.valid = !(res.message.length >= 1);
46
46
  return res;
47
47
  }
48
48
  function validateField(field, res, catLang) {
@@ -54,7 +54,7 @@ function _default() {
54
54
  const mod = (0, _utils.fieldToString)(normalizedField);
55
55
  if (orig !== mod) {
56
56
  // Fail as the input is "broken"/"crap"/sumthing
57
- res.message.push(`'${orig}' requires subfield internal mods/normalization`); // eslint-disable-line functional/immutable-data
57
+ res.message.push(`'${orig}' requires subfield internal mods/normalization`);
58
58
  return;
59
59
  }
60
60
  return;
@@ -62,7 +62,6 @@ function _default() {
62
62
  }
63
63
  function handleInitials(value, subfieldCode, field) {
64
64
  // MRA-267/273
65
- /* eslint-disable */
66
65
  if (field.ind1 === '1' && subfieldCode === 'a' && ['100', '600', '700', '800'].includes(field.tag) && !(0, _utils.fieldHasSubfield)(field, '0')) {
67
66
  // Fix MRA-267/273 (partial): Handle the most common case(s). (And extend them rules later on if the need arises):
68
67
  // No longest initial sequence I've seen is six (in a Sri Lankan name).
@@ -72,8 +71,6 @@ function handleInitials(value, subfieldCode, field) {
72
71
  }
73
72
  }
74
73
  return value;
75
-
76
- /* eslint-enable */
77
74
  function initialsInRow(str) {
78
75
  // initial space confirms us that it's an initial
79
76
  return str.match(/ (?:[A-Z]|Å|Ä|Ö)\.(?:[A-Z]|Å|Ä|Ö)/u);
@@ -119,7 +116,7 @@ function getNormalizedValue(subfield, field, catLang) {
119
116
  function handleMovies(value) {
120
117
  if (subfield.code === 'a' && ['130', '630', '730'].includes(field.tag)) {
121
118
  // MRA-614: "(elokuva, 2000)" => "(elokuva : 2000)""
122
- return value.replace(/\((elokuva), (19[0-9][0-9]|20[0-2][0-9])\)/u, '($1 : $2)'); // eslint-disable-line prefer-named-capture-group
119
+ return value.replace(/\((elokuva), (19[0-9][0-9]|20[0-2][0-9])\)/u, '($1 : $2)');
123
120
  }
124
121
  return value;
125
122
  }
@@ -151,7 +148,7 @@ function normalizeSubfieldValues(field, catLang) {
151
148
  if (!field.subfields[index].value) {
152
149
  return;
153
150
  }
154
- field.subfields[index].value = getNormalizedValue(subfield, field, catLang); // eslint-disable-line functional/immutable-data
151
+ field.subfields[index].value = getNormalizedValue(subfield, field, catLang);
155
152
  });
156
153
  return field;
157
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subfieldValueNormalizations.js","names":["_clone","_interopRequireDefault","require","_utils","_punctuation","_subfield6Utils","e","__esModule","default","_default","description","validate","fix","record","catLang","getCatalogingLanguage","res","message","valid","fields","forEach","field","normalizeSubfieldValues","validateField","length","subfields","orig","fieldToString","normalizedField","clone","mod","push","handleInitials","value","subfieldCode","ind1","includes","tag","fieldHasSubfield","i","initialsInRow","replace","str","match","getNormalizedValue","subfield","handleFikt","uppercaseLanguage","handleMovies","code","wrapFiktiivinenHahmo","expandFikt","relevantTags","targetTag","tagForUppercasing","newValue","toUpperCase","slice","fieldFixPunctuation","fieldGetUnambiguousTag","index"],"sources":["../src/subfieldValueNormalizations.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldHasSubfield, fieldToString, getCatalogingLanguage} from './utils';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldGetUnambiguousTag} from './subfield6Utils';\n\n// NB! You should probably run punctuation fixes after this validator!\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Fix various subfield internal values',\n validate, fix\n };\n\n function fix(record) {\n const catLang = getCatalogingLanguage(record, 'fin');\n const res = {message: [], fix: [], valid: true};\n\n record.fields.forEach(field => {\n normalizeSubfieldValues(field, catLang);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n const catLang = getCatalogingLanguage(record, 'fin');\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, catLang);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res, catLang) {\n if (!field.subfields) {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = normalizeSubfieldValues(clone(field), catLang);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' requires subfield internal mods/normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\n\nfunction handleInitials(value, subfieldCode, field) {\n // MRA-267/273\n /* eslint-disable */\n if (field.ind1 === '1' && subfieldCode === 'a' && ['100', '600', '700', '800'].includes(field.tag) && !fieldHasSubfield(field, '0')) {\n // Fix MRA-267/273 (partial): Handle the most common case(s). (And extend them rules later on if the need arises):\n // No longest initial sequence I've seen is six (in a Sri Lankan name).\n for (var i=0; i < 6 && initialsInRow(value); i++) {\n // NB: Regexp has ','. Everything before it belongs to the surname. Everything after it is free game.\n value = value.replace(/(,.*) ([A-Z]|Å|Ö|Ö)\\.([A-Z]|Å|Ö|Ö)/u, '$1 $2. $3');\n }\n }\n\n return value;\n\n /* eslint-enable */\n function initialsInRow(str) {\n // initial space confirms us that it's an initial\n return str.match(/ (?:[A-Z]|Å|Ä|Ö)\\.(?:[A-Z]|Å|Ä|Ö)/u);\n }\n}\n\nfunction getNormalizedValue(subfield, field, catLang) {\n return handleFikt(uppercaseLanguage(handleMovies(handleInitials(subfield.value, subfield.code, field))));\n\n function handleFikt(value) {\n if (subfield.code !== 'c' || field.tag !== '600') {\n return value;\n }\n\n return wrapFiktiivinenHahmo(expandFikt(value));\n\n function wrapFiktiivinenHahmo(value) {\n if (value.includes('(')) { // Some kind of parentheses already found -> nothing to do here\n return value;\n }\n if (value.match(/^(?:fiktiivinen hahmo|fiktiv gestalt|fiktiivinen yhteisö)[,.]?$/u)) {\n // Hope that some other module handles punctuation, if needed:\n return `(${value.replace(/[.,]$/u, '')})`;\n }\n return value;\n }\n\n // wrap text around parentheses\n function expandFikt(value) {\n if (field.ind1 === '3') { // Not handling \"fiktiivinen yhteisö\" at the moment\n return value;\n }\n\n if (value.match(/\\bfikt\\.?(?:$|[,)])/u) && !value.match(/fikt.*fikt/ui)) {\n // NB! Dot '.' in 'fikt.' might also be punctuation as well. Run punctuation2 fixer after this fixer!\n if (catLang === 'fin') {\n return value.replace(/\\bfikt\\./u, 'fiktiivinen hahmo');\n }\n if (catLang === 'swe') {\n return value.replace(/\\bfikt\\./u, 'fiktiv gestalt');\n }\n }\n return value;\n }\n\n }\n\n function handleMovies(value) {\n if (subfield.code === 'a' && ['130', '630', '730'].includes(field.tag)) {\n // MRA-614: \"(elokuva, 2000)\" => \"(elokuva : 2000)\"\"\n return value.replace(/\\((elokuva), (19[0-9][0-9]|20[0-2][0-9])\\)/u, '($1 : $2)'); // eslint-disable-line prefer-named-capture-group\n }\n return value;\n }\n\n\n function uppercaseLanguage(value) { // Part of MET-549\n const relevantTags = ['130', '240', '243', '600', '610', '611', '630', '700', '710', '711', '730', '800', '810', '811', '830'];\n\n if (subfield.code !== 'l') {\n return value;\n }\n const targetTag = tagForUppercasing();\n if (relevantTags.includes(targetTag)) {\n const newValue = `${value[0].toUpperCase()}${value.slice(1)}`;\n if (newValue !== value) {\n fieldFixPunctuation(field); // Rather hackily try to fix prev punc on the fly\n return newValue;\n }\n }\n\n function tagForUppercasing() {\n return field.tag === '880' ? fieldGetUnambiguousTag(field) : field.tag;\n }\n\n return value;\n }\n}\n\nfunction normalizeSubfieldValues(field, catLang) {\n if (!field.subfields) {\n return field;\n }\n field.subfields.forEach((subfield, index) => {\n if (!field.subfields[index].value) {\n return;\n }\n field.subfields[index].value = getNormalizedValue(subfield, field, catLang); // eslint-disable-line functional/immutable-data\n });\n return field;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"subfieldValueNormalizations.js","names":["_clone","_interopRequireDefault","require","_utils","_punctuation","_subfield6Utils","e","__esModule","default","_default","description","validate","fix","record","catLang","getCatalogingLanguage","res","message","valid","fields","forEach","field","normalizeSubfieldValues","validateField","length","subfields","orig","fieldToString","normalizedField","clone","mod","push","handleInitials","value","subfieldCode","ind1","includes","tag","fieldHasSubfield","i","initialsInRow","replace","str","match","getNormalizedValue","subfield","handleFikt","uppercaseLanguage","handleMovies","code","wrapFiktiivinenHahmo","expandFikt","relevantTags","targetTag","tagForUppercasing","newValue","toUpperCase","slice","fieldFixPunctuation","fieldGetUnambiguousTag","index"],"sources":["../src/subfieldValueNormalizations.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldHasSubfield, fieldToString, getCatalogingLanguage} from './utils';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldGetUnambiguousTag} from './subfield6Utils';\n\n// NB! You should probably run punctuation fixes after this validator!\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Fix various subfield internal values',\n validate, fix\n };\n\n function fix(record) {\n const catLang = getCatalogingLanguage(record, 'fin');\n const res = {message: [], fix: [], valid: true};\n\n record.fields.forEach(field => {\n normalizeSubfieldValues(field, catLang);\n });\n\n // message.valid = !(message.message.length >= 1);\n return res;\n }\n\n function validate(record) {\n const catLang = getCatalogingLanguage(record, 'fin');\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, catLang);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res, catLang) {\n if (!field.subfields) {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = normalizeSubfieldValues(clone(field), catLang);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' requires subfield internal mods/normalization`);\n return;\n }\n return;\n }\n}\n\n\nfunction handleInitials(value, subfieldCode, field) {\n // MRA-267/273\n if (field.ind1 === '1' && subfieldCode === 'a' && ['100', '600', '700', '800'].includes(field.tag) && !fieldHasSubfield(field, '0')) {\n // Fix MRA-267/273 (partial): Handle the most common case(s). (And extend them rules later on if the need arises):\n // No longest initial sequence I've seen is six (in a Sri Lankan name).\n for (var i=0; i < 6 && initialsInRow(value); i++) {\n // NB: Regexp has ','. Everything before it belongs to the surname. Everything after it is free game.\n value = value.replace(/(,.*) ([A-Z]|Å|Ö|Ö)\\.([A-Z]|Å|Ö|Ö)/u, '$1 $2. $3');\n }\n }\n\n return value;\n\n function initialsInRow(str) {\n // initial space confirms us that it's an initial\n return str.match(/ (?:[A-Z]|Å|Ä|Ö)\\.(?:[A-Z]|Å|Ä|Ö)/u);\n }\n}\n\nfunction getNormalizedValue(subfield, field, catLang) {\n return handleFikt(uppercaseLanguage(handleMovies(handleInitials(subfield.value, subfield.code, field))));\n\n function handleFikt(value) {\n if (subfield.code !== 'c' || field.tag !== '600') {\n return value;\n }\n\n return wrapFiktiivinenHahmo(expandFikt(value));\n\n function wrapFiktiivinenHahmo(value) {\n if (value.includes('(')) { // Some kind of parentheses already found -> nothing to do here\n return value;\n }\n if (value.match(/^(?:fiktiivinen hahmo|fiktiv gestalt|fiktiivinen yhteisö)[,.]?$/u)) {\n // Hope that some other module handles punctuation, if needed:\n return `(${value.replace(/[.,]$/u, '')})`;\n }\n return value;\n }\n\n // wrap text around parentheses\n function expandFikt(value) {\n if (field.ind1 === '3') { // Not handling \"fiktiivinen yhteisö\" at the moment\n return value;\n }\n\n if (value.match(/\\bfikt\\.?(?:$|[,)])/u) && !value.match(/fikt.*fikt/ui)) {\n // NB! Dot '.' in 'fikt.' might also be punctuation as well. Run punctuation2 fixer after this fixer!\n if (catLang === 'fin') {\n return value.replace(/\\bfikt\\./u, 'fiktiivinen hahmo');\n }\n if (catLang === 'swe') {\n return value.replace(/\\bfikt\\./u, 'fiktiv gestalt');\n }\n }\n return value;\n }\n\n }\n\n function handleMovies(value) {\n if (subfield.code === 'a' && ['130', '630', '730'].includes(field.tag)) {\n // MRA-614: \"(elokuva, 2000)\" => \"(elokuva : 2000)\"\"\n return value.replace(/\\((elokuva), (19[0-9][0-9]|20[0-2][0-9])\\)/u, '($1 : $2)');\n }\n return value;\n }\n\n\n function uppercaseLanguage(value) { // Part of MET-549\n const relevantTags = ['130', '240', '243', '600', '610', '611', '630', '700', '710', '711', '730', '800', '810', '811', '830'];\n\n if (subfield.code !== 'l') {\n return value;\n }\n const targetTag = tagForUppercasing();\n if (relevantTags.includes(targetTag)) {\n const newValue = `${value[0].toUpperCase()}${value.slice(1)}`;\n if (newValue !== value) {\n fieldFixPunctuation(field); // Rather hackily try to fix prev punc on the fly\n return newValue;\n }\n }\n\n function tagForUppercasing() {\n return field.tag === '880' ? fieldGetUnambiguousTag(field) : field.tag;\n }\n\n return value;\n }\n}\n\nfunction normalizeSubfieldValues(field, catLang) {\n if (!field.subfields) {\n return field;\n }\n field.subfields.forEach((subfield, index) => {\n if (!field.subfields[index].value) {\n return;\n }\n field.subfields[index].value = getNormalizedValue(subfield, field, catLang);\n });\n return field;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -24,7 +24,7 @@ function _default() {
24
24
  fix: [],
25
25
  valid: true
26
26
  };
27
- record.fields.forEach(f => fixField(f, record));
27
+ record.fields.forEach(f => fixField(f, record)); // eslint-disable-line array-callback-return
28
28
  return res;
29
29
  }
30
30
  function validate(record) {
@@ -34,7 +34,7 @@ function _default() {
34
34
  record.fields.forEach(field => {
35
35
  validateField(field, res, record);
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
  function validateField(field, res, record) {
@@ -46,13 +46,13 @@ function _default() {
46
46
  const mod = (0, _utils.fieldToString)(normalizedField);
47
47
  if (orig !== mod) {
48
48
  // Fail as the input is "broken"/"crap"/sumthing
49
- res.message.push(`FIXABLE: '${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data
49
+ res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
50
50
  return;
51
51
  }
52
52
 
53
53
  /*
54
54
  if (fieldHasUnfixableStuff(field)) {
55
- res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`); // eslint-disable-line functional/immutable-data
55
+ res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
56
56
  return;
57
57
  }
58
58
  */
@@ -92,16 +92,16 @@ function _default() {
92
92
  if (!fieldIsBluray007(field)) {
93
93
  return;
94
94
  }
95
- //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5); // eslint-disable-line functional/immutable-data
95
+ //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);
96
96
  //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string
97
- field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`; // eslint-disable-line functional/immutable-data
97
+ field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;
98
98
  }
99
99
  function convert007DvdToBluray(field) {
100
100
  if (!fieldIsDvd007(field)) {
101
101
  return;
102
102
  }
103
- //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`); // eslint-disable-line functional/immutable-data
104
- field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`; // eslint-disable-line functional/immutable-data
103
+ //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);
104
+ field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;
105
105
  }
106
106
  function fixField(field, record) {
107
107
  if (field.tag !== '007') {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-007-and-300.js","names":["_utils","require","_clone","_interopRequireDefault","e","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","f","fixField","field","validateField","length","tag","orig","fieldToString","normalizedField","clone","mod","push","fieldIsBluray007","value","match","fieldIsDvd007","fieldIsBluray300","subfields","some","subfield","fieldIsDvd300","recordHasBluray300","recordHasDvd300","convert007BlurayToDvd","substring","convert007DvdToBluray"],"sources":["../src/sync-007-and-300.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fixField(f, record));\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res, record) {\n if (field.tag !== '007') {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fixField(clone(field), record);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n\n /*\n if (fieldHasUnfixableStuff(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n */\n return;\n }\n\n function fieldIsBluray007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...s/u);\n }\n\n function fieldIsDvd007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...v/u);\n }\n\n function fieldIsBluray300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));\n }\n\n function fieldIsDvd300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/DVD/ui));\n }\n\n function recordHasBluray300(record) {\n return record.fields.some(f => fieldIsBluray300(f));\n }\n\n function recordHasDvd300(record) {\n return record.fields.some(f => fieldIsDvd300(f));\n }\n\n function convert007BlurayToDvd(field) {\n if (!fieldIsBluray007(field)) {\n return;\n }\n //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5); // eslint-disable-line functional/immutable-data\n //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string\n field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`; // eslint-disable-line functional/immutable-data\n }\n\n function convert007DvdToBluray(field) {\n if (!fieldIsDvd007(field)) {\n return;\n }\n //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`); // eslint-disable-line functional/immutable-data\n field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`; // eslint-disable-line functional/immutable-data\n }\n\n function fixField(field, record) {\n if (field.tag !== '007') {\n return field;\n }\n\n if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {\n // FIX 007: DVD -> Blu-ray\n convert007DvdToBluray(field);\n return field;\n }\n\n if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {\n // FIX 007: Blu-Ray -> DVD\n convert007BlurayToDvd(field);\n return field;\n }\n\n return field;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"sync-007-and-300.js","names":["_utils","require","_clone","_interopRequireDefault","e","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","f","fixField","field","validateField","length","tag","orig","fieldToString","normalizedField","clone","mod","push","fieldIsBluray007","value","match","fieldIsDvd007","fieldIsBluray300","subfields","some","subfield","fieldIsDvd300","recordHasBluray300","recordHasDvd300","convert007BlurayToDvd","substring","convert007DvdToBluray"],"sources":["../src/sync-007-and-300.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fixField(f, record)); // eslint-disable-line array-callback-return\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res, record) {\n if (field.tag !== '007') {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fixField(clone(field), record);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`);\n return;\n }\n\n /*\n if (fieldHasUnfixableStuff(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);\n return;\n }\n */\n return;\n }\n\n function fieldIsBluray007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...s/u);\n }\n\n function fieldIsDvd007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...v/u);\n }\n\n function fieldIsBluray300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));\n }\n\n function fieldIsDvd300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/DVD/ui));\n }\n\n function recordHasBluray300(record) {\n return record.fields.some(f => fieldIsBluray300(f));\n }\n\n function recordHasDvd300(record) {\n return record.fields.some(f => fieldIsDvd300(f));\n }\n\n function convert007BlurayToDvd(field) {\n if (!fieldIsBluray007(field)) {\n return;\n }\n //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);\n //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string\n field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;\n }\n\n function convert007DvdToBluray(field) {\n if (!fieldIsDvd007(field)) {\n return;\n }\n //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);\n field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;\n }\n\n function fixField(field, record) {\n if (field.tag !== '007') {\n return field;\n }\n\n if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {\n // FIX 007: DVD -> Blu-ray\n convert007DvdToBluray(field);\n return field;\n }\n\n if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {\n // FIX 007: Blu-Ray -> DVD\n convert007BlurayToDvd(field);\n return field;\n }\n\n return field;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -33,8 +33,10 @@ function _default() {
33
33
  };
34
34
  async function fix(record) {
35
35
  const newFields = await getFields(record, defaultTags, []);
36
- newFields.forEach(nf => (0, _utils.nvdebug)(`Add new field '${(0, _utils.fieldToString)(nf)}'`, debug));
37
- newFields.forEach(nf => record.insertField(nf));
36
+ newFields.forEach(nf => (0, _utils.nvdebug)(`Add new field '${(0, _utils.fieldToString)(nf)}'`, debug)); // eslint-disable-line array-callback-return
37
+
38
+ newFields.forEach(nf => record.insertField(nf)); // eslint-disable-line array-callback-return
39
+
38
40
  const newFieldsAsStrings = newFields.map(f => (0, _utils.fieldToString)(f));
39
41
  return {
40
42
  message: [],
@@ -87,14 +89,11 @@ function _default() {
87
89
  async function deriveMissingFields(record, tag) {
88
90
  const pairlessFields = getPairlessFinnishAndSwedishFields(record, tag);
89
91
 
90
- /* eslint-disable */
91
92
  // Dunno how to handle loop+promise combo in our normal coding style. Spent half a day trying... (I reckon it takes like 2 minuts to do this properly...)
92
93
  let prefLabels = [];
93
94
  for (let i = 0; i < pairlessFields.length; i += 1) {
94
95
  prefLabels[i] = await getPrefLabel(pairlessFields[i]);
95
96
  }
96
- /* eslint-enable */
97
-
98
97
  const missingFields = pairlessFields.map((f, i) => pairField(f, prefLabels[i]));
99
98
  return missingFields.filter(f => f);
100
99
  }
@@ -201,7 +200,7 @@ function _default() {
201
200
  return termCache[uri];
202
201
  }
203
202
  const tmp = await getTermDataFromFinto(uri);
204
- termCache[uri] = tmp; // eslint-disable-line functional/immutable-data, require-atomic-updates
203
+ termCache[uri] = tmp;
205
204
  return tmp;
206
205
  }
207
206
  async function getTermDataFromFinto(uri) {
@@ -1 +1 @@
1
- {"version":3,"file":"translate-terms.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","e","__esModule","default","debug","createDebugLogger","defaultTags","swapLanguageCode","changeAbbrHash","termCache","_default","description","validate","fix","record","newFields","getFields","forEach","nf","nvdebug","fieldToString","insertField","newFieldsAsStrings","map","f","message","valid","length","messages","tags","fieldsToAdd","currTag","remainingTags","missingFields","deriveMissingFields","tmp","getPairlessFinnishAndSwedishFields","tag","expectedLex","mapTagToLex","fields","get","finnishFields","filter","isRelevantField","swedishFields","finnishOnly","getMisses","swedishOnly","tagAndFieldAgree","field","lexData","getLexiconAndLanguage","lex","pairlessFields","prefLabels","i","getPrefLabel","pairField","undefined","lexAndLang","twoLetterOtherLang","swapLanguageCodeBetweenLanguages","changeAbbr","lang","prefLabel","find","l","sfA","value","sf0","clone","subfields","sf","code","sf2","newField","ind1","ind2","subfield2","uri","fieldToUri","getTermData","subfieldA","pl","abbr","swaggerQuery","getTermDataFromFinto","headers","uri2","response","fetch","method","ok","json","graph","arr","hit","row","subfield0","id","replace","fieldAsString","match","lexLang","fieldHasSubfield","fieldHasValidSubfield0","fieldList1","fieldList2","hasSubfield0Match","pairFields","some"],"sources":["../src/translate-terms.js"],"sourcesContent":["import clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString, nvdebug} from './utils';\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:translate-terms');\nconst defaultTags = ['648', '650', '651', '655'];\n\nconst swapLanguageCode = {'fin': 'swe', 'fi': 'sv', 'sv': 'fi', 'swe': 'fin'};\nconst changeAbbrHash = {'fi': 'fin', 'fin': 'fi', 'sv': 'swe', 'swe': 'sv'};\n\nconst termCache = {};\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n\n return {\n description: 'Translate yso (648, 650, 651) and slm (655) terms (FIN <=> SWE)',\n validate, fix\n };\n\n async function fix(record) {\n const newFields = await getFields(record, defaultTags, []);\n\n newFields.forEach(nf => nvdebug(`Add new field '${fieldToString(nf)}'`, debug));\n\n newFields.forEach(nf => record.insertField(nf));\n\n const newFieldsAsStrings = newFields.map(f => fieldToString(f));\n\n\n return {message: [], fix: newFieldsAsStrings, valid: true};\n }\n\n async function validate(record) {\n const newFields = await getFields(record, defaultTags, []);\n if (newFields.length === 0) {\n return {'message': [], 'valid': true};\n }\n const messages = newFields.map(f => fieldToString(f));\n\n return {'message': messages, 'valid': false};\n }\n\n async function getFields(record, tags, fieldsToAdd) {\n const [currTag, ...remainingTags] = tags;\n if (!currTag) {\n return fieldsToAdd;\n }\n const missingFields = await deriveMissingFields(record, currTag);\n\n const tmp = await getFields(record, remainingTags, [...fieldsToAdd, ...missingFields]);\n return tmp;\n }\n\n function getPairlessFinnishAndSwedishFields(record, tag) {\n const expectedLex = mapTagToLex(tag);\n if (!expectedLex) {\n return [];\n }\n const fields = record.get(tag);\n const finnishFields = fields.filter(f => isRelevantField(f, 'fin'));\n const swedishFields = fields.filter(f => isRelevantField(f, 'swe'));\n const finnishOnly = getMisses(finnishFields, swedishFields);\n const swedishOnly = getMisses(swedishFields, finnishFields);\n\n //console.log(` Looking at ${finnishOnly.length} + ${swedishOnly.length} fields`); // eslint-disable-line no-console\n return [...finnishOnly, ...swedishOnly].filter(f => tagAndFieldAgree(f));\n\n function tagAndFieldAgree(field) {\n // Check that tag and $2 value are pairable:\n const lexData = getLexiconAndLanguage(field); // $2 data\n return expectedLex === lexData.lex;\n }\n }\n\n async function deriveMissingFields(record, tag) {\n const pairlessFields = getPairlessFinnishAndSwedishFields(record, tag);\n\n /* eslint-disable */\n // Dunno how to handle loop+promise combo in our normal coding style. Spent half a day trying... (I reckon it takes like 2 minuts to do this properly...)\n let prefLabels = [];\n for (let i=0; i < pairlessFields.length; i += 1) {\n prefLabels[i] = await getPrefLabel(pairlessFields[i]);\n }\n /* eslint-enable */\n\n const missingFields = pairlessFields.map((f, i) => pairField(f, prefLabels[i]));\n return missingFields.filter(f => f);\n }\n\n function pairField(field, prefLabels) {\n if (!prefLabels) {\n return undefined;\n }\n //console.log(`pairField() WP 1: ${fieldToString(field)}`); // eslint-disable-line no-console\n const lexAndLang = getLexiconAndLanguage(field);\n //console.log(`pairField() WP 2: ${JSON.stringify(lexAndLang)}`); // eslint-disable-line no-console\n const twoLetterOtherLang = swapLanguageCodeBetweenLanguages(changeAbbr(lexAndLang.lang));\n const prefLabel = prefLabels.find(l => l.lang === twoLetterOtherLang);\n //console.log(`pairField() WP 4: ${JSON.stringify(prefLabel)}`); // eslint-disable-line no-console\n const sfA = {'code': 'a', 'value': prefLabel.value}; // field.subfields.field(sf => sf.code === 'a');\n const sf0 = clone(field.subfields.find(sf => sf.code === '0'));\n const sf2 = {'code': '2', 'value': `${lexAndLang.lex}/${lexAndLang.lang === 'fin' ? 'swe' : 'fin'}`}; // swap fin <=> swe\n const newField = {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [sfA, sf2, sf0]};\n return newField;\n }\n\n function getLexiconAndLanguage(field) {\n const subfield2 = field.subfields.find(sf => sf.code === '2');\n if (subfield2.value === 'slm/fin') {\n return {'lex': 'slm', 'lang': 'fin'};\n }\n if (subfield2.value === 'slm/swe') {\n return {'lex': 'slm', 'lang': 'swe'};\n }\n if (subfield2.value === 'yso/fin') {\n return {'lex': 'yso', 'lang': 'fin'};\n }\n if (subfield2.value === 'yso/swe') {\n return {'lex': 'yso', 'lang': 'swe'};\n }\n return {};\n }\n\n async function getPrefLabel(field) {\n // Tag vs $2 correlation has already been checked!\n const uri = fieldToUri(field);\n if (!uri) { // $0 is invalid or sumthing\n return undefined;\n }\n const prefLabels = await getTermData(uri);\n if (!prefLabels) { // Sanity check. Miss caused by illegal id etc.\n nvdebug(`No labels found for ${uri}`, debug);\n return undefined;\n }\n const lexData = getLexiconAndLanguage(field); // $2 data\n const lang = changeAbbr(lexData.lang);\n\n\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n\n const prefLabel = prefLabels.find(pl => pl.lang === lang);\n //console.info(`Compare prefLabel '${prefLabel.value}' AND $a '${subfieldA.value}'`); // eslint-disable-line no-console\n if (prefLabel.value === subfieldA.value) {\n nvdebug(`'${fieldToString(field)}' requires translating`, debug);\n return prefLabels;\n }\n return undefined;\n }\n\n function swapLanguageCodeBetweenLanguages(code) {\n if (swapLanguageCode[code]) {\n return swapLanguageCode[code];\n }\n return code;\n }\n\n function changeAbbr(abbr) {\n if (changeAbbrHash[abbr]) {\n return changeAbbrHash[abbr];\n }\n return abbr;\n }\n\n function swaggerQuery(uri) {\n // This would work for only yso, not yso-paikat etc `https://api.finto.fi/rest/v1/yso/data?format=application%2Fjson&uri=${uri}`;\n return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`; // This is simpler, but contains more irrelevant data\n }\n\n async function getTermData(uri) {\n //console.log(`getTermData(${uri})`); // eslint-disable-line no-console\n if (termCache[uri]) { // Don't think current implementation uses the cache any more.\n //console.log(`CACHED ${uri}`); // eslint-disable-line no-console\n return termCache[uri];\n }\n const tmp = await getTermDataFromFinto(uri);\n termCache[uri] = tmp; // eslint-disable-line functional/immutable-data, require-atomic-updates\n return tmp;\n }\n\n async function getTermDataFromFinto(uri) {\n const headers = {'Accept': 'application/json'};\n const uri2 = swaggerQuery(uri);\n\n const response = await fetch(uri2, {method: 'GET', headers});\n if (!response.ok) {\n return undefined;\n }\n const json = await response.json();\n\n if (!json.graph) {\n return undefined;\n }\n const arr = json.graph;\n const [hit] = arr.filter(row => row.uri === uri);\n //console.log(`NEW JSON: ${JSON.stringify(hit.prefLabel)}`); // eslint-disable-line no-console\n return hit.prefLabel;\n }\n\n\n function fieldToUri(field) {\n const lex = mapTagToLex(field.tag);\n\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n const id = subfield0.value.replace(/^[^0-9]+/u, '');\n if (lex === 'yso') {\n //return `http%3A%2F%2Fwww.yso.fi%2Fonto%2Fyso%2Fp${id}`;\n return `http://www.yso.fi/onto/yso/p${id}`;\n }\n if (lex === 'slm') {\n return `http://urn.fi/URN:NBN:fi:au:slm:s${id}`;\n }\n return undefined;\n }\n\n function isRelevantField(field, lang) {\n const fieldAsString = fieldToString(field);\n\n // We should probably allow an optional $8 as the first subfield.\n if (!fieldAsString.match(/^... #7 ‡a [^‡]+ ‡2 [^‡]+ ‡0 [^‡]+(?: ‡9 [A-Z]+<(?:KEEP|DROP)>)*$/u)) {\n return false;\n }\n const lex = mapTagToLex(field.tag);\n const lexLang = `${lex}/${lang}`;\n if (!fieldHasSubfield(field, '2', lexLang)) {\n return false;\n }\n return fieldHasValidSubfield0(field);\n }\n\n function fieldHasValidSubfield0(field) {\n const lex = mapTagToLex(field.tag);\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n if (lex === 'yso' && subfield0.value.match(/^http:\\/\\/www\\.yso\\.fi\\/onto\\/yso\\/p[0-9]+$/u)) {\n return true;\n }\n if (lex === 'slm' && subfield0.value.match(/^http:\\/\\/urn\\.fi\\/URN:NBN:fi:au:slm:s[0-9]+$/u)) {\n return true;\n }\n return false;\n }\n\n function getMisses(fieldList1, fieldList2) {\n return fieldList1.filter(f => !hasSubfield0Match(f, fieldList2));\n }\n\n function hasSubfield0Match(field, pairFields) {\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n return pairFields.some(f => f.subfields.some(sf => sf.code === '0' && sf.value === subfield0.value));\n }\n\n\n function mapTagToLex(tag) {\n if (tag === '655') {\n return 'slm';\n }\n return 'yso';\n }\n\n\n /*\n function getValidIdentifiers(record, tag, lang) {\n const lex = mapTagToLex(tag);\n const subfield2Value = `${lex}/${lang}`;\n const candFields = record.get(tag).filter(f => f.subfields.some(sf => sf.code === '2' && sf.value === subfield2Value)); // TODO: filter\n return [];\n }\n */\n\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"translate-terms.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","e","__esModule","default","debug","createDebugLogger","defaultTags","swapLanguageCode","changeAbbrHash","termCache","_default","description","validate","fix","record","newFields","getFields","forEach","nf","nvdebug","fieldToString","insertField","newFieldsAsStrings","map","f","message","valid","length","messages","tags","fieldsToAdd","currTag","remainingTags","missingFields","deriveMissingFields","tmp","getPairlessFinnishAndSwedishFields","tag","expectedLex","mapTagToLex","fields","get","finnishFields","filter","isRelevantField","swedishFields","finnishOnly","getMisses","swedishOnly","tagAndFieldAgree","field","lexData","getLexiconAndLanguage","lex","pairlessFields","prefLabels","i","getPrefLabel","pairField","undefined","lexAndLang","twoLetterOtherLang","swapLanguageCodeBetweenLanguages","changeAbbr","lang","prefLabel","find","l","sfA","value","sf0","clone","subfields","sf","code","sf2","newField","ind1","ind2","subfield2","uri","fieldToUri","getTermData","subfieldA","pl","abbr","swaggerQuery","getTermDataFromFinto","headers","uri2","response","fetch","method","ok","json","graph","arr","hit","row","subfield0","id","replace","fieldAsString","match","lexLang","fieldHasSubfield","fieldHasValidSubfield0","fieldList1","fieldList2","hasSubfield0Match","pairFields","some"],"sources":["../src/translate-terms.js"],"sourcesContent":["import clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString, nvdebug} from './utils';\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:translate-terms');\nconst defaultTags = ['648', '650', '651', '655'];\n\nconst swapLanguageCode = {'fin': 'swe', 'fi': 'sv', 'sv': 'fi', 'swe': 'fin'};\nconst changeAbbrHash = {'fi': 'fin', 'fin': 'fi', 'sv': 'swe', 'swe': 'sv'};\n\nconst termCache = {};\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n\n return {\n description: 'Translate yso (648, 650, 651) and slm (655) terms (FIN <=> SWE)',\n validate, fix\n };\n\n async function fix(record) {\n const newFields = await getFields(record, defaultTags, []);\n\n newFields.forEach(nf => nvdebug(`Add new field '${fieldToString(nf)}'`, debug)); // eslint-disable-line array-callback-return\n\n newFields.forEach(nf => record.insertField(nf)); // eslint-disable-line array-callback-return\n\n const newFieldsAsStrings = newFields.map(f => fieldToString(f));\n\n\n return {message: [], fix: newFieldsAsStrings, valid: true};\n }\n\n async function validate(record) {\n const newFields = await getFields(record, defaultTags, []);\n if (newFields.length === 0) {\n return {'message': [], 'valid': true};\n }\n const messages = newFields.map(f => fieldToString(f));\n\n return {'message': messages, 'valid': false};\n }\n\n async function getFields(record, tags, fieldsToAdd) {\n const [currTag, ...remainingTags] = tags;\n if (!currTag) {\n return fieldsToAdd;\n }\n const missingFields = await deriveMissingFields(record, currTag);\n\n const tmp = await getFields(record, remainingTags, [...fieldsToAdd, ...missingFields]);\n return tmp;\n }\n\n function getPairlessFinnishAndSwedishFields(record, tag) {\n const expectedLex = mapTagToLex(tag);\n if (!expectedLex) {\n return [];\n }\n const fields = record.get(tag);\n const finnishFields = fields.filter(f => isRelevantField(f, 'fin'));\n const swedishFields = fields.filter(f => isRelevantField(f, 'swe'));\n const finnishOnly = getMisses(finnishFields, swedishFields);\n const swedishOnly = getMisses(swedishFields, finnishFields);\n\n //console.log(` Looking at ${finnishOnly.length} + ${swedishOnly.length} fields`); // eslint-disable-line no-console\n return [...finnishOnly, ...swedishOnly].filter(f => tagAndFieldAgree(f));\n\n function tagAndFieldAgree(field) {\n // Check that tag and $2 value are pairable:\n const lexData = getLexiconAndLanguage(field); // $2 data\n return expectedLex === lexData.lex;\n }\n }\n\n async function deriveMissingFields(record, tag) {\n const pairlessFields = getPairlessFinnishAndSwedishFields(record, tag);\n\n // Dunno how to handle loop+promise combo in our normal coding style. Spent half a day trying... (I reckon it takes like 2 minuts to do this properly...)\n let prefLabels = [];\n for (let i=0; i < pairlessFields.length; i += 1) {\n prefLabels[i] = await getPrefLabel(pairlessFields[i]);\n }\n\n const missingFields = pairlessFields.map((f, i) => pairField(f, prefLabels[i]));\n return missingFields.filter(f => f);\n }\n\n function pairField(field, prefLabels) {\n if (!prefLabels) {\n return undefined;\n }\n //console.log(`pairField() WP 1: ${fieldToString(field)}`); // eslint-disable-line no-console\n const lexAndLang = getLexiconAndLanguage(field);\n //console.log(`pairField() WP 2: ${JSON.stringify(lexAndLang)}`); // eslint-disable-line no-console\n const twoLetterOtherLang = swapLanguageCodeBetweenLanguages(changeAbbr(lexAndLang.lang));\n const prefLabel = prefLabels.find(l => l.lang === twoLetterOtherLang);\n //console.log(`pairField() WP 4: ${JSON.stringify(prefLabel)}`); // eslint-disable-line no-console\n const sfA = {'code': 'a', 'value': prefLabel.value}; // field.subfields.field(sf => sf.code === 'a');\n const sf0 = clone(field.subfields.find(sf => sf.code === '0'));\n const sf2 = {'code': '2', 'value': `${lexAndLang.lex}/${lexAndLang.lang === 'fin' ? 'swe' : 'fin'}`}; // swap fin <=> swe\n const newField = {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [sfA, sf2, sf0]};\n return newField;\n }\n\n function getLexiconAndLanguage(field) {\n const subfield2 = field.subfields.find(sf => sf.code === '2');\n if (subfield2.value === 'slm/fin') {\n return {'lex': 'slm', 'lang': 'fin'};\n }\n if (subfield2.value === 'slm/swe') {\n return {'lex': 'slm', 'lang': 'swe'};\n }\n if (subfield2.value === 'yso/fin') {\n return {'lex': 'yso', 'lang': 'fin'};\n }\n if (subfield2.value === 'yso/swe') {\n return {'lex': 'yso', 'lang': 'swe'};\n }\n return {};\n }\n\n async function getPrefLabel(field) {\n // Tag vs $2 correlation has already been checked!\n const uri = fieldToUri(field);\n if (!uri) { // $0 is invalid or sumthing\n return undefined;\n }\n const prefLabels = await getTermData(uri);\n if (!prefLabels) { // Sanity check. Miss caused by illegal id etc.\n nvdebug(`No labels found for ${uri}`, debug);\n return undefined;\n }\n const lexData = getLexiconAndLanguage(field); // $2 data\n const lang = changeAbbr(lexData.lang);\n\n\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n\n const prefLabel = prefLabels.find(pl => pl.lang === lang);\n //console.info(`Compare prefLabel '${prefLabel.value}' AND $a '${subfieldA.value}'`); // eslint-disable-line no-console\n if (prefLabel.value === subfieldA.value) {\n nvdebug(`'${fieldToString(field)}' requires translating`, debug);\n return prefLabels;\n }\n return undefined;\n }\n\n function swapLanguageCodeBetweenLanguages(code) {\n if (swapLanguageCode[code]) {\n return swapLanguageCode[code];\n }\n return code;\n }\n\n function changeAbbr(abbr) {\n if (changeAbbrHash[abbr]) {\n return changeAbbrHash[abbr];\n }\n return abbr;\n }\n\n function swaggerQuery(uri) {\n // This would work for only yso, not yso-paikat etc `https://api.finto.fi/rest/v1/yso/data?format=application%2Fjson&uri=${uri}`;\n return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`; // This is simpler, but contains more irrelevant data\n }\n\n async function getTermData(uri) {\n //console.log(`getTermData(${uri})`); // eslint-disable-line no-console\n if (termCache[uri]) { // Don't think current implementation uses the cache any more.\n //console.log(`CACHED ${uri}`); // eslint-disable-line no-console\n return termCache[uri];\n }\n const tmp = await getTermDataFromFinto(uri);\n termCache[uri] = tmp;\n return tmp;\n }\n\n async function getTermDataFromFinto(uri) {\n const headers = {'Accept': 'application/json'};\n const uri2 = swaggerQuery(uri);\n\n const response = await fetch(uri2, {method: 'GET', headers});\n if (!response.ok) {\n return undefined;\n }\n const json = await response.json();\n\n if (!json.graph) {\n return undefined;\n }\n const arr = json.graph;\n const [hit] = arr.filter(row => row.uri === uri);\n //console.log(`NEW JSON: ${JSON.stringify(hit.prefLabel)}`); // eslint-disable-line no-console\n return hit.prefLabel;\n }\n\n\n function fieldToUri(field) {\n const lex = mapTagToLex(field.tag);\n\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n const id = subfield0.value.replace(/^[^0-9]+/u, '');\n if (lex === 'yso') {\n //return `http%3A%2F%2Fwww.yso.fi%2Fonto%2Fyso%2Fp${id}`;\n return `http://www.yso.fi/onto/yso/p${id}`;\n }\n if (lex === 'slm') {\n return `http://urn.fi/URN:NBN:fi:au:slm:s${id}`;\n }\n return undefined;\n }\n\n function isRelevantField(field, lang) {\n const fieldAsString = fieldToString(field);\n\n // We should probably allow an optional $8 as the first subfield.\n if (!fieldAsString.match(/^... #7 ‡a [^‡]+ ‡2 [^‡]+ ‡0 [^‡]+(?: ‡9 [A-Z]+<(?:KEEP|DROP)>)*$/u)) {\n return false;\n }\n const lex = mapTagToLex(field.tag);\n const lexLang = `${lex}/${lang}`;\n if (!fieldHasSubfield(field, '2', lexLang)) {\n return false;\n }\n return fieldHasValidSubfield0(field);\n }\n\n function fieldHasValidSubfield0(field) {\n const lex = mapTagToLex(field.tag);\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n if (lex === 'yso' && subfield0.value.match(/^http:\\/\\/www\\.yso\\.fi\\/onto\\/yso\\/p[0-9]+$/u)) {\n return true;\n }\n if (lex === 'slm' && subfield0.value.match(/^http:\\/\\/urn\\.fi\\/URN:NBN:fi:au:slm:s[0-9]+$/u)) {\n return true;\n }\n return false;\n }\n\n function getMisses(fieldList1, fieldList2) {\n return fieldList1.filter(f => !hasSubfield0Match(f, fieldList2));\n }\n\n function hasSubfield0Match(field, pairFields) {\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n return pairFields.some(f => f.subfields.some(sf => sf.code === '0' && sf.value === subfield0.value));\n }\n\n\n function mapTagToLex(tag) {\n if (tag === '655') {\n return 'slm';\n }\n return 'yso';\n }\n\n\n /*\n function getValidIdentifiers(record, tag, lang) {\n const lex = mapTagToLex(tag);\n const subfield2Value = `${lex}/${lang}`;\n const candFields = record.get(tag).filter(f => f.subfields.some(sf => sf.code === '2' && sf.value === subfield2Value)); // TODO: filter\n return [];\n }\n */\n\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = _default;
7
7
  var _debug = _interopRequireDefault(require("debug"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/typeOfDate-008'); // eslint-disable-line
10
-
9
+ const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/typeOfDate-008');
11
10
  function _default() {
12
11
  return {
13
12
  description: 'Validates 008 06',
@@ -32,12 +31,12 @@ function _default() {
32
31
  }
33
32
  function fix(record) {
34
33
  // LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi
35
- const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data
34
+ const [f008] = record.pop(/008/u);
36
35
  const c06 = f008.value.substring(6, 7);
37
36
  const c1114 = f008.value.substring(11, 15);
38
37
  // if 008 06 = s, and 11-14 = #### (not year/digits)
39
38
  if (c06 === 't' && !/[0-9u]{4}/u.test(c1114)) {
40
- f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data
39
+ f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`;
41
40
  record.insertField(f008);
42
41
  return true;
43
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"typeOfDate-008.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","f008","get","c06","value","substring","c1114","test","valid","message","pop","insertField"],"sources":["../src/typeOfDate-008.js"],"sourcesContent":["import createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008'); // eslint-disable-line\n\nexport default function () {\n return {\n description: 'Validates 008 06',\n validate,\n fix\n };\n\n function validate(record) {\n const [f008] = record.get(/008/u);\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n debug('is t and not valid 1114');\n return {valid: false, message: 'Invalid 008 06'};\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n // LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi\n const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data\n record.insertField(f008);\n return true;\n }\n\n record.insertField(f008);\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,yDAAyD,CAAC,CAAC,CAAE;;AAE9E,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kBAAkB;IAC/BC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACE,GAAG,CAAC,MAAM,CAAC;IACjC,MAAMC,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CZ,KAAK,CAAC,yBAAyB,CAAC;MAChC,OAAO;QAACc,KAAK,EAAE,KAAK;QAAEC,OAAO,EAAE;MAAgB,CAAC;IAClD;IAEA,OAAO;MAACD,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAAST,GAAGA,CAACC,MAAM,EAAE;IACnB;IACA,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,MAAMP,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CL,IAAI,CAACG,KAAK,GAAG,GAAGH,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIJ,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MACzEL,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;MACxB,OAAO,IAAI;IACb;IAEAD,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;IACxB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
1
+ {"version":3,"file":"typeOfDate-008.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","f008","get","c06","value","substring","c1114","test","valid","message","pop","insertField"],"sources":["../src/typeOfDate-008.js"],"sourcesContent":["import createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008');\n\nexport default function () {\n return {\n description: 'Validates 008 06',\n validate,\n fix\n };\n\n function validate(record) {\n const [f008] = record.get(/008/u);\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n debug('is t and not valid 1114');\n return {valid: false, message: 'Invalid 008 06'};\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n // LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi\n const [f008] = record.pop(/008/u);\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`;\n record.insertField(f008);\n return true;\n }\n\n record.insertField(f008);\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,yDAAyD,CAAC;AAE3E,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kBAAkB;IAC/BC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACE,GAAG,CAAC,MAAM,CAAC;IACjC,MAAMC,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CZ,KAAK,CAAC,yBAAyB,CAAC;MAChC,OAAO;QAACc,KAAK,EAAE,KAAK;QAAEC,OAAO,EAAE;MAAgB,CAAC;IAClD;IAEA,OAAO;MAACD,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAAST,GAAGA,CAACC,MAAM,EAAE;IACnB;IACA,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACU,GAAG,CAAC,MAAM,CAAC;IACjC,MAAMP,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CL,IAAI,CAACG,KAAK,GAAG,GAAGH,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIJ,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,CAAC,EAAE;MACvEL,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;MACxB,OAAO,IAAI;IACb;IAEAD,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;IACxB,OAAO,IAAI;EACb;AACF","ignoreList":[]}
@@ -123,7 +123,7 @@ function _default() {
123
123
  function fix(record) {
124
124
  getFields(record.fields).forEach(field => {
125
125
  field.subfields.filter(subfield => PATTERN.test(subfield.value)).forEach(subfield => {
126
- subfield.value = convert(subfield.value); // eslint-disable-line functional/immutable-data
126
+ subfield.value = convert(subfield.value);
127
127
  });
128
128
  });
129
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"unicode-decomposition.js","names":["MAP_CONVERSION","å","ä","ö","Å","Ä","Ö","á","à","â","ã","ć","č","ç","é","è","ê","ẽ","ë","í","ì","î","ĩ","ï","ñ","ó","ò","ô","õ","ś","š","ú","ù","û","ü","ũ","ý","ỳ","ŷ","ỹ","ÿ","ž","Á","À","Â","Ã","É","È","Ê","Ẽ","Ë","Í","Ì","Î","Ĩ","Ï","Ñ","Ó","Ò","Ô","Õ","Ś","Ú","Ù","Û","Ũ","Ü","Ý","Ỳ","Ŷ","Ỹ","Ÿ","_default","PATTERN","Object","keys","reduce","result","key","index","list","length","RegExp","description","validate","fix","record","codes","getFields","fields","map","field","subfields","filter","subfield","test","value","code","valid","messages","join","forEach","convert","some","includes","replace"],"sources":["../src/unicode-decomposition.js"],"sourcesContent":["const MAP_CONVERSION = {\n\n /**\n * @internal Normalizations\n **/\n '‐': '-',\n '‑': '-',\n '‒': '-',\n '–': '-',\n '—': '-',\n '―': '-',\n\n /**\n * @internal Normalizations (MELINDA-4172, MELINDA-4175)\n **/\n 'Ⓒ': '©',\n 'Ⓟ': '℗',\n\n /**\n * @internal Precompose å, ä, ö, Å, Ä and Ö\n **/\n å: 'å',\n ä: 'ä',\n ö: 'ö',\n Å: 'Å',\n Ä: 'Ä',\n Ö: 'Ö',\n\n /**\n * @internal Decompose everything else (list incomplete)\n **/\n á: 'á',\n à: 'à',\n â: 'â',\n ã: 'ã',\n ć: 'ć',\n č: 'č',\n ç: 'ç',\n é: 'é',\n è: 'è',\n ê: 'ê',\n ẽ: 'ẽ',\n ë: 'ë',\n í: 'í',\n ì: 'ì',\n î: 'î',\n ĩ: 'ĩ',\n ï: 'ï',\n ñ: 'ñ',\n ó: 'ó',\n ò: 'ò',\n ô: 'ô',\n õ: 'õ',\n ś: 'ś',\n š: 'š',\n ú: 'ú',\n ù: 'ù',\n û: 'û',\n ü: 'ü',\n ũ: 'ũ',\n ý: 'ý',\n ỳ: 'ỳ',\n ŷ: 'ŷ',\n ỹ: 'ỹ',\n ÿ: 'ÿ',\n ž: 'ž',\n Á: 'Á',\n À: 'À',\n Â: 'Â',\n Ã: 'Ã',\n É: 'É',\n È: 'È',\n Ê: 'Ê',\n Ẽ: 'Ẽ',\n Ë: 'Ë',\n Í: 'Í',\n Ì: 'Ì',\n Î: 'Î',\n Ĩ: 'Ĩ',\n Ï: 'Ï',\n Ñ: 'Ñ',\n Ó: 'Ó',\n Ò: 'Ò',\n Ô: 'Ô',\n Õ: 'Õ',\n Ś: 'Ś',\n Ú: 'Ú',\n Ù: 'Ù',\n Û: 'Û',\n Ũ: 'Ũ',\n Ü: 'Ü',\n Ý: 'Ý',\n Ỳ: 'Ỳ',\n Ŷ: 'Ŷ',\n Ỹ: 'Ỹ',\n Ÿ: 'Ÿ'\n};\n\nexport default function () {\n const PATTERN = Object.keys(MAP_CONVERSION).reduce((result, key, index, list) => index === list.length - 1 ? new RegExp(`${result}${key})`, 'u') : `${result}${key}|`, '(');\n\n return {\n description: 'Unicode decomposer',\n validate,\n fix\n };\n\n function validate(record) {\n const codes = getFields(record.fields).map(field => {\n if ('subfields' in field) {\n return field.subfields.filter(subfield => PATTERN.test(subfield.value))\n .map(subfield => subfield.code);\n }\n\n return null;\n });\n return codes.length < 1 ? {valid: true, messages: []} : {valid: false, messages: [`The following subfields are not properly decomposed: ${codes.join(', ')}`]};\n }\n\n function fix(record) {\n getFields(record.fields).forEach(field => {\n field.subfields\n .filter(subfield => PATTERN.test(subfield.value))\n .forEach(subfield => {\n subfield.value = convert(subfield.value); // eslint-disable-line functional/immutable-data\n });\n });\n }\n\n function getFields(fields) {\n return fields.filter(field => {\n if ('subfields' in field) {\n return field.subfields.some(subfield => PATTERN.test(subfield.value));\n }\n\n return null;\n });\n }\n}\n\nexport function convert(value) {\n return Object.keys(MAP_CONVERSION).reduce((result, key) => result.includes(key) ? result.replace(new RegExp(key, 'ug'), MAP_CONVERSION[key]) : result, value);\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"unicode-decomposition.js","names":["MAP_CONVERSION","å","ä","ö","Å","Ä","Ö","á","à","â","ã","ć","č","ç","é","è","ê","ẽ","ë","í","ì","î","ĩ","ï","ñ","ó","ò","ô","õ","ś","š","ú","ù","û","ü","ũ","ý","ỳ","ŷ","ỹ","ÿ","ž","Á","À","Â","Ã","É","È","Ê","Ẽ","Ë","Í","Ì","Î","Ĩ","Ï","Ñ","Ó","Ò","Ô","Õ","Ś","Ú","Ù","Û","Ũ","Ü","Ý","Ỳ","Ŷ","Ỹ","Ÿ","_default","PATTERN","Object","keys","reduce","result","key","index","list","length","RegExp","description","validate","fix","record","codes","getFields","fields","map","field","subfields","filter","subfield","test","value","code","valid","messages","join","forEach","convert","some","includes","replace"],"sources":["../src/unicode-decomposition.js"],"sourcesContent":["const MAP_CONVERSION = {\n\n /**\n * @internal Normalizations\n **/\n '‐': '-',\n '‑': '-',\n '‒': '-',\n '–': '-',\n '—': '-',\n '―': '-',\n\n /**\n * @internal Normalizations (MELINDA-4172, MELINDA-4175)\n **/\n 'Ⓒ': '©',\n 'Ⓟ': '℗',\n\n /**\n * @internal Precompose å, ä, ö, Å, Ä and Ö\n **/\n å: 'å',\n ä: 'ä',\n ö: 'ö',\n Å: 'Å',\n Ä: 'Ä',\n Ö: 'Ö',\n\n /**\n * @internal Decompose everything else (list incomplete)\n **/\n á: 'á',\n à: 'à',\n â: 'â',\n ã: 'ã',\n ć: 'ć',\n č: 'č',\n ç: 'ç',\n é: 'é',\n è: 'è',\n ê: 'ê',\n ẽ: 'ẽ',\n ë: 'ë',\n í: 'í',\n ì: 'ì',\n î: 'î',\n ĩ: 'ĩ',\n ï: 'ï',\n ñ: 'ñ',\n ó: 'ó',\n ò: 'ò',\n ô: 'ô',\n õ: 'õ',\n ś: 'ś',\n š: 'š',\n ú: 'ú',\n ù: 'ù',\n û: 'û',\n ü: 'ü',\n ũ: 'ũ',\n ý: 'ý',\n ỳ: 'ỳ',\n ŷ: 'ŷ',\n ỹ: 'ỹ',\n ÿ: 'ÿ',\n ž: 'ž',\n Á: 'Á',\n À: 'À',\n Â: 'Â',\n Ã: 'Ã',\n É: 'É',\n È: 'È',\n Ê: 'Ê',\n Ẽ: 'Ẽ',\n Ë: 'Ë',\n Í: 'Í',\n Ì: 'Ì',\n Î: 'Î',\n Ĩ: 'Ĩ',\n Ï: 'Ï',\n Ñ: 'Ñ',\n Ó: 'Ó',\n Ò: 'Ò',\n Ô: 'Ô',\n Õ: 'Õ',\n Ś: 'Ś',\n Ú: 'Ú',\n Ù: 'Ù',\n Û: 'Û',\n Ũ: 'Ũ',\n Ü: 'Ü',\n Ý: 'Ý',\n Ỳ: 'Ỳ',\n Ŷ: 'Ŷ',\n Ỹ: 'Ỹ',\n Ÿ: 'Ÿ'\n};\n\nexport default function () {\n const PATTERN = Object.keys(MAP_CONVERSION).reduce((result, key, index, list) => index === list.length - 1 ? new RegExp(`${result}${key})`, 'u') : `${result}${key}|`, '(');\n\n return {\n description: 'Unicode decomposer',\n validate,\n fix\n };\n\n function validate(record) {\n const codes = getFields(record.fields).map(field => {\n if ('subfields' in field) {\n return field.subfields.filter(subfield => PATTERN.test(subfield.value))\n .map(subfield => subfield.code);\n }\n\n return null;\n });\n return codes.length < 1 ? {valid: true, messages: []} : {valid: false, messages: [`The following subfields are not properly decomposed: ${codes.join(', ')}`]};\n }\n\n function fix(record) {\n getFields(record.fields).forEach(field => {\n field.subfields\n .filter(subfield => PATTERN.test(subfield.value))\n .forEach(subfield => {\n subfield.value = convert(subfield.value);\n });\n });\n }\n\n function getFields(fields) {\n return fields.filter(field => {\n if ('subfields' in field) {\n return field.subfields.some(subfield => PATTERN.test(subfield.value));\n }\n\n return null;\n });\n }\n}\n\nexport function convert(value) {\n return Object.keys(MAP_CONVERSION).reduce((result, key) => result.includes(key) ? result.replace(new RegExp(key, 'ug'), MAP_CONVERSION[key]) : result, value);\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -68,9 +68,9 @@ const licences = [{
68
68
  'url': 'https://creativecommons.org/publicdomain/mark/1.0/deed.fi'
69
69
  }];
70
70
  function findSubfieldIndex(field, subfield) {
71
- subfield.nvtmp = 1; // eslint-disable-line functional/immutable-data
71
+ subfield.nvtmp = 1;
72
72
  const index = field.subfields.findIndex(sf => sf.nvtmp === 1);
73
- delete subfield.nvtmp; // eslint-disable-line functional/immutable-data
73
+ delete subfield.nvtmp;
74
74
  return index;
75
75
  }
76
76
  function validLicenseInSubfieldC(subfieldC, license) {
@@ -89,12 +89,12 @@ function validUrlInSubfieldU(subfieldU, license) {
89
89
  }
90
90
  function fixC(field, subfieldC) {
91
91
  // MELINDA-2431_
92
- subfieldC.code = 'f'; // eslint-disable-line functional/immutable-data
92
+ subfieldC.code = 'f';
93
93
  const index = findSubfieldIndex(field, subfieldC);
94
94
  field.subfields.splice(index + 1, 0, {
95
95
  'code': '2',
96
96
  'value': 'cc'
97
- }); // eslint-disable-line functional/immutable-data
97
+ });
98
98
  }
99
99
  function fieldHasOldCcLicense(field, fix) {
100
100
  if (field.tag !== '540') {
@@ -107,9 +107,8 @@ function fieldHasOldCcLicense(field, fix) {
107
107
  }
108
108
  //nvdebug(` Found valid license`);
109
109
  if (fix) {
110
- // eslint-disable-line functional/no-conditional-statements
111
110
  const subfieldsC = field.subfields.filter(sf => validLicenseInSubfieldC(sf, validLicense));
112
- subfieldsC.forEach(c => fixC(field, c));
111
+ subfieldsC.forEach(c => fixC(field, c)); // eslint-disable-line array-callback-return
113
112
  }
114
113
  return true;
115
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update-field-540.js","names":["_utils","require","_default","description","validate","fix","record","fixedFields","getFieldsThatUseOldFormat","fixedFieldsAsStrings","map","f","fieldToString","message","valid","yeOldeFields","length","messages","licences","findSubfieldIndex","field","subfield","nvtmp","index","subfields","findIndex","sf","validLicenseInSubfieldC","subfieldC","license","code","value","validUrlInSubfieldU","subfieldU","url","fixC","splice","fieldHasOldCcLicense","tag","validLicense","find","some","subfieldsC","filter","forEach","c","fields"],"sources":["../src/update-field-540.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/update-field-540');\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Validator for field 540 (modernization as per MELKEHITYS-2431)',\n validate, fix\n };\n\n function fix(record) {\n const fixedFields = getFieldsThatUseOldFormat(record, true);\n\n const fixedFieldsAsStrings = fixedFields.map(f => fieldToString(f));\n\n return {message: [], fix: fixedFieldsAsStrings, valid: true};\n }\n\n function validate(record) {\n const yeOldeFields = getFieldsThatUseOldFormat(record, false);\n if (yeOldeFields.length === 0) {\n return {'message': [], 'valid': true};\n }\n const messages = yeOldeFields.map(f => fieldToString(f));\n\n return {'message': messages, 'valid': false};\n }\n\n}\n\n\nconst licences = [\n {'license': 'CC BY 4.0', 'url': 'https://creativecommons.org/licenses/by/4.0/deed.fi'},\n {'license': 'CC BY-NC 4.0', 'url': 'https://creativecommons.org/licenses/by-nc/4.0/deed.fi'},\n {'license': 'CC BY-NC-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fi'},\n {'license': 'CC BY-NC-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fi'},\n {'license': 'CC BY-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nd/4.0/deed.fi'},\n {'license': 'CC BY-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-sa/4.0/deed.fi'},\n {'license': 'CC0 1.0', 'url': 'https://creativecommons.org/publicdomain/zero/1.0/deed.fi'}, // not seen/unused\n {'license': 'Public domain', 'url': 'https://creativecommons.org/publicdomain/mark/1.0/deed.fi'}\n];\n\nfunction findSubfieldIndex(field, subfield) {\n subfield.nvtmp = 1; // eslint-disable-line functional/immutable-data\n const index = field.subfields.findIndex(sf => sf.nvtmp === 1);\n delete subfield.nvtmp; // eslint-disable-line functional/immutable-data\n return index;\n}\n\nfunction validLicenseInSubfieldC(subfieldC, license) {\n if (subfieldC.code !== 'c') {\n return false;\n }\n //nvdebug(`Compare ${subfieldC.value} vs ${license.license}`);\n return license.license === subfieldC.value;\n}\n\nfunction validUrlInSubfieldU(subfieldU, license) {\n if (subfieldU.code !== 'u') {\n return false;\n }\n //nvdebug(`Compare ${subfieldU.value} vs ${license.url}`);\n return license.url === subfieldU.value;\n}\n\n\nfunction fixC(field, subfieldC) {\n // MELINDA-2431_\n subfieldC.code = 'f'; // eslint-disable-line functional/immutable-data\n const index = findSubfieldIndex(field, subfieldC);\n field.subfields.splice(index + 1, 0, {'code': '2', 'value': 'cc'}); // eslint-disable-line functional/immutable-data\n}\n\nfunction fieldHasOldCcLicense(field, fix) {\n if (field.tag !== '540') {\n return false;\n }\n //nvdebug(`NORM 540: ${fieldToString(field)}`);\n const validLicense = licences.find(license => field.subfields.some(sf => validLicenseInSubfieldC(sf, license)) && field.subfields.some(sf => validUrlInSubfieldU(sf, license)));\n if (!validLicense) {\n return false;\n }\n //nvdebug(` Found valid license`);\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n const subfieldsC = field.subfields.filter(sf => validLicenseInSubfieldC(sf, validLicense));\n subfieldsC.forEach(c => fixC(field, c));\n }\n\n return true;\n}\n\n\nfunction getFieldsThatUseOldFormat(record, fix) {\n return record.fields.filter(f => fieldHasOldCcLicense(f, fix));\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"update-field-540.js","names":["_utils","require","_default","description","validate","fix","record","fixedFields","getFieldsThatUseOldFormat","fixedFieldsAsStrings","map","f","fieldToString","message","valid","yeOldeFields","length","messages","licences","findSubfieldIndex","field","subfield","nvtmp","index","subfields","findIndex","sf","validLicenseInSubfieldC","subfieldC","license","code","value","validUrlInSubfieldU","subfieldU","url","fixC","splice","fieldHasOldCcLicense","tag","validLicense","find","some","subfieldsC","filter","forEach","c","fields"],"sources":["../src/update-field-540.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/update-field-540');\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Validator for field 540 (modernization as per MELKEHITYS-2431)',\n validate, fix\n };\n\n function fix(record) {\n const fixedFields = getFieldsThatUseOldFormat(record, true);\n\n const fixedFieldsAsStrings = fixedFields.map(f => fieldToString(f));\n\n return {message: [], fix: fixedFieldsAsStrings, valid: true};\n }\n\n function validate(record) {\n const yeOldeFields = getFieldsThatUseOldFormat(record, false);\n if (yeOldeFields.length === 0) {\n return {'message': [], 'valid': true};\n }\n const messages = yeOldeFields.map(f => fieldToString(f));\n\n return {'message': messages, 'valid': false};\n }\n\n}\n\n\nconst licences = [\n {'license': 'CC BY 4.0', 'url': 'https://creativecommons.org/licenses/by/4.0/deed.fi'},\n {'license': 'CC BY-NC 4.0', 'url': 'https://creativecommons.org/licenses/by-nc/4.0/deed.fi'},\n {'license': 'CC BY-NC-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fi'},\n {'license': 'CC BY-NC-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fi'},\n {'license': 'CC BY-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nd/4.0/deed.fi'},\n {'license': 'CC BY-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-sa/4.0/deed.fi'},\n {'license': 'CC0 1.0', 'url': 'https://creativecommons.org/publicdomain/zero/1.0/deed.fi'}, // not seen/unused\n {'license': 'Public domain', 'url': 'https://creativecommons.org/publicdomain/mark/1.0/deed.fi'}\n];\n\nfunction findSubfieldIndex(field, subfield) {\n subfield.nvtmp = 1;\n const index = field.subfields.findIndex(sf => sf.nvtmp === 1);\n delete subfield.nvtmp;\n return index;\n}\n\nfunction validLicenseInSubfieldC(subfieldC, license) {\n if (subfieldC.code !== 'c') {\n return false;\n }\n //nvdebug(`Compare ${subfieldC.value} vs ${license.license}`);\n return license.license === subfieldC.value;\n}\n\nfunction validUrlInSubfieldU(subfieldU, license) {\n if (subfieldU.code !== 'u') {\n return false;\n }\n //nvdebug(`Compare ${subfieldU.value} vs ${license.url}`);\n return license.url === subfieldU.value;\n}\n\n\nfunction fixC(field, subfieldC) {\n // MELINDA-2431_\n subfieldC.code = 'f';\n const index = findSubfieldIndex(field, subfieldC);\n field.subfields.splice(index + 1, 0, {'code': '2', 'value': 'cc'});\n}\n\nfunction fieldHasOldCcLicense(field, fix) {\n if (field.tag !== '540') {\n return false;\n }\n //nvdebug(`NORM 540: ${fieldToString(field)}`);\n const validLicense = licences.find(license => field.subfields.some(sf => validLicenseInSubfieldC(sf, license)) && field.subfields.some(sf => validUrlInSubfieldU(sf, license)));\n if (!validLicense) {\n return false;\n }\n //nvdebug(` Found valid license`);\n if (fix) {\n const subfieldsC = field.subfields.filter(sf => validLicenseInSubfieldC(sf, validLicense));\n subfieldsC.forEach(c => fixC(field, c)); // eslint-disable-line array-callback-return\n }\n\n return true;\n}\n\n\nfunction getFieldsThatUseOldFormat(record, fix) {\n return record.fields.filter(f => fieldHasOldCcLicense(f, fix));\n}\n\n"],"mappings":"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","ignoreList":[]}